参考文章:
DVWA之Command injection(命令执行漏洞) | 新手指南:DVWA-1.9全级别教程之Command Injection

原理

在操作系统中, & 、&& 、| 、 || 都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令

PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!、DedeCMS等曾经存在过该类型漏洞

&和&&表示a&&b,a和b条件都为真,执行
&&:执行完前面的命令然后执行后面的命令, &:不管前面的命令是否执行,后面的都执行

|和||表示 a||b,a和b其中一个条件允许,执行
||:只要满足第一个条件,后面的条件就不再判断 |:对**所有**的条件进行判断

分析

Low

先看代码,进行审计,找出可命令注入原因

这里代码接收了用户输入的ip,然后根据服务器是否为Windows NT系统,对目标ip进行不同的ping测试

但是这里对用户输入的ip并没有进行任何的过滤,所以我们可以进行命令执行漏洞
image.png

先ping一下百度,看能否执行,是可以的
image.png

接下来直接利用命令连接符,加上ipconfig
image.png

Medium

老样子,先看代码,进行审计,找出可命令注入原因

这里增加了对 && 和 ;的过滤,但是这并没有什么软用
我们根本就不用 && ,我们直接用 &
image.png
image.png

High

老样子,先看代码,进行审计,找出可命令注入原因

进行了黑名单过滤,把一些常见的命令连接符给过滤了。黑名单过滤看似安全,但是如果黑名单不全是话,是很容易进行绕过的

我们仔细看黑名单过滤中的| , |后面还有一个空格,所以我们可以进行绕过
image.png

127.0.0.1|ipconfig
image.png

Impossible

老样子,先看代码,进行审计,找出可命令注入原因

加入了Anti-CSRF token,防止了CSRF

同时对参数ip进行了严格的限制,只有诸如“数字.数字.数字.数字”的输入才会被接收执行,因此不存在命令注入漏洞
image.png

stripslashes函数

stripslashes(string) : 该函数会删除字符串string中的反斜杠,返回已剥离反斜杠的字符串

explode函数

explode(separator,string,limit): 该函数把字符串打散为**数组**,返回字符串的数组
参数separator规定在哪里分割字符串,参数string是要分割的字符串,可选参数limit规定所返回的数组元素的数目

is_numeric函数

is_numeric(string): 该检测string是否为数字或数字字符串,如果是返回TRUE,否则返回FALSE