漏洞网站靶子
上周三凌晨两点,漏洞我在一台旧笔记本上跑DVWA,网站忘了关端口映射。漏洞第二天醒来,网站数据库里多了三十七条留言,漏洞全是网站俄语,内容从“你好”到“你的漏洞服务器像瑞士奶酪”都有。那个瞬间我意识到,网站漏洞网站靶子从来不是漏洞玩具——它是一扇故意不锁的门,但风会从你想不到的网站方向灌进来。
很多人把DVWA、漏洞OWASP Juice Shop、网站bWAPP这类东西当成练手沙盒。漏洞装完Docker,网站打开浏览器,漏洞输入admin/password,然后开始对着SQL注入的输入框傻笑。这没问题。问题在于,你笑的时候,靶场本身也在被扫描。Shodan上搜“DVWA”能蹦出几千个结果,默认口令都没改。有人写爬虫批量刷这些地址,不是为了学技术,是为了拿shell去挖矿。一个练手靶子,最后成了别人的矿机,这事我见过不止一次。
靶子的价值在于它把漏洞从抽象概念变成可触摸的按钮。比如XSS,你看一百篇讲解不如在DVWA的低安全级别里输入<script>alert(1)</script>,看着弹窗跳出来那一刻,脑子里的“反射型”三个字才真正落地。但这里有个陷阱:靶子给的是理想环境。真实网站有WAF、有CSP、有各种你意想不到的过滤。你在靶子上弹个窗,到了真实站点可能连尖括号都被转义成<。所以我的习惯是,在靶子上验证概念,然后立刻去找一个真实但无害的目标——比如自己的博客——试同样的payload。大部分时候会失败,失败才有信息量。
Juice Shop比DVWA更现代,它把漏洞藏在一个Angular前端里。你得先看懂它的API调用,才能找到那些没做权限校验的接口。我第一次玩的时候卡在“管理员注册”那个挑战上,试了半小时SQL注入,结果答案是把注册请求里的"role":"customer"改成"role":"admin"。这种设计逼你从“输入框思维”切换到“请求思维”。靶子不会直接告诉你漏洞在哪,它只给你一个功能,剩下的靠你自己拆。
但靶子也有副作用。有人刷完DVWA的二十个模块,就觉得自己会渗透了。去面试,被问“如果目标没有报错信息怎么办”,直接愣住。靶子里的SQL注入会给你详细的数据库报错,真实环境往往只返回一个500页面。盲注、时间盲注、布尔盲注,这些在靶子上有提示,在现实里全靠猜和写脚本。我见过一个哥们,在靶场上百发百中,到了真实授权测试里连一个注入点都找不到。靶子是泳池,大海里没有泳道线。
另外,别在公网暴露靶子。我自己的做法是:靶场只跑在127.0.0.1,或者用Tailscale组个私有网络。Docker映射端口时写-p 127.0.0.1:8080:80,别写-p 8080:80。前者只监听本地,后者监听所有网卡。这个区别,我花了三十七条俄语留言才记住。如果你非要用云服务器,记得改默认口令,加HTTP基本认证,或者干脆用完就销毁。靶子是用来学的,不是用来给别人当跳板的。
最后说个具体的。DVWA的文件包含模块,低安全级别下?page=../../../../etc/passwd直接出内容。但如果你把PHP版本升到8.1,这个payload可能失效,因为allow_url_include默认关了。靶子本身也在变。你去年写的笔记,今年可能就跑不通。这不是坏事——它提醒你,漏洞利用不是背口诀,是理解环境。每次靶子报错,都是一次重新读文档的机会。
所以,漏洞网站靶子该玩,但别只玩它。把它当起点,别当终点。关掉Docker之前,想想那个端口映射有没有写127.0.0.1。三十七条俄语留言教会我的,就这一件事。
相关文章:
