DVWA 实战部署指南:快速搭建 Web 安全漏洞练习场
【免费下载链接】DVWADamn Vulnerable Web Application (DVWA)项目地址: https://gitcode.com/gh_mirrors/dv/DVWA
DVWA(Damn Vulnerable Web Application)是一个内置 SQL 注入、XSS、文件上传等经典漏洞的 PHP 练习靶场,适合安全新手与 Web 开发者在隔离环境中做攻防实操。本文带你走通 Docker 一键部署与手动 LAMP 搭建两条路径,并附常见坑点排查。
为什么值得关注
- 难度分级清晰:每个漏洞模块都提供 low、medium、high、impossible 四档防护强度,既能上手练习,也能对照源码学习修复思路。
- 攻击面覆盖全:vulnerabilities/ 目录下有 sqli、xss、exec、upload、csrf、cryptography 等十余个模块,基本对应 OWASP 常见弱点清单。
- 留有隐藏关卡:除了文档化的漏洞,项目还刻意埋了未公开的问题,鼓励你自行挖掘,而不是照抄教程。
环境准备
| 组件 | 最低版本 | 备注 |
|---|---|---|
| PHP | 7.3+(推荐 8.x) | 低于 7.3 有已知问题,5.x 已不支持 |
| 数据库 | MariaDB 10.x | MySQL 可用,但 MariaDB 开箱即用更省心 |
| Web 服务器 | Apache | 想玩 API 模块需启用mod_rewrite |
| Docker + Compose | 最新稳定版 | 仅容器化路线需要 |
版本提醒:PHP 与数据库版本搭配不当是报错重灾区,优先选较新的 PHP 搭配 MariaDB,可以避开一大类认证与兼容问题。
部署实战
用 Docker Compose 一条命令拉起容器
这是最省事的路径,仓库自带编排文件 compose.yml,会自动拉取官方镜像和mariadb:10:
git clone https://gitcode.com/gh_mirrors/dv/DVWA cd DVWA docker compose up -d启动后访问http://localhost:4280,默认账号admin,密码password。
两个实用细节:端口特意选 4280 而非 80,是为了避开本机已有服务;看日志用docker compose logs,图形界面里点容器也能查。
手动搭建 LAMP 环境
Debian 系系统(含 Kali、Ubuntu)一条命令装齐依赖:
apt install -y apache2 mariadb-server php php-mysqli php-gd libapache2-mod-php然后做三件事:
- 把 DVWA 目录放进 Web 根目录,例如
/var/www/html/DVWA; - 复制配置文件:
cp config/config.inc.php.dist config/config.inc.php,示例值见 config/config.inc.php.dist; - 在 MariaDB 中创建专用账号——注意 MariaDB 下不能直接用 root,需要建独立用户,密码与配置文件默认值保持一致即可免改配置:
create database dvwa; create user dvwa@localhost identified by 'p@ssw0rd'; grant all on dvwa.* to dvwa@localhost;通过 Setup 页面一键初始化表结构
登录后进主菜单的 Setup 页面,点击 Create / Reset Database 即可自动建表并写入演示数据,不需要手动导入任何 SQL 脚本。注意该操作会清空整个 dvwa 数据库,所以请给它一个专用库,别指向正在使用的业务库。
跑起来之后
- 练攻击:从 sqli 模块 low 档开始,输入带单引号的值观察报错,再用 UNION 查表;xss_d / xss_r / xss_s 分别对应存储型、反射型 DOM 场景;upload 模块适合练习文件类型绕过。
- 学防御:切到 high 或 impossible 档,配合源码查看页对比"修复版"如何使用预处理语句与输出转义,这是项目最大的教学价值。
- ⚠️安全红线:DVWA 是故意做脆弱的,严禁部署到任何公网可达的服务器。容器保持只监听
127.0.0.1,实操环境建议用 NAT 模式的虚拟机隔离。 - 文件上传模块需要
hackable/uploads/目录可被 Web 服务写入,权限不足时该模块会失效。
常见问题
打开页面一片空白
PHP 默认不展示错误,连数据库连接失败都不提示。在 php.ini 中打开display_errors = on和display_startup_errors = on并重启 Apache,真实报错就会显形。
提示 Access denied 或 unknown authentication method
前者一般是配置文件里的账号与数据库不一致,先用mysql -u dvwa -p -D dvwa单独验证登录;后者源于新版 MySQL 默认的caching_sha2_password认证插件 PHP 不认识,最稳的办法是换装 MariaDB,或把该用户改为mysql_native_password。
访问 404 或看到 Apache 默认页
Linux 目录匹配区分大小写:克隆出来的目录名是DVWA,在 URL 里小写输入dvwa必然 404。对照 Web 根目录里文件的实际相对路径核对 URL 即可。
4280 端口被占用
修改 compose.yml 中的ports: - 127.0.0.1:4280:80,把 4280 换成任意空闲端口后重新docker compose up -d。
Docker 一启动 DVWA 就跟着自启
compose.yml 里写有restart: unless-stopped,注释掉两行即可关闭;临时停止用docker compose stop或docker compose down。
延伸资源
- README 完整文档:涵盖 XAMPP、Windows、SQLite 后端等更多安装方式与排错细节
- 简体中文 README
- Dockerfile:镜像里预装了 gd、mysqli、Composer 等依赖的构建过程
- SQLi 模块 与 API 模块:两个值得单独深挖的实验室
- 工具搭配:实操时建议配合 Burp Suite 或 OWASP ZAP 这类抓包代理,效率会高很多
- 历史版本文档 docs/DVWA_v1.3.pdf
【免费下载链接】DVWADamn Vulnerable Web Application (DVWA)项目地址: https://gitcode.com/gh_mirrors/dv/DVWA
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考