命令注入简介
命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的
LOW级别
服务器通过判断操作系统执行不同ping命令,但是对ip参数并未做任何的过滤,导致了严重的命令注入漏洞
正常执行

使用
&同时执行多条命令1
127.0.0.1 & pwd

使用
|(管道符)同时执行多条命令1
127.0.0.1 | cat /etc/passwd

使用
&&(与)同样可以执行多条命令1
127.0.0.1 && pwd

使用
||(或)同样可以执行多条命令1
1 || cat /etc/passwd

使用
;同样可以执行多条命令1
127.0.0.1 ; pwd

使用`、
$()在有些情况下也可执行多条指令
&与&&的区别:
Command 1&Command 2先执行
Command 1,不管是否成功,都会执行Command 2Command 1&&Command 2先执行
Command 1,执行成功后执行Command 2,否则不执行Command 2
|与||的区别:
Command 1|Command 2管道符,
Command 2会以Command 1的输出结果为输入进行执行Command 1||Command 2先执行
Command 1失败,才会执行Command 2
Medium级别
服务器端对ip参数做了一定过滤,即把&& 、;删除,本质上采用的是黑名单机制,因此依旧存在安全问题
使用
&绕过过滤1
127.0.0.1 & cat /etc/passwd

使用
&;&绕过过滤1
127.0.0.1 &;& pwd

High级别
High级别的代码进一步完善了黑名单,过滤了&、;、|、-、$、(、)、||、` 但由于黑名单机制的局限性,我们依然可以绕过
黑名单看似过滤了所有的非法字符,但仔细观察到是把|(注意这里|后有一个空格)替换为空字符,于是 |(注意这里|前有一个空格)成了“漏网之鱼”
1 | 127.0.0.1 |cat /etc/passwd |

Impossible级别
Impossible级别的代码加入了Anti-CSRF token,同时对参数ip进行了严格的限制,只有诸如“数字.数字.数字.数字”的输入才会被接收执行,因此不存在命令注入漏洞
命令注入防御
如特殊需要,尽量不要使用系统命令
对敏感字符进行白名单过滤
参数值使用引号包括