DVWA靶场 安装与部署
二、安装与部署
DVWA 依赖 PHP 与 MySQL,用 Docker 部署最省事,不必在宿主机装 PHP 环境。
- 确认 Docker 可用,并检查 80 端口没被占用(宿主机常被 Nginx/IIS 占用)。
- 拉起容器,把容器 80 端口映射到宿主机一个不冲突的高位端口。
- 初始化数据库,打开首页底部的
Setup / Reset DB按钮点一次,DVWA 会建表并灌入初始数据。 - 登录,默认账号
admin,默认口令password,登录后可在Setup页重置。 - 调整难度,左侧菜单
DVWA Security里选档位,练习时先停在 Low。
# 最简方式:直接跑官方镜像
docker run --rm -it -p 8080:80 vulnerables/web-dvwa
# 或者用 compose 固定下来,方便反复重建
cat > docker-compose.yml <<'EOF'
services:
dvwa:
image: vulnerables/web-dvwa
ports:
- "8080:80"
environment:
- MYSQL_ROOT_PASSWORD=dvwa
restart: unless-stopped
EOF
docker compose up -d
系统与依赖要求:镜像内已带 Apache + PHP + MySQL,本机只要有 Docker 即可;若用源码部署,需要 PHP(版本以官方文档为准)、MySQL/MariaDB、以及开启 allow_url_include(File Inclusion 的 RFI 模块要用到)。
常见报错排查:
| 报错 | 原因 | 处理 |
|---|---|---|
Could not connect to MySQL | 数据库容器没起来,或 config/config.inc.php 里的主机名/口令不对 | 先 docker compose ps 看状态,再核对配置文件里的 db_host、db_user、db_password |
Access denied for user 'root'@'localhost' | 口令不一致,或 MySQL 8 的认证插件不兼容老代码 | 统一口令;必要时改用 MariaDB 镜像 |
The PHP function allow_url_include is not enabled | php.ini 未开启该选项,RFI 模块不可用 | 在 php.ini 打开 allow_url_include=On 后重启 Apache |
Port is already allocated | 宿主机的 80 端口被别的服务占用 | 换成 -p 8080:80 之类的高位端口 |
| 页面 403 / 500 | 目录权限不足,或 PHP 版本过新导致老函数被移除 | 检查挂载目录权限;换用官方镜像里配套的 PHP 版本 |
部署完成后建议做两件事:一是只监听内网地址(例如 -p 127.0.0.1:8080:80),二是给这台机器打上「教学靶场、禁止外网访问」的安全组规则。

