- 什么是命令注入
即 Command Injection。是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。在Web应用中,有时候会用到一些命令执行的函数,如phpsystem、exec、shell_exec等,当对用户输入的命令没有进行限制或者过滤不严导致用户可以执行任意命令时,就会造成命令执行漏洞。
- 注入原理
- 黑客将构造好的命令发送给web服务器,服务器根据拼接命令执行注入的命令,最后讲结果显示给黑客。
- DVWA演练
- Low等级
在讲命令注入之前不得不讲讲DOS下一些符号的使用方法了
&&:只有当前面的命令执行成功才执行后面的命令
&:无论怎样总执行后面的命令
||:只有当前面的命令执行失败才执行后面的命令
|:将前面命令执行的输出作为后面命令执行的输入
说完使用方法我们直接来分析源代码
这里就是检测了字符串第一次出现的位置没有做任何过滤,所以我们可以直接使用DOS连接符进行注入!
这里有点乱码。但是没关系可以看到是执行了我们后面那个ipconfig命令的!
- Medium等级
看看源代码
这里对我们输入的&&符号和;号进行了替换,替换成看空字符。所以在我们进行命令注入的时候就要避开替换的字符。所以我们要避开&&符号所以我们可以利用&号来注入。
- High
看看源代码
可以看到这里几乎对所有的DOS连接符都做了替换,但是仔细观察就会发现一点弊端。
这里的 | 符号后面多了一个空格,现实生活中就相当于程序员小手一抖多了一个空格,也就是多了这一个空格,导致过滤不严格,我们的 | 符号没有被过滤,所以我们可以进行命令注入。但是注意 | 符号是在前一条命令执行失败的时候在执行下一条所以,我们前面ping的ip地址一点要是ping不通的。我本机192.168.2.1是ping不通的所以
- Impossible等级
看看源代码
这里检查了token防止了CSRF,还使用了stripslashes函数去除反斜杠,explode函数进行分割。
Is_numeric函数检查是否为数字,并且给出了严格的输入限制,只有如“数字.数字.数字.数字”的输入才会被接收执行,因此不存在命令注入漏洞。