ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

DVWA 实战部署指南:快速搭建 Web 安全漏洞练习场

DVWA 实战部署指南:快速搭建 Web 安全漏洞练习场

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 常见弱点清单。
  • 留有隐藏关卡:除了文档化的漏洞,项目还刻意埋了未公开的问题,鼓励你自行挖掘,而不是照抄教程。

环境准备

组件最低版本备注
PHP7.3+(推荐 8.x)低于 7.3 有已知问题,5.x 已不支持
数据库MariaDB 10.xMySQL 可用,但 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

然后做三件事:

  1. 把 DVWA 目录放进 Web 根目录,例如/var/www/html/DVWA;
  2. 复制配置文件:cp config/config.inc.php.dist config/config.inc.php,示例值见 config/config.inc.php.dist;
  3. 在 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),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进