XYCOVO CONSOLE KURISU · WEB 渗透 / AI 辅助攻防 ONLINE
#012 · 2025-05-15✓ PASS

本地与虚拟机 DVWA 双靶场部署踩坑记录

在 Windows 本地和 Ubuntu 虚拟机分别搭建 DVWA 渗透测试靶场,记录 PHP 版本兼容、MySQL 认证、Nginx 配置等 5 个踩坑点。
dvwaphpmysqlnginxAUTHOR: KURISU

目标

搭建两个 DVWA(Damn Vulnerable Web Application)靶场环境,用于渗透测试技能训练:

  1. 本机:Windows + PHP 7.3 + MySQL 8 → http://127.0.0.1:8081
  2. 虚拟机: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 按钮后页面刷新但没有任何反应。

检查清单

  1. config/config.inc.php 中的数据库用户名密码是否正确
  2. MySQL/MariaDB 用户是否有 CREATE 权限
  3. 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;

最终架构

组件本机虚拟机
OSWindows 11Ubuntu 16.04
Web ServerPHP 7.3 内置Nginx
Database连接 VM MariaDBMariaDB 10.x
DVWA URLhttp://127.0.0.1:8081http://192.168.88.130/dvwa/
账号admin / passwordadmin / password
用途快速测试完整模拟环境

两个靶场各有用途:本机版方便快速验证 payload,虚拟机版模拟真实 LNMP 环境,适合做完整的渗透演练。

← #011 VRRP 虚拟路由冗余…#013 小皮面板(phpStudy)搭建… →