命令注入是指由于系统对参数缺少过滤,导致攻击者可以在目标系统上执行任意命令
在linux或windows系统上,可以通过命令连接符同时执行多条命令,攻击者往往可以将注入的命令放到连接符之后进行执行。例如
ls || ifconfig
下面是常见的命令连接符:
command1 & command2
command1和command2都执行command1 && command2
command1执行成功再执行command2command1 || command2
command1执行失败再执行command2,command1执行成功则不执行command2command1 | command2
command1的输出作为command2的输入
Low
将安全等级设置为low,可以看到可以文本框可以输入一个网站进行ping操作
使用&&
连接ls
命令即可在后面看到当前目录的文件,说明命令注入成功
源码分析
分析源码,可以看到low安全等级使用target变量获取接收用户输入后,调用shell_exec函数进行了执行,没有做任何过滤。
Medium
将安全等级设置为Medium,此时&&
连接符失效,使用&
连接符仍然可以成功注入命令。
源码分析
可以看到Medium等级对&&
和;
连接符进行了过滤。
High
在High等级可以使用|
连接符进行命令注入,注意不要加空格。
源码分析
查看源码,可以看到对更多连接符进行了过滤,但是|
后多了一个空格,因此可以仍然可以使用|
符号成功注入。
Impossible
源码分析
将安全等级设置为impossible,此时分析源码,可以看到,首先将IP地址使用.
进行了分割,然后依次判断分割后的部分是否都为数字,如果分割后的每个部分均为数字并且刚好分割为4个部分则说明IP地址格式正确,使用.
重新连接后再进行命令执行。如果IP地址格式错误则不再执行。