本地与虚拟机 DVWA 双靶场部署踩坑记录
目标
搭建两个 DVWA(Damn Vulnerable Web Application)靶场环境,用于渗透测试技能训练:
- 本机:Windows + PHP 7.3 + MySQL 8 →
http://127.0.0.1:8081 - 虚拟机:Ubuntu 16.04 + LNMP + MariaDB →
http://192.168.88.130/dvwa/
踩坑 1:MySQL 8 认证插件不兼容
在 Windows 本机用 PHP 7.3 连接 MySQL 8 时,默认的 caching_sha2_password 认证插件不被 PHP 7.3 支持。
报错:The server requested authentication method unknown to the client
解决:
ALTER USER 'dvwa'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;
但后来发现 PHP 7.3 + MySQL 8 还有其他兼容性问题(PDO 驱动),最终决定放弃本机 MySQL,改用虚拟机 MariaDB 作为数据库后端。
踩坑 2:DVWA reCAPTCHA 密钥
DVWA 安装页面上方会显示 reCAPTCHA key: Missing 的红字警告。
这个不影响核心功能使用,只是 Insecure CAPTCHA 模块无法正常展示验证码。如果不需要测试这个模块,直接忽略即可。如果需要,去 Google reCAPTCHA 官网申请一组测试 key 填入 config/config.inc.php。
踩坑 3:PHP allow_url_include 未开启
DVWA 某些漏洞模块(如文件包含)依赖 allow_url_include = On。
在 php.ini 中设置:
allow_url_fopen = On
allow_url_include = On
重启 PHP-FPM 或 Web 服务器后生效。
踩坑 4:虚拟机 Nginx 502 Bad Gateway
Ubuntu 16.04 虚拟机用 LNMP 一键包部署,访问 PHP 页面返回 502。
排查过程:
# 查看 Nginx 错误日志
tail -f /var/log/nginx/error.log
# 输出:connect() to unix:/tmp/php-fpm.sock failed (13: Permission denied)
根因:nginx.conf 第一行是 user www-data;,但 LNMP 安装脚本在某些情况下会覆盖为 user nginx; 或直接注释掉,导致 Nginx worker 进程以 nobody 用户运行,没有权限连接 PHP-FPM 的 Unix socket。
解决:确认 nginx.conf 首行为 user www-data;,且 PHP-FPM 的 listen.owner / listen.group 也是 www-data。
踩坑 5:DVWA 数据库初始化失败
点击 Create/Reset Database 按钮后页面刷新但没有任何反应。
检查清单:
config/config.inc.php中的数据库用户名密码是否正确- MySQL/MariaDB 用户是否有 CREATE 权限
- PHP PDO MySQL 扩展是否已安装(
php -m | grep pdo_mysql)
# 必要时手动创建数据库和用户
mysql -u root -p
CREATE DATABASE dvwa;
CREATE USER 'dvwa'@'localhost' IDENTIFIED BY 'p@ssw0rd';
GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'localhost';
FLUSH PRIVILEGES;
最终架构
| 组件 | 本机 | 虚拟机 |
|---|---|---|
| OS | Windows 11 | Ubuntu 16.04 |
| Web Server | PHP 7.3 内置 | Nginx |
| Database | 连接 VM MariaDB | MariaDB 10.x |
| DVWA URL | http://127.0.0.1:8081 | http://192.168.88.130/dvwa/ |
| 账号 | admin / password | admin / password |
| 用途 | 快速测试 | 完整模拟环境 |
两个靶场各有用途:本机版方便快速验证 payload,虚拟机版模拟真实 LNMP 环境,适合做完整的渗透演练。