目标
搭建两套 DVWA 靶场:
- 本机: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 认证插件不兼容
PHP 7.3 连 MySQL 8,默认的 caching_sha2_password 认证插件不被支持。
报错: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 密钥
安装页会显示 reCAPTCHA key: Missing 红字警告:不影响核心功能,只是 Insecure CAPTCHA 模块无验证码。不测就忽略;要测去 Google reCAPTCHA 官网申请测试 key 填进 config/config.inc.php。
踩坑 3:PHP allow_url_include 未开启
文件包含等模块依赖 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 的 socket。
解决:确认首行是 user www-data;,PHP-FPM 的 listen.owner / listen.group 同步为 www-data。
踩坑 5:DVWA 数据库初始化失败
点 Create/Reset Database 后刷新无反应,按清单排查:
config/config.inc.php里的库用户名密码- MySQL/MariaDB 用户是否有 CREATE 权限
- 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,适合完整演练。