DVWA Web 漏洞靶场保姆级指南:5 分钟跑通,19 个模块带你练完 SQL 注入和 XSS
【免费下载链接】DVWADamn Vulnerable Web Application (DVWA)项目地址: https://gitcode.com/gh_mirrors/dv/DVWA
Damn Vulnerable Web Application(简称 DVWA)是一个刻意写得"漏洞百出"的 PHP/MariaDB 练习网站:SQL 注入、跨站脚本(XSS)、文件上传、命令执行这些常见 Web 漏洞,它每个都给你造好了入口,并且按 low / medium / high / impossible 四档难度分层。对新手来说,它就是那个"可以放心打、不用担心误伤别人"的 Web 安全练功房。
先分清:这个靶场适合谁,又有一条红线
DVWA 的官方定位很明确:帮安全从业者在合法环境里练手、帮 Web 开发者理解防护思路、帮老师和学生在教室里教 Web 安全。
适合的人群大致三类:
- 零基础想入门 Web 安全的学生,先在这里把漏洞"打出来"一遍;
- 会写代码、但没系统练过攻防的开发,用来理解"为什么参数不校验会出事";
- 需要带团队的讲师或内训组织者,每个模块页面底部都自带帮助说明和提示,天然适合课堂演示。
不过有一条边界必须说在前面:
⚠️DVWA 只能部署在你自己的电脑、虚拟机或内网隔离环境里,严禁发布到公网或任何对外服务的服务器上。它的全部"价值"就在于不设防,一旦暴露到 Internet,几秒内就会被扫描器锁定,你的机器会立刻成为肉鸡。官方 README 里也专门用加粗警告了这一点。
装之前:环境和端口两件事
如果你打算用 Docker 一键跑(下文默认路线),前置要求只有一个:装好 Docker 和 Docker Compose(Docker Desktop 默认都带)。
docker version docker compose version两条命令都能输出版本号,就可以直接开始。
如果你更想"手动搭一套"(Windows 上通常是 XAMPP,Debian/Ubuntu 上是 Apache + MariaDB),依赖大致是:
- PHP(建议 7.3 以上,PHP 5 已不受支持)+ Apache
- MariaDB(官方更推荐它而不是 MySQL,开箱即用,不需要额外改配置)
- API 模块还需要 Apache 开启
mod_rewrite,并在vulnerabilities/api下装 Composer 依赖(详见 README.md 的 Linux Packages / Apache Modules 一节)
第二个容易踩的坑是端口:Docker 方式下 DVWA 不是跑在 80 端口,而是映射到4280,且 compose.yml 里默认只绑定127.0.0.1,也就是只允许本机能访问——这其实是官方帮你做的一层"不上公网"的保险,访问时记得用http://localhost:4280。
5 分钟跑起你的第一个 DVWA 靶场
整个过程就三步,全程不需要手动建库、不需要配数据库账号(Docker 编排文件里已经内置了一个dvwa用户)。
第一步,把仓库克隆下来:
git clone https://gitcode.com/gh_mirrors/dv/DVWA.git cd DVWA第二步,一键启动:
docker compose up -d它会在容器里拉起两个服务:一个 PHP + Apache 的应用容器,一个 MariaDB 10 数据库容器(账号密码由 compose.yml 自动注入)。
启动后可以随时在终端看日志确认两个容器都 Running:
docker compose logs第三步,浏览器打开http://localhost:4280。首次进入没有登录框,这是正常的——它还在等你初始化数据库。
进网页建库:点两下按钮,顺便记牢默认账号
在页面顶部菜单里进入Setup页,你会看到环境自检列表(PHP 版本、mysqli、gd 等扩展是否就绪),确认没有红色报错后,点Create / Reset Database按钮,数据库和示例数据就建好了。
这里有个必须记住的坑:
⚠️Create / Reset Database 会把目标数据库整个删掉重建。所以这个数据库应该专门给 DVWA 用,别复用你项目里存了业务数据的库。这一点在 config/config.inc.php.dist 顶部注释里写得很清楚。
建完库,登录账号是默认写死在文档里的:
- 用户名:
admin - 密码:
password
(练习暴力破解、认证绕过等模块时,这个默认账号本身就是你最好的"靶子"。)
第一次进靶场怎么玩:难度、源码和练习顺序
登录后左侧菜单就是全部 19 个漏洞模块。每个模块的玩法都一样:
- 切难度:页面右上(或顶部)的 Security 下拉框,
low最脆弱、impossible基本无懈可击; - 看源码:每个模块都有
source/目录,把low.php和impossible.php并排对比,你能直观看到"少写了两行校验代码"会导致什么后果; - 看提示:页面底部 Help 按钮打开官方提示,卡住了就看一眼,别干憋;
- 按自己的节奏走:可以固定一个难度横向把所有模块通关,也可以单点突破(比如只在 SQL 注入里从 low 一路打到 impossible)。官方还故意留了文档未提及的隐藏漏洞,鼓励你自己去发现。
各模块对应的代码都在vulnerabilities/目录下的同名子文件夹里,练习时随时可以翻源码对照:
| 模块 | 练什么 | 对应目录 |
|---|---|---|
| SQL Injection | 经典报错/联合注入 | vulnerabilities/sqli/ |
| Blind SQLi | 布尔/时间盲注 | vulnerabilities/sqli_blind/ |
| XSS (Reflected/Stored/DOM) | 反射、存储、DOM 型 XSS | vulnerabilities/xss_r/ 等 |
| File Upload | 绕过文件类型校验 | vulnerabilities/upload/ |
| File Inclusion | 包含任意文件 | vulnerabilities/fi/ |
| Command Execution | 系统命令注入 | vulnerabilities/exec/ |
| CSRF | 跨站请求伪造 | vulnerabilities/csrf/ |
| Brute Force / CAPTCHA | 撞库与验证码绕过 | vulnerabilities/brute/ 等 |
| Auth Bypass / Backdoor | 认证绕过、后门文件 | vulnerabilities/authbypass/ 等 |
| Weak ID / Open Redirect / CSP | 弱口令、开放重定向、CSP | vulnerabilities/weak_id/ 等 |
| API | 接口层面的鉴权与越权问题 | vulnerabilities/api/ |
如果你要练 Burp Suite、OWASP ZAP 这类抓包扫描工具,DVWA 的每个模块都是现成的靶标,配合四档难度,正好可以观察工具在不同防护水位下的表现。
安全与伦理红线:练完记得收摊
再重复一遍最重要的三件事,练之前、练之后各读一次:
- 🔒只在自己可控的环境里跑:本机、虚拟机(NAT 网络模式)或隔离内网。Docker 路线默认只监听
127.0.0.1:4280,不要改绑公网地址; - 🔒别改默认密码后忘记它,也别用它去攻击别的网站——DVWA 上的每一个漏洞手法,放到没有授权的真实系统上都是违法行为;
- 🔒用完就清理:不再练习时执行
docker compose down停掉容器;如果连数据都不要了,把项目目录删掉即可,别把这套源码留在任何长期开机的机器上。
进阶:往更深处走
- 完整安装文档和多语言说明(含中文版 README.zh.md):README.md
- 数据库各难度初始化脚本(想手动复现数据时看):database/
- 旧版本更新记录,了解哪些漏洞是后来加上的:CHANGELOG.md
- SQLi 模块支持切换 SQLite 后端,切换方式在 config/config.inc.php.dist 的
SQLI_DB注释里有说明 - 觉得 DVWA 通关后"不够难",可以再去找 OWASP 的同类训练项目和更复杂的虚拟靶场继续进阶
照这篇文章走完一遍,你应该已经能回答三个问题:每个漏洞在低难度下长什么样、加两行防护代码为什么就免疫了、以及为什么同样的代码绝对不能上线到公网。能答上来,这五分钟的靶场就没白跑。
【免费下载链接】DVWADamn Vulnerable Web Application (DVWA)项目地址: https://gitcode.com/gh_mirrors/dv/DVWA
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考