☰
DVWA靶场搭建全攻略:从零部署Web安全实战环境
2026/10/24 2:30:17 网站建设 项目流程

1. 项目概述:为什么你需要亲手搭建DVWA?

如果你对网络安全、渗透测试或者Web应用漏洞感兴趣,但苦于没有合法、安全的靶场环境来练手,那么Damn Vulnerable Web Application(DVWA)就是你一直在找的那个“沙盒”。我从业这些年,见过太多新人一上来就想拿真实网站“练练手”,结果轻则账号被封,重则惹上法律麻烦。DVWA的存在,就是为了让你能在一个完全可控、合法的本地环境里,把那些教科书上的漏洞,亲手“玩”一遍。

DVWA是一个用PHP和MariaDB/MySQL编写的、故意设计得漏洞百出的Web应用。它的核心价值不是教你开发一个网站,而是让你站在攻击者的角度,去理解SQL注入、跨站脚本(XSS)、文件上传漏洞、命令执行等十多种常见Web漏洞的原理、利用方式和防御手段。它把安全理论变成了可交互、可实操的实验室。无论是想入门安全测试的学生,想提升实战能力的开发者,还是需要教学案例的讲师,DVWA都是一个绝佳的起点。

官方仓库在GitHub上,项目非常活跃,社区支持也够。但第一次搭建时,你可能会被Apache、PHP、MySQL的版本兼容性,或者数据库连接问题卡住半天。别担心,这篇教程会带你走通从零下载到完整配置的全过程,我会把每一步的原理、可能遇到的坑以及我踩过的雷都讲清楚。我们目标是:让你在本地成功运行起一个功能完整的DVWA靶场,并能顺利登录进去。

2. 环境准备:选择你的“战场”与必备武器

在动手下载DVWA代码之前,你得先决定把它“放”在哪里运行。这决定了你后续的安装路径和配置复杂度。主流有三种方式,各有优劣,我挨个给你分析。

2.1 运行环境选型:虚拟机、本地环境还是Docker?

方案一:虚拟机(最推荐给新手)这是最安全、最隔离的方案。你在VMware或VirtualBox里安装一个全新的Linux系统(比如Kali Linux或Ubuntu Server),然后在里面配置LAMP环境。好处是即使配置过程把系统搞乱了,也完全不影响你的宿主机。Kali Linux本身预装了大量安全工具,和DVWA是绝配。对于纯粹的学习和测试,这是首选。

方案二:本地集成环境(最快捷)如果你用的是Windows或macOS,不想折腾虚拟机,那么使用XAMPP、WAMP或MAMP这类集成软件包是最快的。它们把Apache、MySQL、PHP打包在一起,一键安装。你只需要把DVWA的代码放到指定目录(比如XAMPP的htdocs文件夹)就行。缺点是可能会和你电脑上已有的服务(如IIS、其他MySQL实例)产生端口冲突。

方案三:Docker(最优雅)如果你熟悉Docker,这是目前最推荐的方式。DVWA官方提供了docker-compose.yml文件,你只需要几条命令就能拉起一个包含Web服务和数据库的完整环境。它高度隔离,环境一致,且清理起来极其方便。本教程会重点覆盖这种方式,因为它能避开很多传统安装的坑。

注意:无论选择哪种方式,绝对不要将DVWA部署到任何公网可访问的服务器或虚拟主机上!它的名字就叫“该死的脆弱Web应用”,放上去分分钟就会被黑掉,成为攻击者的跳板。

2.2 核心组件版本要求与检查

DVWA对运行环境有明确要求,版本不匹配是安装失败的头号原因。

  1. Web服务器:Apache或Nginx。Apache更常用,与DVWA的.htaccess文件兼容性更好。
  2. PHP:必须使用PHP 7.3或更高版本。官方明确表示不再支持PHP 5.x,PHP 7.0-7.2也可能存在随机问题。建议直接安装你能找到的最新稳定版(如PHP 8.1+)。你需要确保以下PHP扩展已启用:
    • mysqli或pdo_mysql:用于连接MySQL/MariaDB数据库。
    • gd:用于处理图形,部分功能需要。
    • allow_url_include和allow_url_fopen:这两个配置项(在php.ini里)需要设为On,才能进行“远程文件包含(RFI)”漏洞的练习。
  3. 数据库:强烈推荐MariaDB。它是MySQL的一个分支,与DVWA的兼容性最好,开箱即用。如果你非要用MySQL,特别是MySQL 8.0+,可能会遇到“caching_sha2_password”认证插件导致的连接问题,需要额外配置,徒增烦恼。
  4. Git:用于从GitHub克隆代码,这不是必须的,你也可以直接下载ZIP包。

实操检查(以Linux命令行为例): 在你选定的环境里,打开终端,运行以下命令来确认组件版本:

# 检查PHP版本及扩展 php -v php -m | grep -E “mysqli|gd” # 检查MariaDB/MySQL版本 mysql --version # 或 mariadb --version # 检查Apache是否运行 systemctl status apache2 # 或 apache2 -v

如果任何一项缺失或版本过低,你需要先进行安装或升级。对于Docker用户,这些都会在镜像中自动解决。

3. 详细安装步骤:三种主流方式手把手教学

下面我将分别详解三种安装方式的完整流程。请根据你之前的选择,跳转到对应部分。

3.1 方式一:使用Docker一键部署(推荐)

这是目前最省心、环境最统一的方法。前提是你的系统已经安装了Docker和Docker Compose。

步骤1:获取DVWA代码打开终端,切换到你希望存放项目的目录(例如~/Projects),然后克隆仓库:

git clone https://github.com/digininja/DVWA.git cd DVWA

如果你没有Git,也可以直接从GitHub仓库页面下载ZIP压缩包并解压。

步骤2:启动DVWA容器在DVWA目录下,运行一条命令即可:

docker compose up -d

这条命令会做几件事:从GitHub容器仓库拉取预构建的DVWA和MariaDB镜像;创建独立的容器网络;启动两个容器(一个Web,一个数据库);并完成数据库初始化。-d参数表示在后台运行。

步骤3:访问与验证启动完成后,DVWA默认会在你本机的4280端口提供服务。打开浏览器,访问:

http://localhost:4280

如果看到DVWA的登录页面,恭喜你,核心服务已经跑起来了。默认账号是admin,密码是password。但先别急着登录,我们还需要进行关键的安全等级配置。

步骤4:修改默认配置(可选但重要)DVWA的Docker镜像使用环境变量来配置。编辑项目根目录下的compose.yml文件:

services: dvwa: ... environment: - DB_SERVER=db - DB_PASSWORD=p@ssw0rd - DEFAULT_SECURITY_LEVEL=low # 将默认安全等级设为“低”,方便练习 - DISABLE_AUTHENTICATION=false # 保持为false,我们需要登录 ...

修改后,需要重启服务使配置生效:

docker compose down docker compose up -d

Docker方式的心得与避坑:

  • 端口冲突:如果4280端口已被占用,你可以在compose.yml中修改端口映射,例如将- “127.0.0.1:4280:80”改为- “127.0.0.1:8080:80”,然后通过http://localhost:8080访问。
  • 查看日志:如果页面无法访问,运行docker compose logs dvwa查看Web容器的日志,能快速定位问题。
  • 数据持久化:数据库数据默认保存在一个Docker卷(volume)里。即使你运行docker compose down,数据也不会丢失。只有执行docker compose down -v(带上-v参数)才会删除卷,从而清空所有数据(包括你创建的用户、攻击记录等)。

3.2 方式二:在Linux(如Kali/Ubuntu)上手动安装

如果你使用的是Kali Linux或Ubuntu等Debian系发行版,可以按以下步骤手动安装。

步骤1:安装LAMP环境更新软件包列表并安装必要组件:

sudo apt update sudo apt install -y apache2 mariadb-server mariadb-client php php-mysqli php-gd libapache2-mod-php

这里一次性安装了Apache、MariaDB、PHP及必要的扩展。-y参数表示自动确认安装。

步骤2:配置PHP编辑PHP配置文件,开启错误显示和远程文件包含功能,这对调试和某些漏洞练习至关重要。

sudo nano /etc/php/*/apache2/php.ini # 注意:* 代表你的PHP主版本号,如7.4、8.1等,可以用 ls /etc/php/ 查看。

找到并修改以下行:

allow_url_fopen = On allow_url_include = On display_errors = On display_startup_errors = On

保存退出后,重启Apache服务:

sudo systemctl restart apache2

步骤3:放置DVWA代码将下载或克隆的DVWA文件夹移动到Apache的网页根目录:

sudo cp -r /path/to/your/DVWA /var/www/html/ # 确保目录权限正确 sudo chown -R www-data:www-data /var/www/html/DVWA

步骤4:配置数据库登录MariaDB,为DVWA创建专用的数据库和用户:

sudo mysql -u root

在MariaDB提示符下执行:

CREATE DATABASE dvwa; CREATE USER ‘dvwa’@’localhost’ IDENTIFIED BY ‘p@ssw0rd’; GRANT ALL PRIVILEGES ON dvwa.* TO ‘dvwa’@’localhost’; FLUSH PRIVILEGES; EXIT;

这里创建了一个数据库dvwa,用户dvwa,密码p@ssw0rd。强烈建议不要使用root用户,专库专户更安全。

步骤5:配置DVWA复制DVWA的配置文件模板并编辑:

cd /var/www/html/DVWA/config sudo cp config.inc.php.dist config.inc.php sudo nano config.inc.php

找到数据库配置部分,确保与上一步设置一致:

$_DVWA[ ‘db_server’ ] = ‘127.0.0.1’; $_DVWA[ ‘db_database’ ] = ‘dvwa’; $_DVWA[ ‘db_user’ ] = ‘dvwa’; $_DVWA[ ‘db_password’ ] = ‘p@ssw0rd’;

同时,你可以在这里设置默认安全等级:$_DVWA[ ‘default_security_level’ ] = ‘low’;

步骤6:完成安装现在,在浏览器中访问http://your-server-ip/DVWA/setup.php。点击页面底部的“Create / Reset Database”按钮。如果一切顺利,页面会提示数据库创建成功,并显示“Setup successful”。之后,你就可以访问http://your-server-ip/DVWA/login.php用默认凭证登录了。

3.3 方式三:在Windows上使用XAMPP安装

对于Windows用户,XAMPP是最简单的选择。

步骤1:下载并安装XAMPP从Apache Friends官网下载XAMPP安装包,运行安装程序。建议安装路径不要有中文和空格,例如C:\xampp。安装过程中,注意将Apache和MySQL服务勾选上。

步骤2:启动服务并测试安装完成后,打开XAMPP控制面板,点击Apache和MySQL模块旁边的“Start”按钮。如果启动成功,它们的背景会变成绿色。打开浏览器,访问http://localhost,你应该能看到XAMPP的欢迎页面。

步骤3:放置DVWA代码将DVWA文件夹解压或复制到XAMPP的htdocs目录下,通常是C:\xampp\htdocs\。最终路径应该是C:\xampp\htdocs\DVWA。

步骤4:配置PHP打开C:\xampp\php\php.ini文件,用记事本或VS Code等编辑器打开。同样,找到并修改:

allow_url_fopen = On allow_url_include = On display_errors = On display_startup_errors = On

保存后,必须在XAMPP控制面板重启Apache服务,修改才会生效。

步骤5:配置数据库与DVWA

  1. 点击XAMPP控制面板中MySQL一行的“Admin”按钮,这会打开phpMyAdmin。
  2. 在phpMyAdmin中,点击顶部“用户账户”选项卡,然后点击“新增用户账户”。
  3. 设置用户名:dvwa,主机名:本地,密码:p@ssw0rd。在“全局权限”里,点击“全选”然后执行。
  4. 回到DVWA的config目录(C:\xampp\htdocs\DVWA\config),将config.inc.php.dist复制一份并重命名为config.inc.php。
  5. 用编辑器打开config.inc.php,确保数据库配置为:
    $_DVWA[ ‘db_server’ ] = ‘127.0.0.1’; $_DVWA[ ‘db_database’ ] = ‘dvwa’; $_DVWA[ ‘db_user’ ] = ‘dvwa’; $_DVWA[ ‘db_password’ ] = ‘p@ssw0rd’;

步骤6:完成安装访问http://localhost/DVWA/setup.php,点击“Create / Reset Database”。成功后,即可通过http://localhost/DVWA/login.php登录。

4. 核心配置详解与初始化设置

成功安装并访问到登录页面只是第一步。要让DVWA真正“可用”且“好用”,以下几个配置点你必须搞清楚。

4.1 安全等级(Security Level)设置

这是DVWA最核心的设计之一。同一个漏洞模块(如SQL注入),提供了从“Low”到“Impossible”四个难度等级,模拟了不同级别的安全防护措施。

  • Low:毫无防护。代码中存在最原始、最明显的漏洞,用于理解漏洞最基础的原理和利用方式。
  • Medium:引入了基础的、但存在缺陷的防护措施(如简单的字符串替换、初级过滤)。你需要绕过这些不完善的防御。
  • High:实现了相对较强的防护(如预处理语句、严格的输入校验)。绕过难度大增,需要更精巧的利用技术。
  • Impossible:理论上“无法”被利用的级别。它展示了当前公认的最佳安全实践,代码层面几乎消除了漏洞存在的可能性。

如何设置:登录后,点击左侧导航栏的“DVWA Security”。在这里你可以为整个应用设置一个默认的安全等级。强烈建议初学者从“Low”开始,逐个漏洞、逐级挑战。你也可以在每个漏洞练习页面的右下角临时切换该页面的安全等级。

4.2 配置文件(config.inc.php)关键参数解析

除了数据库连接信息,配置文件中还有一些影响使用的选项:

  • $_DVWA[ ‘recaptcha_public_key’ ]和$_DVWA[ ‘recaptcha_private_key’ ]:这是为“Insecure CAPTCHA”漏洞模块准备的。如果你想练习这个模块,需要去Google reCAPTCHA官网申请一对密钥(选择reCAPTCHA v2 “I‘m not a robot” Checkbox类型),然后填在这里。否则该模块无法正常工作。
  • $_DVWA[ ‘disable_authentication’ ]:如果设为true,则会禁用整个应用的登录验证。这主要用于某些自动化扫描工具,它们可能无法处理登录会话。普通练习请务必保持为false。
  • $_DVWA[ ‘default_security_level’ ]:设置用户首次访问时的默认安全等级。

4.3 首次登录与数据库初始化

使用默认账号admin/password登录后,第一件事应该是修改密码。点击页面下方的“Setup / Reset DB”链接,或者直接访问setup.php页面。点击绿色的“Create / Reset Database”按钮。这个操作会:

  1. 在之前配置的dvwa数据库中,创建所有必要的表(如users,guestbook等)。
  2. 插入初始数据,包括默认的admin用户和一些用于测试的样本数据。
  3. 如果按钮是灰色的,并提示“Database already exists”,你可以点击旁边的“Re-create database”来清空并重建。

看到“Database has been created”的绿色提示,才算大功告成。此时刷新页面,你就可以开始漏洞练习了。

5. 常见问题排查与解决方案实录

即便按照教程一步步来,你也可能会遇到一些拦路虎。下面是我在帮助别人搭建时,遇到最高频的几个问题及其解决方法。

5.1 数据库连接失败:Access denied 与 Connection refused

这是排名第一的安装杀手。

症状1:访问setup.php时提示 “Access denied for user ‘dvwa’@‘localhost’”。

  • 原因:配置文件config.inc.php中的数据库用户名、密码或数据库名,与你在MariaDB/MySQL中实际创建的不一致。
  • 排查:
    1. 仔细核对配置文件里的db_user,db_password,db_database三个值。
    2. 通过命令行验证:mysql -u dvwa -pp@ssw0rd -D dvwa。注意-p和密码之间没有空格。如果登录失败,说明数据库用户凭证错误。
    3. 如果命令行登录成功但网页仍报错,检查配置文件是否被正确读取。确保你修改的是config.inc.php而不是.dist模板文件。

症状2:提示 “Connection refused” 或 “No such file or directory”。

  • 原因:数据库服务根本没有运行,或者配置文件中的db_server地址错了(比如写成了localhost但在某些环境下需要用127.0.0.1)。
  • 排查:
    1. 检查服务状态:在Linux上sudo systemctl status mariadb,在Windows上查看XAMPP控制面板MySQL是否亮绿灯。
    2. 确保服务已启动。
    3. 将配置文件中的db_server从localhost尝试改为127.0.0.1,因为有时PHP的MySQL驱动处理localhost(会尝试用Unix socket连接)和127.0.0.1(用TCP/IP连接)的方式不同。

5.2 PHP配置错误:空白页面与功能异常

症状:打开DVWA页面一片空白,或者某些漏洞模块(如File Upload)无法正常工作。

  • 原因:PHP错误信息被禁止显示,或者必要的PHP设置未开启。
  • 排查:
    1. 开启错误显示:这是调试的第一步。务必确认php.ini中的display_errors和display_startup_errors都设为On。
    2. 检查关键配置:确认allow_url_fopen和allow_url_include为On,否则“File Inclusion”漏洞模块无法练习。
    3. 重启Web服务:修改php.ini后,必须重启Apache或php-fpm服务。
    4. 查看错误日志:如果页面还是空白,去查看Web服务器的错误日志。在Linux上通常是/var/log/apache2/error.log,在XAMPP中位于C:\xampp\apache\logs\error.log。日志里的信息会明确告诉你问题所在。

5.3 文件权限与路径问题

症状:访问http://localhost显示404,或者显示Apache默认页而非DVWA。

  • 原因:DVWA文件没有放在正确的Web根目录下,或者目录名大小写错误。
  • 排查:
    1. 确认路径:在XAMPP中,DVWA必须放在htdocs目录下。访问地址应为http://localhost/DVWA。如果你把DVWA文件夹重命名了,URL也要相应改变。
    2. 注意大小写:Linux系统是大小写敏感的。如果你克隆的文件夹叫DVWA,但访问http://localhost/dvwa(小写),就会404。确保URL中的路径与文件夹名称完全一致。
    3. 检查权限(Linux):Web服务器进程(通常是www-data用户)需要对DVWA目录有读取权限,对hackable/uploads/目录还需要写入权限。可以运行:sudo chmod -R 755 /var/www/html/DVWA和sudo chmod 777 /var/www/html/DVWA/hackable/uploads/。

5.4 MySQL 8.0+ 特有的认证插件问题

症状:在较新的MySQL 8.0+上,即使密码正确,也报错 “The server requested authentication method unknown to the client”。

  • 原因:MySQL 8.0默认使用了caching_sha2_password认证插件,而旧版的PHP mysqli驱动可能不支持。
  • 解决方案(二选一):
    1. (推荐)换用MariaDB:卸载MySQL,安装MariaDB,一劳永逸。
    2. 修改MySQL用户插件:
      -- 以root登录MySQL后 ALTER USER ‘dvwa’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘p@ssw0rd’; FLUSH PRIVILEGES;
      同时,确保MySQL配置文件(如my.cnf或mysqld.cnf)的[mysqld]段下有default-authentication-plugin=mysql_native_password。

5.5 Docker特定问题:端口占用与数据持久化

症状1:运行docker compose up -d失败,提示端口被占用。

  • 解决:修改compose.yml文件中的端口映射。例如,将- “127.0.0.1:4280:80”改为- “127.0.0.1:8080:80”,然后访问http://localhost:8080。

症状2:关闭容器后,之前创建的数据库、用户数据全丢了。

  • 原因:默认配置中,MariaDB的数据保存在一个匿名卷中,docker compose down会删除容器,但通常不会删除匿名卷。但如果用了-v参数,或者你手动清理了所有卷,数据就会丢失。
  • 解决:为了明确的数据持久化,建议在compose.yml中为数据库服务使用命名卷:
    services: db: image: mariadb:10.11 volumes: - dvwa_db_data:/var/lib/mysql # 使用命名卷 ... volumes: dvwa_db_data: # 声明卷
    这样,数据会永久保存在名为dvwa_db_data的Docker卷中,不受容器生命周期影响。

6. 进阶配置与学习路径建议

成功安装并登录DVWA后,你的学习才真正开始。这里有一些进阶配置和学习建议,能帮你更好地利用这个工具。

6.1 配置reCAPTCHA密钥

如果你想练习“Insecure CAPTCHA”模块,需要配置Google reCAPTCHA。

  1. 访问 https://www.google.com/recaptcha/admin/create。
  2. 选择“reCAPTCHA v2” -> ““I‘m not a robot” Checkbox”。
  3. 在“域名”处填写localhost(或你的测试域名)。
  4. 提交后,你会得到一对“站点密钥”和“密钥”。
  5. 将这两个密钥分别填入DVWA配置文件config.inc.php的$_DVWA[ ‘recaptcha_public_key’ ]和$_DVWA[ ‘recaptcha_private_key’ ]中。
  6. 重启Web服务或Docker容器。

6.2 结合渗透测试工具使用

DVWA不仅是手动练习的平台,也是测试自动化工具的理想靶场。

  • Burp Suite:配置浏览器代理到Burp,可以拦截、重放、修改所有发往DVWA的请求,是学习漏洞利用和手工测试的利器。
  • SQLMap:针对“SQL Injection”模块,你可以用SQLMap尝试自动化注入,对比手动注入的结果,理解工具的原理和局限。
  • OWASP ZAP:对DVWA进行主动扫描,看看自动化工具能发现哪些漏洞,报告如何呈现。重要:在使用这些工具时,请确保它们的目标仅为你本地运行的DVWA实例。

6.3 系统化的学习路径建议

不要一上来就乱点。我建议按照以下顺序,由浅入深地进行练习:

  1. 信息收集:从“Brute Force”(暴力破解)和“Command Injection”(命令注入)开始,理解如何通过输入框与后端交互。
  2. 注入类漏洞:重点攻克“SQL Injection”(SQL注入)和“SQL Injection (Blind)”(盲注)。这是Web安全的核心,理解不同难度级别的过滤和绕过方式。
  3. 客户端漏洞:学习“Cross Site Scripting (XSS)”(跨站脚本)的反射型、存储型和DOM型。理解脚本如何被注入并在浏览器端执行。
  4. 文件相关漏洞:练习“File Upload”(文件上传)和“File Inclusion”(文件包含),理解服务器如何处理用户上传的文件和包含外部文件。
  5. 其他漏洞:尝试“CSRF”(跨站请求伪造)、“Insecure CAPTCHA”(不安全的验证码)等,理解逻辑层面的安全问题。
  6. 对比与防御:每个漏洞在“Impossible”级别都展示了最佳修复方案。在利用完漏洞后,务必去阅读“View Source”和“View Help”,对比不同级别的代码差异,理解防御机制是如何工作的。

6.4 安全须知与道德边界

最后,也是最重要的提醒:DVWA是一个教学工具,仅限在你自己控制的、隔离的本地或内网环境中使用。

  • 绝对禁止将其部署到公网云服务器、虚拟主机或任何能被互联网访问到的环境。
  • 永远不要用它来测试未经授权的任何网站或系统。
  • 在你自己的虚拟机或Docker环境里,你可以尽情“破坏”它,但也要意识到,这些攻击手法如果用在真实系统上,是违法行为。

搭建过程中遇到的绝大多数问题,都可以通过认真检查错误日志、核对配置文件和搜索错误信息来解决。这个从零开始搭建、排错、最终成功运行的过程,本身就是一个极佳的学习体验,它能让你对Web应用的基本运行环境有更深刻的理解。现在,你的靶场已经就绪,是时候开始你的“黑客”学习之旅了。记住,我们的目标是学会防御,而理解攻击是最好的开始。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询