1. 项目概述:为什么DVWA的XSS关卡值得深挖?
如果你刚接触Web安全,或者想找个地方系统地练练手,DVWA(Damn Vulnerable Web Application)这个靶场大概率是你绕不开的起点。它把各种经典漏洞,像SQL注入、文件上传、命令执行,当然还有我们今天要聊的XSS(跨站脚本攻击),都打包在一个环境里,让你可以合法地“搞破坏”。而XSS这一块,在DVWA里被分成了反射型、存储型和DOM型三种,难度从低到高,还设置了四个安全等级(Low, Medium, High, Impossible),简直就是一本活的Web安全教科书。
但很多人玩DVWA的XSS,可能就停留在“输入个 <script>alert(1)</script> ,弹个窗,通关”的层面。这就有点可惜了。这个靶场的真正价值,在于它每一关背后都藏着一段真实的、有代表性的PHP源码。你弹窗成功了,只是看到了现象;而通过分析源码,你才能明白漏洞是怎么产生的,开发者当时是怎么想的,以及他设置的那些“安全措施”为什么能被绕过。这才是从“脚本小子”迈向“安全研究员”的关键一步。
我自己带新人或者自己复现的时候,就特别喜欢拿DVWA的XSS关卡当案例。因为它足够典型,从Low级别的毫无防护,到Impossible级别的彻底根治,你能看到一个漏洞防御思路的完整演进史。而且,在搭建环境这一步,很多人会卡在PHPStudy上,尤其是MySQL启动不了、502错误这些坑,如果没人提前告诉你,可能半天时间就搭进去了。所以,这篇指南不仅会带你通关,更会带你“读懂”每一关,并分享那些我踩过的环境坑,让你把精力真正花在刀刃上。
2. 环境准备与避坑实录:让PHPStudy稳定跑起来
工欲善其事,必先利其器。DVWA靶场本质上是一个PHP+MySQL的Web应用,在Windows上,用PHPStudy来搭建是最快最省事的选择。但“一键安装”往往伴随着“一键踩坑”,下面我就把最常见的几个坑和解决方案列出来,这都是实打实从无数次重装和调试中总结出来的。
2.1 PHPStudy版本与组件选择
首先,不要去官网下最新版。最新版有时为了追求新特性,反而在兼容性上容易出问题。对于DVWA这种老牌靶场,求稳是第一位的。我强烈推荐使用 PHPStudy V8.1 版本。这个版本经过大量测试,与DVWA的兼容性最好。
安装时,在组件选择界面,记住一个核心原则: 版本宁旧勿新,组合要求稳 。具体配置如下:
- PHP版本 :选择 PHP 5.4.45nts 。DVWA的代码在一些新版本PHP(比如PHP7.4以上)的严格语法检查下可能会报警告或错误,虽然不影响运行,但看着烦。PHP 5.4.45是经过无数人验证的、与DVWA完美兼容的版本。“nts”代表非线程安全,在Windows集成环境下更稳定。
- MySQL版本 :选择 MySQL 5.5.62 。同样,这是一个非常稳定的版本。切忌选择MySQL 8.0,它的身份认证插件(caching_sha2_password)与老版本的PHP连接库不兼容,会导致DVWA无法连接数据库。
- Web服务器 :选择 Apache 或 Nginx 都可以。Apache更传统,配置简单;Nginx更轻量。对于新手,我建议直接用Apache,减少不必要的配置麻烦。
按照这个组合安装,能避开至少70%的环境问题。
2.2 经典问题排查:MySQL无法启动与502错误
即使选对了版本,启动时可能还是会遇到问题。下面这两个是最经典的。
问题一:MySQL启动失败,提示“端口被占用”或启动后立刻停止。 这通常是3306端口被其他程序(比如你电脑上原有的MySQL服务、某些数据库工具等)占用了。
- 解决方案 :
- 打开PHPStudy,在“MySQL”操作栏点击“配置”,选择“my.ini”。
- 找到
port = 3306这一行,将其修改为一个不常用的端口,例如port = 3307。 - 保存文件,重启MySQL。
- 关键一步 :修改DVWA的数据库配置文件。找到你解压的DVWA目录,进入
config文件夹,将config.inc.php.dist文件复制一份,重命名为config.inc.php。用记事本打开它,找到$_DVWA[ 'db_port' ] = 3306;,将3306修改为你刚才设置的3307。 这样,PHPStudy的MySQL和DVWA就都使用新端口了。
问题二:访问DVWA首页出现“502 Bad Gateway”错误。 这个问题通常出现在Nginx环境下,原因是PHP-FPM进程没有正常启动或配置不对。
- 解决方案 :
- 确保你安装的是PHP 5.4.45 nts 版本。线程安全(ts)版本与Nginx的配合有时会出问题。
- 打开PHPStudy,在“软件管理”中找到你安装的PHP版本,点击“设置”。
- 选择“PHP-FPM”,确认“运行状态”是“已启动”。如果没有,手动启动它。
- 检查“监听端口”,默认是9000。然后切换到“网站”标签,找到你的DVWA站点,点击“管理”->“修改”。
- 在“高级设置”中,找到“PHP版本”,确保它正确指向了你安装的PHP 5.4.45。更重要的是,确认“运行目录”设置正确,通常需要指向DVWA的根目录。 如果上述步骤不行,一个更彻底的方法是换用Apache。在PHPStudy的“网站”设置里,直接把你站点的“服务器类型”从Nginx改成Apache,然后重启服务,问题往往迎刃而解。
2.3 DVWA的初始配置与安全等级设置
环境搞定后,把DVWA源码解压到PHPStudy的 www 目录下(比如路径是 D:\phpstudy_pro\WWW\dvwa )。在浏览器访问 http://127.0.0.1/dvwa 或 http://localhost/dvwa 。
第一次访问会看到一个红色的提示,告诉你 config.inc.php 文件需要配置。按照我们上面第二步说的,复制并重命名好这个文件。然后刷新页面。
接下来是数据库初始化。点击页面中的 Setup / Reset DB 按钮。PHPStudy会自动创建数据库和表。如果这一步报错,请回头检查 config.inc.php 中的数据库密码(默认是 root )、端口号是否与PHPStudy中的MySQL设置一致。
成功初始化后,使用默认账号 admin 和密码 password 登录。登录后,在左侧菜单找到 “DVWA Security” 。这里就是设置漏洞难度的核心。 务必把安全等级设置为“Low” ,这样我们才能从最基础的漏洞开始分析。后面的通关过程,我们都需要在这里切换不同等级。
注意 :每次切换安全等级后,最好刷新一下你正在测试的漏洞页面(比如XSS页面),因为防护逻辑是实时生效的。
3. 反射型XSS:从源码看输入输出的“信任危机”
反射型XSS(Reflected XSS)的特点是,恶意脚本“反射”自当前HTTP请求中,通常通过URL参数传递,一次性影响点击该恶意链接的用户。DVWA的反射型XSS关卡完美展示了不同防护等级下的代码演变。
3.1 Low级别:毫无防护的“裸奔”
在Low级别下,我们直接输入一个经典payload: <script>alert(document.domain)</script> 。页面成功弹窗,显示“127.0.0.1”。这太简单了,关键要看源码。
打开 vulnerabilities/xss_r/source/low.php ,核心代码就几行:
<?php
header ("X-XSS-Protection: 0");
// 关闭浏览器自带的XSS过滤器,确保漏洞可被利用
if( array_key_exists( "name", $


338

被折叠的 条评论
为什么被折叠?



