一、什么是命令注入(Command Injection)
通过提交恶意构造的参数破坏命令语句的结构,从而达到执行恶意命令的目的。
在web应用中,有时会用到一些命令执行的函数,如php中system、exec、shell_exec等,当对用户输入的命令没有进行限制或者过滤不严导致用户可以任意执行命令时,就会造成命令执行漏洞。
二、注入原理
三、靶场实践
ping命令:ping IP地址 ip地址是可控字段,可以修改
- 1.low等级
命令:127.0.0.1
ping ip地址 连接符 命令:确定命令语句
连接符:&& & | ||
&& (逻辑与):只有 && 前面的命令执行成功后,它后面的命令才被执行
|| (逻辑或):只有 || 前面的命令执行失败后,它后面的命令才被执行
& (后台任务符):同时执行所有命令
| (管道符):当第一条命令失败时,它仍然会执行第二条命令
命令: 126.0.0.1|ipconfig
- 2.medium等级
源码:只过滤了&&和;过滤不严格
命令:126.0.0.1|ipconfig
- 3.high等级:
源码:虽然限制的比较多,不过还是可以绕过
命令:127.0.0.1 || ipconfig 源码: ‘||’ => ‘’, 没有空格,增加空格可以绕过
命令:127.0.0.1|ipconfig 源码’| ’ => ‘’,有一个空格,去掉空格可以绕过
- 4.impossible等级:
源码: 代码加入了Anti-CSRF token,同时对参数ip进行了严格限制,只有像“数字.数字.数字.数字”的输入才会被接收执行,因此不存在命令注入漏洞。
Anti-CSRF token
数字.数字.数字.数字