尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

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.xMariaDB 也可。不要追求“最新版就一定最好”。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.phpconfig目录下有一个config.inc.php.dist文件这是配置文件模板。后面我们需要复制一份改成config.inc.php并填写数据库连接信息。3.2 将 DVWA 放到 Web 目录如果你使用 phpStudyWeb 根目录一般是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 ] pssw0rd; $_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 安装 DockerDocker 的安装在 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”这里可以切换安全级别。初始状态可能是impossible或disabled这取决于镜像版本。建议先切到low方便观察最原始的漏洞利用过程。5.3 用一个模块跑通测试以 SQL Injection 模块为例验证你确实能完成一次真实的漏洞利用。进入 SQL Injection 页面输入框提示输入 User ID。在 Low 级别下输入1 OR 11点击 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_user和db_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 11后你会发现返回的数据是完整的 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 这类靶场存在的意义是让你在合法、受控的环境中练习安全测试。请把它留在自己的电脑里不要带入任何未授权的系统。技术学习要有热情更要有底线。
返回列表