news 2026/8/26 7:54:02

DVWA靶场搭建全指南:手动部署与Docker快速上手的Web漏洞练习环境

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DVWA靶场搭建全指南:手动部署与Docker快速上手的Web漏洞练习环境

很多初学者刚接触网络安全时,都卡在同一个地方:看过大量漏洞原理,知道 XSS 是什么、SQL 注入怎么写,但一到实操就找不到一个合法、安全、可反复折腾的“试验场”。去公网测试别人的网站是违法的,在本机随便写个漏洞代码又不够真实,半天调不出效果。这个阶段需要的,正是一个能装在自己电脑里、可以随意“破坏”、坏了大不了重装的 Web 漏洞靶场。

DVWA 就是这类工具中最经典的一个。它全称 Damn Vulnerable Web Application,翻译过来是“该死的易受攻击 Web 应用”。名字很直白,目的就是故意把常见 Web 漏洞暴露给你,让你在受控环境里练习发现、利用和防御漏洞。这篇文章不会只丢给你一段下载链接就结束,而是从环境选型、手动部署、Docker 快速搭建,到数据库初始化和常见报错排查,把整套流程拆开讲清楚。读完你不仅能跑起来 DVWA,还能理解每一步背后的原因。

先说结论:在 2026 年的技术语境下,学习 Web 安全仍然建议从 DVWA 起步,但环境搭建方式要升级。手动部署仍然值得做一遍,因为它能帮你理解 Web 应用的目录结构、配置文件和 PHP 运行环境;日常练习则推荐用 Docker,省时省力,还能随时销毁重建。接下来,我们按照“先理解、再准备、后实操、最后排错”的顺序,把 DVWA 安装这件事做到保姆级详细。

1. DVWA 是什么,为什么要用它练手

1.1 网络靶场的价值

网络安全学习有个天然矛盾:真实业务系统不允许你随便尝试漏洞,因为你不知道哪一步会触发不可逆破坏;但如果只用抽象代码片段学习,又完全体会不到漏洞在完整应用中的利用路径。网络靶场(Cyber Range)就是为解决这个矛盾而生的。它的本质是一个故意包含漏洞的模拟目标,让学习者在合法、隔离、可恢复的环境中进行渗透测试、漏洞验证和防御加固。

DVWA 不是唯一的靶场,Pikachu、WebGoat、upload-labs、vulnhub 系列都各有特色。但 DVWA 有自己独特的位置:它足够小,几分钟就能跑起来;又足够全面,几乎覆盖了 OWASP Top 10 里的主要 Web 漏洞,适合作为 Web 安全入门第一站。

1.2 DVWA 的核心特点

DVWA 基于 PHP + MySQL 构建,界面是老式 Web 应用的风格,但这恰恰是它的优势。你看到的不是前后端分离的现代工程,而是最直接的服务端渲染页面,每个漏洞点都很容易对应到代码逻辑,对理解原理极其友好。

它的核心特点有三个:

第一是安全级别可调。DVWA 内置 Low、Medium、High、Impossible 四个安全级别。同一个漏洞点,在 Low 级别下几乎是“裸奔”的,方便你看清漏洞成因;切换到 High 或 Impossible 后,又能看到代码层面怎样通过过滤、参数化查询等方式进行防御。这种“对比式”学习是 DVWA 最值钱的地方。

第二是模块丰富。它包含暴力破解、命令注入、CSRF、文件包含、文件上传、SQL 注入、XSS(反射型、存储型、DOM 型)、不安全的验证码、弱会话 ID 等常见漏洞模块。每个模块都有源代码查看功能,你可以一边攻击一边读代码,理解“为什么这里能打进去”。

第三是社区活跃,资料多。无论你卡在哪个模块,都能搜到大量通关教程。问题是通关教程很多,安装教程却经常写得很简略,尤其是环境变化后旧教程失效,这是本文想补齐的部分。

1.3 哪些人最应该装 DVWA

如果你属于以下情况之一,建议尽快装一个:

  • 正在学网络安全课程,需要把理论转化为实操;
  • 准备参加 CTF 比赛或网络安全竞赛,需要一个基础训练环境;
  • 从事 Web 开发,想理解攻击者视角,写出更安全的代码;
  • 准备转行安全测试,面试前需要快速熟悉常见漏洞利用方法。

安装 DVWA 的门槛不高,不需要高配电脑。一台普通的 Windows 或 Linux 电脑,能跑浏览器、能装 PHP 环境就可以了。关键是你愿意花一晚上把环境调通,之后就进入“随便折腾”模式了。

2. 安装前的准备:环境选型和版本理解

2.1 操作系统与运行环境

DVWA 是 PHP 项目,依赖 MySQL/MariaDB 数据库。你的操作系统可以是 Windows、Linux 或者 macOS。最常见的练习环境有两种:

  • 直接在物理机或虚拟机里部署 Windows + PHP 集成环境;
  • 在 Kali Linux 或 Ubuntu 里用 Docker 部署。

这里要提醒一个容易踩的坑:DVWA 旧版本基于 PHP 5.x 开发,新版本已经兼容 PHP 7.x 和 PHP 8.x。如果你用的是古老版本的 DVWA,配太新的 PHP 可能报兼容性错误;反过来,太老的 PHP 也可能无法运行新版 DVWA。因此,不建议去网上随意下载来源不明的“一键安装版”,优先从官方 GitHub 仓库获取源码,并选择与你 PHP 环境匹配的版本。

2.2 是否一定需要集成环境

新手在 Windows 上最常用的方案是 phpStudy 或 XAMPP。这两个工具都集成了 Apache/Nginx、PHP 和 MySQL,省去了单独配置各个组件的麻烦。对只想快速跑通 DVWA 的人来说,xampp 或 phpStudy 选一个即可,不需要同时装两个。

如果你对 Docker 比较熟悉,可以直接跳过集成环境。Docker 的隔离特性尤其适合安全靶场:容器里随便怎么折腾,随时可以一键重建,不影响宿主机。

2.3 版本选择策略

安全练习讲究“可复现”,所以建议固定一个已知稳定的组合。比如:

  • 使用官方最新 master 分支的 DVWA;
  • 配合 PHP 7.4 / 8.x 的集成环境;
  • MySQL 使用 5.7 或 8.x,MariaDB 也可。

不要追求“最新版就一定最好”。DVWA 这种教学靶场,重点是模块完整、能跑通,而不是版本越新越好。如果你的集成环境已经内置了 PHP 和 MySQL,优先用它自带版本,减少额外配置。

2.4 网络环境与下载方式

DVWA 源码可以从 GitHub 官方仓库获取,一般通过git clone或下载 ZIP 包。如果在某些网络环境下访问 GitHub 较慢,可以使用镜像加速或代理工具,但这里不展开讨论,请你根据自身网络条件选择合法合适的下载途径。

后面会分别给出手动部署和 Docker 部署的完整命令。你不需要全做,选择一条路径滑到底即可。

3. 方式一:Windows 环境手动部署 DVWA

手动部署的价值在于“把每一块组件都装明白”。当你遇到问题时,能更快定位是 Web 服务器、PHP、MySQL 还是 DVWA 配置的问题。

3.1 下载 DVWA 源码

先获取源码。打开 DVWA 的 GitHub 仓库页面,下载 ZIP 包,或者用 Git 命令拉取:

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

下载完成后,你会得到一个DVWA文件夹。里面的目录结构大致如下:

DVWA/ ├── config/ │ └── config.inc.php.dist ├── dvwa/ ├── external/ ├── hackable/ ├── phpinfo.php ├── README.md └── index.php

config目录下有一个config.inc.php.dist文件,这是配置文件模板。后面我们需要复制一份,改成config.inc.php,并填写数据库连接信息。

3.2 将 DVWA 放到 Web 目录

如果你使用 phpStudy,Web 根目录一般是phpstudy_pro\WWW;如果使用 XAMPP,一般是xampp\htdocs。把解压后的 DVWA 文件夹整体拷贝到这个目录下。

例如 XAMPP 环境下:

C:\xampp\htdocs\DVWA

注意文件夹名称。虽然大小写不敏感,但为了保险,建议保持为DVWA,这样访问地址就是http://127.0.0.1/DVWA/,不容易出错。

3.3 修改配置文件

进入DVWA\config目录,找到config.inc.php.dist,复制一份并重命名为config.inc.php

用文本编辑器打开config.inc.php,找到数据库配置部分:

# 文件路径:DVWA/config/config.inc.php $_DVWA = array(); $_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'root'; $_DVWA[ 'db_password' ] = 'p@ssw0rd'; $_DVWA[ 'db_port' ] = '3306';

这里需要改成你的 MySQL 实际账号密码。默认数据库用户root一般没问题,密码则要填你自己设置好的。

如果你的 MySQL 设置了非默认端口,还要同步修改db_port。修改后保存文件。

这个步骤很关键。很多人第一次安装 DVWA,卡在“Database Error: Connection refused”或者“Access denied for user”,十有八九是这里填错了,或者 MySQL 服务没启动。

3.4 启动 Web 服务和数据库

在 phpStudy 或 XAMPP 控制面板中,分别启动 Apache 和 MySQL。确认端口没有被占用,一般 Apache 是 80 端口,MySQL 是 3306 端口。

如果 Apache 启动失败,最常见原因是 80 端口被其他程序占用,例如 IIS、Nginx 或其他本地服务。解决方法是修改 Apache 的监听端口,或者关闭冲突服务。在 XAMPP 里可以打开配置文件,把Listen 80改成Listen 8080等,之后访问地址也要跟着变。

3.5 浏览器初始化安装

打开浏览器,访问:

http://127.0.0.1/DVWA/

第一次访问会看到 DVWA 的欢迎页。点击页面下方的 “Create / Reset Database” 按钮,DVWA 会自动创建数据库并写入初始化数据。成功后页面会提示 Setup successful,并自动跳转到登录页。

默认用户名是admin,默认密码是password。登录后,你需要手动把安全级别调到你想要的档位。建议先保持 Low,等熟悉漏洞原理后再往 High 和 Impossible 调整。

到这里,手动部署方式就已经跑通了。

4. 方式二:Docker 快速部署 DVWA

如果你不想在物理机里装一堆运行环境,或者想随时切换版本、快速重置环境,Docker 是更好的选择。

4.1 安装 Docker

Docker 的安装在 Windows、macOS、Linux 上有不同方式。Windows 一般使用 Docker Desktop,安装后要确保 Docker 引擎能正常运行。Linux 下安装 Docker Engine 后,可以用docker version验证安装。

安装 Docker 后,强烈建议顺手安装 Docker Compose,因为 DVWA 官方提供了compose.yml,一条命令就能把 Web 和 MySQL 服务一起拉起来。

4.2 通过 Docker 命令运行 DVWA

最简单的方式是直接拉取官方镜像并运行:

docker run -d -p 8080:80 --name dvwa vulnerables/web-dvwa

-p 8080:80表示把容器的 80 端口映射到本机的 8080 端口。这样访问地址是http://127.0.0.1:8080/,可以避免和本机已有的 Web 服务冲突。

启动后,容器里的 MySQL 可能正在初始化,第一次需要稍等片刻。你可以查看容器日志:

docker logs -f dvwa

看到类似Apache started或数据库初始化完成的日志后,再访问页面。

4.3 使用 Docker Compose 管理更规范

如果使用官方仓库中的compose.yml,进入 DVWA 源码目录后执行:

docker compose up -d

这种方式会同时启动 dvwa 和 db 两个服务,配置更清晰。停止服务用:

docker compose down

重置整个靶场环境时,可以加-v参数删除数据卷:

docker compose down -v

注意:down -v会把数据库数据一起删掉,相当于恢复出厂状态,这是练习后重置环境的常用操作。如果你希望保留通关状态,不要加-v

4.4 Docker 方式的注意事项

使用 Docker 时要注意,容器里跑的 MySQL 默认 root 密码和主机无关。一般官方镜像默认的数据库配置在说明文档里都有,你不需要额外修改。如果登录时报数据库连接错误,先检查容器是否健康运行:

docker ps

然后再看 dvwa 容器是否能正常访问数据库。最简单的验证方式是访问首页,如果数据库初始化失败,页面会直接显示红色报错信息。

Docker 方式的优势是干净、快速,适合反复练习;劣势是文件路径和底层系统被隐藏了,遇到复杂问题时,排查难度会大一些。建议两种方式都试一次:第一次手动安装理解架构,第二次 Docker 提升效率。

5. 验证安装是否成功

无论用哪种方式安装,跑通之后的验证步骤是一样的。

5.1 访问初始页面

手动部署时访问http://127.0.0.1/DVWA/,Docker 方式访问http://127.0.0.1:8080/。第一次访问会看到安装提示页面,没有红色错误就说明 PHP 和数据库基本正常。

如果页面出现 PHP 警告,比如时区相关的错误,通常不影响使用,但最好在php.ini里设置date.timezone,避免后面审计功能异常。

5.2 创建数据库并登录

点击 “Create / Reset Database” 后,页面会自动跳转到登录页。登录后进入 DVWA 主界面。

左侧菜单从上到下就是各个漏洞模块。你还可以在菜单中找到 “DVWA Security”,这里可以切换安全级别。初始状态可能是impossibledisabled,这取决于镜像版本。建议先切到low,方便观察最原始的漏洞利用过程。

5.3 用一个模块跑通测试

以 SQL Injection 模块为例,验证你确实能完成一次真实的漏洞利用。

进入 SQL Injection 页面,输入框提示输入 User ID。在 Low 级别下,输入:

1' OR '1'='1

点击 Submit,如果页面返回所有用户信息,说明 SQL 注入漏洞成功触发,DVWA 环境完全正常。这个操作会造成数据库查询条件被改写,本质上是把原来的条件式查询变成了恒真条件,从而返回全部数据。

整个操作一定要用本地靶场数据,这是合法的安全练习,不能拿去对真实网站测试。

6. 常见问题与排查方法

安装 DVWA 会遇到的问题并不复杂,但有固定的高频套路。下面按现象整理成表格,方便你快速定位。

问题现象可能原因排查方式解决方案
访问页面提示数据库连接失败MySQL 未启动或端口不对检查 MySQL 服务状态、db_port配置启动 MySQL,修改配置文件并保存
登录报 Access denied for userconfig.inc.php 中数据库账号密码错误查看 MySQL 实际账号密码使用正确账号密码,或重置 MySQL 密码
页面提示 404 Not FoundDVWA 文件没放到 Web 根目录下检查 URL 和文件路径访问http://127.0.0.1/DVWA/,确保目录名正确
Apache 无法启动,提示端口被占用80 端口被其他程序占用命令行执行netstat -ano查看占用关闭占用程序,或修改 Apache 端口
PHP 版本兼容性警告DVWA 版本与 PHP 版本不匹配查看页面警告提示更换 DVWA 版本或调整 PHP 版本
初始化数据库后登录自动退出session 配置问题查看浏览器控制台的 cookie清理浏览器 Cookie,重新登录
Docker 运行后无法访问容器未启动或端口映射错误执行docker ps查看容器状态docker logs查看日志,检查端口映射
页面大量 PHP 警告或空白PHP 扩展缺失或权限不足查看php.ini是否开启 mysqli 扩展开启所需扩展,检查文件目录写权限

这里的多数问题,本质都是“环境不一致”造成的。所以安装前最好先记录自己的 PHP 版本、MySQL 版本和 DVWA 版本,遇到问题发到社区时,别人也能更快帮你判断。

6.1 数据库初始化失败的深度排查

如果点击 “Create / Reset Database” 后一直停在错误页面,先看数据库是否已经创建成功。可以用 MySQL 客户端连接数据库,执行:

SHOW DATABASES;

如果能看到dvwa数据库,说明数据库创建成功,问题多半出在表结构或后续初始化 SQL 上。此时可以查看 Apache 的 error.log,通常位于集成环境的 logs 目录。

如果dvwa数据库不存在,说明 PHP 连接 MySQL 这一步就有问题。重点检查config.inc.php中的db_userdb_password是否与 MySQL 一致,以及 PHP 是否启用了 mysqli 扩展。

6.2 登录后页面样式丢失

这个问题在新手安装时也很常见。DVWA 依赖hackable目录下的资源文件和可写权限。在某些 Linux 环境或 Docker 挂载目录下,hackable/uploads目录可能没有写权限,导致文件上传或验证码功能异常。

解决方法是给相关目录加上合适的写权限。在 Linux 下,可以执行:

chmod -R 755 DVWA/hackable/uploads

但要注意,给目录 777 权限是高风险操作,只在本地靶场环境使用。生产环境中绝对不要这么做。

7. 最佳实践与工程建议

7.1 把 DVWA 当作“本地隔离环境”

DVWA 是一个故意存在高危漏洞的应用,它不能被当作普通软件暴露到公网。正确用法是:

  • 只在本地回调地址127.0.0.1或虚拟机 NAT 网络中访问;
  • 不要把它部署到云服务器或真实业务服务器上;
  • 练习结束后,及时停止 Web 服务和容器。

很多初学者图方便,在公网 VPS 上装 DVWA 做测试,这等于把一台充满漏洞的“靶机”主动暴露给攻击者,风险极高。安全学习的底线,是永远不在未授权环境执行漏洞测试。

7.2 使用虚拟机或容器做快照

安装完一套可用的 DVWA 后,建议立即做快照。无论是 VMware 虚拟机快照,还是 Docker 镜像导出,都会在你后续“玩坏”环境时帮你快速恢复。

对于 Docker 用户,一条命令导出镜像:

docker commit dvwa dvwa-backup

之后随时可以基于备份镜像启动一个新的干净环境。

7.3 先阅读源码,再动手攻击

DVWA 每个模块都提供了查看源码的按钮。建议养成一个习惯:先看源码,预测漏洞点,再实际攻击。比如 SQL Injection 模块的源码里直接拼接了用户输入,你一眼就能看出注入点在哪里;而 High 级别使用了输入转义或参数化查询,你再攻击时就会明显感觉到难度上升。

这种“源码对照 + 攻击验证”的方法,比单纯看通关教程更能训练漏洞思维。

7.4 结合数据库管理工具观察数据变化

DVWA 底层是 MySQL 数据库。练习 SQL 注入时,如果同时打开 Navicat 或 MySQL 命令行,观察数据库里的数据变化,理解会更深入。比如输入1' OR '1'='1后,你会发现返回的数据是完整的 user 表,而不是单条记录,这就是“逻辑漏洞导致数据越权”的直观体现。

7.5 不要止步于“通关”

很多人把 DVWA 当成通关游戏,Low、Medium、High 挨个打通就完事,但这样成长有限。真正有价值的是理解防御原理:为什么 Low 级能打进去?代码应该怎么改才能防御?改成参数化查询后还能不能注入?这些问题的答案,才是安全工程师的核心能力。

如果你想继续深入,可以在 DVWA 之后尝试 Pikachu、WebGoat、upload-labs 和 vulnhub 系列靶机。不同靶场侧重点不同:Pikachu 更贴近中文教学场景,upload-labs 专注于文件上传漏洞,vulnhub 则是完整虚拟机的渗透测试实战。

8. 总结与后续学习方向

DVWA 安装的核心,其实就是“准备 PHP 环境 + 拿到源码 + 配置数据库 + 初始化”。手动部署适合理解底层结构,Docker 部署适合高效练习。两者不冲突,建议都跑一遍。

当你第一次在本地靶场成功触发 SQL 注入或存储型 XSS 的时候,那种“原来漏洞是这样打进去”的感觉,是看书看不出来的。这种体验会让你对 Web 安全产生真正的兴趣,也会让你在以后写代码时多一分敬畏:每一条用户输入,都可能是攻击入口。

下一步,你可以从 DVWA 的 SQL Injection 和 XSS 两个模块开始,尝试逐级别通关。过程中配合源码阅读,记录每个漏洞的利用条件和防御方法。熟练之后,再去挑战更接近真实业务场景的 Pikachu 或 upload-labs。

最后再强调一次安全边界:DVWA 这类靶场存在的意义,是让你在合法、受控的环境中练习安全测试。请把它留在自己的电脑里,不要带入任何未授权的系统。技术学习要有热情,更要有底线。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/26 7:48:02

基于LLM的对话式AI绘画助手:从自然语言到专业参数的无缝转换实践

1. 项目缘起:一个“家庭作业”引发的技术实践最近家里发生了一件挺有意思的事儿。我媳妇儿,一个对技术完全无感、看到命令行就头疼的资深设计师,突然迷上了一款叫 Fable 5 的 AI 绘画工具。这东西在设计师圈子里挺火,能根据文字描…

作者头像 李华
网站建设 2026/8/26 7:47:11

LeetCode面试经典150题:高效算法刷题指南

1. 为什么选择LeetCode面试经典150题? 在技术面试准备过程中,算法题始终是绕不开的一道坎。LeetCode作为全球程序员公认的算法题库,其经典150题更是被无数求职者奉为面试准备的"黄金标准"。这套题目由LeetCode官方精选,…

作者头像 李华
网站建设 2026/8/26 7:44:50

图像拼接一体化模型:融合对齐、校正与融合的端到端架构

1. 这篇论文到底在解决什么问题?——不是“又一篇拼接算法”,而是对整条流水线的外科手术式重构 图像拼接这个词,现在几乎成了CV领域里最“熟悉又陌生”的存在。熟悉,是因为从手机全景模式到无人机航拍图,再到医学影像…

作者头像 李华
网站建设 2026/8/26 7:43:07

ClawMark评测体系:如何为AI Agent建立全面的“绩效考核”标准

1. 从“玩具”到“工具”:为什么我们需要给AI Agent打分?最近在AI圈子里,ClawMark这个词开始频繁出现,尤其是在讨论“上班型Agent”的时候。什么是“上班型Agent”?简单说,就是那些被期望能像员工一样&…

作者头像 李华
网站建设 2026/8/26 7:42:46

Google官方Skill框架:标准化技能如何重塑Agent开发与智能体生态

1. 项目概述:当“技能”成为标准件最近,Google 在其开发者生态中正式推出了官方的“Skill”框架,这消息在开发者圈子里激起的波澜,不亚于当年某个新编程语言的发布。简单来说,这就像是 Google 为“智能体”世界制定了一…

作者头像 李华
网站建设 2026/8/26 7:41:25

业务系统任务管理流程实现:状态流转与并发控制核心设计

在业务系统开发里,“任务管理流程”是一个非常典型、出现频率很高的模块。它不只是在数据库里建一张任务表那么简单,更关键的是任务从创建、分配、处理、完成到取消、驳回这一套状态流转是否严谨,以及每个环节的操作权限、历史记录、并发控制…

作者头像 李华