dvwa靶场攻击过程
凌晨两点,靶场DVWA靶场里那个熟悉的攻击过程登录框又亮了起来。这次我决定不碰SQL注入,靶场专攻命令执行模块——Medium级别的攻击过程防护。说实话,靶场这级别的攻击过程过滤规则挺鸡肋的,它把`&&`和`;`都拦了,靶场但偏偏漏了`|`这个管道符。攻击过程
输入框里填上`127.0.0.1|whoami`,靶场回车。攻击过程页面顶端跳出一行小字:`www-data`。靶场成了。攻击过程这感觉就像发现邻居家的靶场门锁是坏的,轻轻一推就开了。攻击过程
接着试`|cat /etc/passwd`,靶场文件内容直接糊在屏幕上。root、daemon、bin,一个个系统账号排着队裸露。DVWA故意搭的这台Linux服务器,现在像本摊开的日记。有意思的是,过滤函数只检查了IP地址里有没有特殊字符,压根没管命令拼接部分——典型的“检查了但没完全检查”。
High级别就聪明多了。它用`stripslashes`加`explode`把输入按空格拆成数组,再逐个比对黑名单。`|`和`&`全被毙了,连空格都成了拦路虎。我试了`127.0.0.1%0awhoami`,URL编码换行符,结果还是被拦。那会儿我盯着屏幕抽了半根烟,突然想到Linux下有个叫`$IFS`的环境变量,默认值是空格、制表符和换行。构造`127.0.0.1$IFS|$IFSwhoami`——等等,管道符还是会被过滤。
换个思路。既然黑名单里没禁`%0a`,但过滤函数在`explode`之前就处理了编码,这条路堵死。真正让我豁出去的是试了试`127.0.0.1$(whoami)`——命令替换。结果页面直接回显了`www-data`,连管道符都不用。High级别的过滤把命令分隔符当重点,却忘了`$()`这种花活。
打到这里我反而有点同情靶场的作者。防御方永远在猜攻击者会用什么,但攻击者只需要找到一个没被猜到的缝隙。DVWA的每个漏洞模块都像一堂反讽课——它教你怎么黑,其实是在教你怎么防。
最后我把Medium级别的`|cat /etc/shadow`也试了,当然没权限读。但那个报错信息写得跟裸奔似的:`Warning: file_get_contents(/etc/shadow): failed to open stream: Permission denied in /var/www/html/vulnerabilities/exec/source/medium.php on line 15`。连文件路径和行号都交代了。这要是真实站,光靠报错信息就能把服务器目录结构摸个底朝天。
关了靶场,我盯着浏览器地址栏里那串localhost发愣。DVWA玩多了会产生一种错觉——好像漏洞都长着标准脸。但真实世界的系统,哪有这么规规矩矩给你出题?更多的攻击发生在你看不见的角落,用着比`$()`更刁钻的手法。不过话说回来,能把基础攻击链玩顺溜,再去碰那些花哨的0day,心里好歹有个底。
靶场终究是靶场,但每一发打出去的payload,都在脑子里刻了条回路。









