☰
新手渗透测试入门:DVWA靶场搭建全攻略与常见坑
2026/9/25 2:17:54 网站建设 项目流程

新手学渗透测试,最怕的不是不会用工具,而是没有地方练手。DVWA(Damn Vulnerable Web Application)就是用来填这个坑的靶场:一个故意堆满漏洞的 PHP + MySQL Web 应用,把 SQL 注入、XSS、CSRF、文件上传这些渗透测试新手必考的漏洞点,全部打包成一个个可以反复打的训练关卡。这篇文章从零开始,把 DVWA 靶场搭建的全过程拆开揉碎,包括环境选型、配置文件修改、数据库初始化、Docker 备用方案,以及我这些年反复搭建踩过的坑。只要跟着下面这套保姆级步骤走,在 Windows 本地上把 DVWA 跑起来,基本不会超过一个小时。

我用的版本是 DVWA 2.5.4,搭配 XAMPP 8.2.x(PHP 8.2),实测整个流程没有踩到兼容性大坑。本文默认你的系统是 Windows 10/11,如果你用 macOS 或者 Linux,思路完全一样,只是路径和安装包不同。

1. DVWA 靶场是什么,为什么新手绕不开它

1.1 靶场与真实站点的区别

很多人问:渗透测试不是有真实站点可以测吗,为什么还要搭靶场?答案很简单:真实站点不能随便打,未经授权测试是违法的,而且真实环境里你不知道目标有什么漏洞,也拿不到源码,排查问题非常困难。

靶场是专门用来练手的“沙盘”。DVWA 故意保留了不安全的代码,让你能看到漏洞背后的源码和触发条件,还能一键重置数据。打完一次,点一下重置,环境又恢复原样,可以反复练。这种“可摧毁、可重建、可复盘”的特性,是真实目标给不了的。

DVWA 跑在本地,不会占用外网资源,也不依赖公网服务器。你可以在断网状态下练习,也可以在本地用 Burp Suite、sqlmap、sqlmap 等工具对它做扫描和测试,完全不用担心影响别人。这样既安全又高效,新手可以放心大胆地操作。

1.2 内置漏洞模块和难度分级

DVWA 内置了十多个经典的 Web 漏洞训练模块,几乎覆盖了初级渗透测试工程师需要掌握的所有方向。我列一下当前版本里比较核心的模块:

模块名称漏洞类型适合练习方向
SQL InjectionSQL 注入手工注入、sqlmap 自动化、绕过技巧
XSS(反射/存储/DOM)跨站脚本前端安全、Cookie 窃取、弹窗验证
CSRF跨站请求伪造表单 Token、Referer 校验、流程分析
File Upload文件上传绕过上传校验、图片马、WebShell
Command Injection命令注入命令拼接、管道符、远程命令执行
File Inclusion本地/远程文件包含LFI/RFI、日志注入、PHP 封装协议
Brute Force登录爆破弱口令、验证码绕过、Burp 爆破
Insecure CAPTCHA验证码绕过业务逻辑漏洞、前端校验缺陷
SQL Injection (Blind)盲注布尔盲注、时间盲注、延时函数
Weak Session IDs会话安全会话固定、Session ID 预测
Open Redirect开放重定向URL 跳转漏洞、钓鱼构造

每个模块下面还有四个难度等级:Low、Medium、High、Impossible。难度不同,代码的防御强度不同,你需要绕过的手段也不一样。从 Low 开始降低门槛,再逐级挑战 High,最后看 Impossible 的写法,这个过程就是在理解“脆弱代码”和“安全代码”之间的差异。

1.3 安全等级机制的妙用

初次接触 DVWA 的人可能不理解,为什么同一个漏洞还要分难度?我的体会是:这不仅仅是门槛问题,更是一条完整的代码审计学习路径。

Low 等级几乎是“裸奔”代码,没有任何过滤,让你先理解漏洞是怎么产生的。Medium 增加了一些表层过滤,比如对输入框做addslashes、对文件后缀做简单检查,这些过滤有的可以绕过,有的不能,你需要学会思考“过滤到底过啥”。High 等级则引入了更严格的校验逻辑,比如参数化查询、Token 校验、随机文件名,你不仅要会打,还要能分析当前场景下能绕过哪些环节。到了 Impossible 等级,代码基本是安全写法,这时候更值得去读源码,学习如何防御同类漏洞。

这套设计特别适合新手:先打 Low,再看源码,再切到 High 对比代码差异。很多人在 Low 难度能轻松注入成功,到了 High 就不会了,原因就是只背着 payload 打,没有理解漏洞原理。DVWA 的难度分级正好逼着你补上这块短板。

2. 搭建前必看:三种方案怎么选

2.1 方案对比表

DVWA 是一个 PHP + MySQL 应用,所以第一步是准备 Web 环境和数据库。目前主流搭建方式有三种:XAMPP 一键环境、Docker 容器、虚拟机装完整 Kali Linux。我给这三条路线做了个对比。

方案上手难度环境真实性资源占用适合场景
XAMPP + DVWA 源码低中高低Windows 本机快速学习,可随时断点调试
Docker 容器中低中低想隔离环境、快速重置、多版本共存
虚拟机装 Kali高完整高希望模拟真实内网拓扑、练习提权渗透全流程

如果你已经装了 Kali Linux 虚拟机,可以直接把 DVWA 部署到 Kali 自带的 Apache/MySQL 里,这和 XAMPP 思路完全一样。但如果你只是想在 Windows 上快速把靶场跑起来,我强烈建议先用 XAMPP,没必要一上来就开虚拟机,更没必要专门为了 DVWA 去装一套 Kali。

2.2 为什么 Windows 本地首选 XAMPP

我先说结论:在 Windows 上搭建 DVWA,XAMPP 是最省心、最容易排错的一条路。

XAMPP 把 Apache、MySQL、PHP、phpMyAdmin 打包成了一个控制面板,你只需要启动 Apache 和 MySQL 两个服务,再把 DVWA 源码放进htdocs目录,就能通过浏览器访问。它不像 Docker 那样有一层镜像抽象,出错时你能直接看到文件路径、PHP 日志、MySQL 日志,排错门槛低很多。

Docker 的优势是环境隔离,一条命令就能跑起来,但它把很多细节藏起来了。新手如果一开始用 Docker,遇到数据库连不上、容器内端口不通、PHP 版本差异这些问题时,往往不知道从哪里下手。XAMPP 是“看得见摸得着”的环境,文件和配置都在明面上,适合先理解原理再玩容器方案。

我见过很多新手一上来就在 Docker 里跑 DVWA,结果卡在初始化数据上,然后来问为什么。一查,其实是镜像里的 MySQL 服务还没起来。换成 XAMPP 之后,问题基本都是几分钟解决。所以说,如果你不是特别熟悉 Docker,先别急着耍花活。

2.3 版本选择与下载注意事项

DVWA 官方一直在维护,建议去 GitHub 下载最新发布版,目前常见稳定版本是 2.5.4。下载地址是官方的digininja/DVWA仓库,可以点击 Code 按钮下载 ZIP 压缩包,也可以直接用 Git 克隆。不要用网上一些打包好的“老版本 DVWA”,那些版本可能停留在多年以前,PHP 8 下跑起来全是报错,而且不一定包含最新的修复和模块。

XAMPP 推荐下载 8.2.x 或更高版本。DVWA 2.5.4 在 PHP 8.2 下实测可以正常运行,部分模块在 PHP 8.3 上可能有Deprecated警告,但不影响核心功能。如果你希望完全避开兼容性问题,PHP 8.1/8.2 是比较稳的选择。

还有一点要注意:下载 XAMPP 时,官网会提供多种组件包,我们只需要 Windows 版本里的标准包(Apache + MySQL + PHP + phpMyAdmin),不需要额外装其他组件。安装路径建议保持默认的C:\xampp,这样后续教程里的路径都能对上。

3. 保姆级搭建步骤:XAMPP + DVWA 完全实操

3.1 安装 XAMPP 并启动两大服务

安装 XAMPP 的过程就是一路 Next,没有什么需要特殊配置的选项。安装完成后打开 XAMPP Control Panel(控制面板),你会看到 Apache、MySQL、FileZilla、Mercury 等一堆服务。我们这里只需要启动 Apache 和 MySQL,其他保持 Stop 状态即可。

点击 Apache 和 MySQL 右侧的 Start 按钮,两个服务状态会变成绿色,表示启动成功。如果启动失败,日志里会给出原因,最常见的是 80 端口被占用,比如 IIS、Nginx 或其他本地服务占用了 80 端口。解决办法有两条:一是关掉占用 80 端口的程序,二是把 Apache 端口改掉。

修改端口的话,打开C:\xampp\apache\conf\httpd.conf,找到Listen 80这一行,改成Listen 8080,然后重启 Apache。这样的话,后面访问 DVWA 的地址就要加上端口号,比如http://127.0.0.1:8080/dvwa/。大多数情况下,关掉占用进程更省事。

MySQL 启动失败一般是 3306 端口被占用,或者是之前安装过 MySQL 服务冲突。遇到这种情况,可以先在命令行执行netstat -ano | findstr :3306,找到占用的 PID,在任务管理器里结束进程。如果之前装过 MySQL 服务,可以在 Windows 服务管理器里停掉,或者修改 XAMPP 的 MySQL 端口。

启动成功后,在浏览器访问http://127.0.0.1,如果能看到 XAMPP 的默认欢迎页,说明 Apache 已经正常工作。如果打不开,先检查 Apache 是不是开了防火墙拦截,又或者是不是端口没改对。

3.2 把 DVWA 源码部署到 htdocs

XAMPP 的网站根目录是C:\xampp\htdocs,所有能在浏览器里访问的 Web 文件都要放在这里。从 GitHub 下载的 DVWA 压缩包,解压后会得到一个DVWA-master这样的文件夹,里面才是 DVWA 的代码。

为了访问方便,我把这个文件夹重命名为dvwa,也就是最终路径是C:\xampp\htdocs\dvwa。全部小写的好处是 URL 不需要区分大小写,后面在浏览器输入路径时不容易出错。

进入C:\xampp\htdocs\dvwa目录后,你会看到几个关键目录和文件:

  • config/:配置文件目录,里面存放连接数据库等核心配置。
  • hackable/:可上传文件和漏洞辅助材料的目录,文件上传模块会用到。
  • vulnerabilities/:每个漏洞模块的源码目录。
  • database/:初始化数据库的 SQL 文件。
  • dvwa/:核心函数和页面渲染代码。
  • login.php、index.php、setup.php:入口文件。

做渗透测试时,你经常需要读这些源代码来理解漏洞触发条件。比如想搞明白 SQL 注入的过滤逻辑,就去看vulnerabilities/sqli/source/下面的 PHP 文件,不同难度等级对应不同源码文件。靶场不只是一个“答题机器”,更是一个代码审计学习素材库。

3.3 修改数据库配置文件

DVWA 的配置文件模板在config/config.inc.php.dist,你需要先把它复制一份,重命名为config.inc.php。直接改.dist文件也能生效,但这样做不标准,以后想恢复默认配置会很麻烦。所以正确做法是复制。

用记事本或 VS Code 打开config.inc.php,你会在最上面看到数据库连接相关配置。默认情况下,DVWA 会尝试使用dvwa用户名和p@ssw0rd密码连接数据库,目标数据库名为dvwa。这一套配置在初始化时可能会失败,因为本地 MySQL 里并没有这个用户。

$_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'dvwa'; $_DVWA[ 'db_password' ] = 'p@ssw0rd'; $_DVWA[ 'db_port' ] = '3306';

如果你用的是 XAMPP 默认的 MySQL 安装,root 用户密码默认为空。最简单粗暴的配置是把db_user改成root,db_password改成空字符串。但出于后续管理上的考虑,我更推荐手动创建一个专门给 DVWA 用的数据库用户,这样不会把 root 密码到处乱放,也和官方默认配置保持一致。

修改完保存文件,先不要急着打开页面,因为接下来还要初始化数据库。如果这里不配置好,后面必然会出现Access denied或者Could not connect to database的报错。

3.4 通过 setup.php 初始化数据库

在浏览器访问http://127.0.0.1/dvwa/setup.php,你会看到一个“Setup”页面。页面里会显示当前 PHP 版本、数据库连接状态,以及一个“Create/Reset Database”按钮。

如果数据库配置正确,页面会显示数据库连接成功。点击按钮后,DVWA 会自动创建dvwa数据库、写入表结构,并插入默认数据。正常情况下,页面会提示Setup successful,同时告诉你默认用户名是admin,默认密码是password。

如果这里报错,先别急着慌张。最常见的报错是数据库连接失败,说明config.inc.php里的连接信息不对,或者 MySQL 服务没有启动。还有一种情况是 PHP 内置的mysql扩展缺失,但 XAMPP 自带的 PHP 默认已经启用了需要的扩展,极少出现这个问题。

setup.php 页面还会检测一些 PHP 环境配置项,比如allow_url_include。这个选项默认是 Off,会影响远程文件包含(RFI)模块的测试。如果你看到警告,可以打开C:\xampp\php\php.ini,搜索allow_url_include,把Off改成On,然后重启 Apache。注意,这个配置在生产环境绝对不能开启,但本地靶场没问题。

初始化完成后,浏览器会自动跳转到登录页面,也可以用http://127.0.0.1/dvwa/login.php进入。输入admin和password,就能进入 DVWA 主界面。

3.5 登录靶场并快速验证

登录成功后,你会看到 DVWA 的主页,左侧菜单栏列出所有漏洞模块,右侧是安全等级和重置数据库的入口。到这里,核心搭建流程就算跑通了。

我习惯先看一眼左下角的“Security Level”,把它设为 Low,然后打开 SQL Injection 模块,在 ID 输入框里填一个单引号',如果页面出现 SQL 语法错误,说明漏洞模块正常工作。这么做的目的不是去打靶,而是验证 PHP、MySQL、DVWA 代码链路是否真的通了。

如果输入单引号后没有任何反应,可能是数据库没初始化成功,也可能是你连接的数据库根本不是 DVWA 的库。这时候重新访问 setup.php,再点一次 Create/Reset Database,通常能解决。

到这里,你已经拥有一个可以折腾的本地靶场。不过我要提醒一句:DVWA 这类的漏洞环境,只允许在本地或者有明确授权的情况下测试。不要拿同样的思路去打别人的站点,那是违法行为,也不是“渗透测试”该做的事。

4. 数据库连接报错?手动创建 MySQL 用户

4.1 为什么“Access denied”会出现

很多人在配置完config.inc.php后,打开 setup.php 会看到Access denied for user 'dvwa'@'localhost'。原因很简单:你的 MySQL 里根本没有dvwa这个用户,或者密码不是p@ssw0rd。

DVWA 官方默认配置并不保证能直接连接成功,因为它在安装阶段需要你根据本地 MySQL 环境微调。XAMPP 自带的 MySQL 默认只有一个root用户,密码为空,并没有创建 DVWA 需要的专属用户,所以“默认配置”常常会报错。

有个细节要注意:环境变量里写的是127.0.0.1,尽量不要用localhost。在 Windows 上,PHP 的 mysqli 扩展连接localhost时可能会尝试走 Unix Socket,导致连接失败或超时。改成127.0.0.1走 TCP 协议,稳定得多。

4.2 用 phpMyAdmin 手动创建用户

如果你不喜欢直接把 root 密码填进 DVWA 配置,那就手动创建一个专用数据库用户。XAMPP 自带 phpMyAdmin,访问http://127.0.0.1/phpmyadmin/,用 root 用户登录(密码为空)。

在 SQL 选项卡里执行下面这段语句,就能创建一个名为dvwa、密码为p@ssw0rd的用户,并授权它操作dvwa数据库:

CREATE USER 'dvwa'@'127.0.0.1' IDENTIFIED BY 'p@ssw0rd'; GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'127.0.0.1'; FLUSH PRIVILEGES;

执行完以后,回到config.inc.php,确认db_user是dvwa、db_password是p@ssw0rd、db_server是127.0.0.1,再刷新 setup.php,数据库连接状态就会变成正常。

如果你还是想用 root 账号,也可以。把db_user改成root,db_password留空,然后重启 Apache 再刷新。本地靶场环境下问题不大,但养成使用专用账号的习惯更好,起码不会因为手滑把某个配置文件的 root 密码泄漏到别的环境里。

4.3 不同报错信息的排查对照表

我把搭建过程中容易碰到的数据库报错整理成一张对照表,方便你直接对照排查。

报错信息可能原因解决办法
Access denied for user 'dvwa'@'localhost'用户不存在或密码错误用 phpMyAdmin 创建用户,或修改配置文件
Could not connect to MySQL: Connection refusedMySQL 服务未启动在 XAMPP Control Panel 启动 MySQL
Unknown database 'dvwa'数据库还没有初始化访问 setup.php 点击 Create/Reset Database
mysqli::real_connect(): (HY000/2002) No such file or directoryPHP 尝试用 Socket 连接 MySQL把db_server改成127.0.0.1
Table 'dvwa.users' doesn't exist数据表缺失或初始化失败重新执行 setup.php 的创建/重置
Cannot connect: The server is not responding3306 端口被占用或防火墙拦截检查端口占用和 XAMPP 防火墙状态

如果以上方法都试过还是连接不上,建议看 MySQL 日志。XAMPP 的 MySQL 日志在C:\xampp\mysql\data目录下,里面的.err文件记录了服务启动和连接过程中的错误,大多数情况下能把问题定位得很准确。

5. 进阶:一条命令用 Docker 跑起来

5.1 经典 Docker 镜像与启动命令

如果你已经熟悉 Docker,DVWA 也可以直接用容器跑。最常见的镜像是vulnerables/web-dvwa,在 Docker Hub 上可以找到。这种方式最大的优势是快,不用手动装 PHP、配 MySQL,一条命令就能看到靶场。

打开终端,执行:

docker run --rm -it -p 8080:80 vulnerables/web-dvwa

启动后用浏览器访问http://localhost:8080,就能看到 DVWA 登录页。这里把容器的 80 端口映射到宿主的 8080,避免和你本地的 Apache 端口冲突。

如果你本机也在用 80 端口,不要写成8080:80,后面那个是容器固定端口,前面是宿主机端口,可以随意换。比如想用 8888 端口,就写成-p 8888:80。

容器启动后,登录页面可能会有点慢,因为容器内的 MySQL 服务需要时间初始化。如果直接登录出现数据库错误,访问一下http://localhost:8080/setup.php,点击 Create/Reset Database,一般就能恢复正常。

5.2 Docker Compose 方式

如果你想更可控一些,比如把数据库单独拆出来,方便以后重置数据,可以写一个简单的 Docker Compose 文件。这种方法适合本地长期做实验,也适合想用脚本化方式管理靶场的同学。

version: '3' services: dvwa: image: vulnerables/web-dvwa ports: - "8080:80" environment: DB_HOST: mysql DB_USER: dvwa DB_PASSWORD: p@ssw0rd DB_NAME: dvwa depends_on: - mysql mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: dvwa MYSQL_USER: dvwa MYSQL_PASSWORD: p@ssw0rd

把上面内容保存为docker-compose.yml,在同一个目录执行docker compose up -d,就能拉起一套带 MySQL 的 DVWA 环境。使用 Compose 的好处是每次练完以后,可以执行docker compose down -v把数据卷一起删掉,下次再跑一个干净环境。

5.3 Docker 方案的优缺点与坑

Docker 方案虽然快,但并不是没有坑。经典镜像vulnerables/web-dvwa更新比较慢,内置的 PHP 版本比较旧,有可能出现某些新工具无法兼容的情况。比如你在宿主机用新版 sqlmap 连进去,功能上没问题,但如果你想在容器里直接装别的渗透工具,镜像底层的包管理器可能已经过时,装东西会比较麻烦。

另外,Docker 容器默认没有持久化配置,如果使用--rm参数,容器停止后所有数据都会消失。这意味着你练完 SQL 注入,把数据库表破坏得一塌糊涂,下次想继续练还得重新初始化,反而不方便。所以更适合“快速体验”而不是“长期精细学习”。

我个人的建议是:如果你是为了学原理、读代码,优先用 XAMPP 原生部署;如果你只是想在 5 分钟内看到一个 DVWA 登录页,或者想隔离测试环境,再选 Docker。两者不冲突,可以都装,用不同端口区分。

6. 高频问题与避坑速查

6.1 Apache/MySQL 启动失败

这是最常见的问题。XAMPP 启动 Apache 失败,八成是 80 端口被占用。你可以在命令行执行:

netstat -ano | findstr :80

如果看到LISTENING状态和 PID,打开任务管理器找到对应进程,结束它。或者修改httpd.conf里的Listen 80为其他端口。MySQL 启动失败则要看 3306 端口。

还有一个容易被忽略的点:如果你之前装过独立的 MySQL 服务,Windows 会把 MySQL 注册成系统服务,开机自启,导致 XAMPP 的 MySQL 无法绑定 3306 端口。解决方法是打开 Windows 服务管理器,找到 MySQL 相关服务,停掉并且设置为“手动”启动。

6.2 页面样式丢失或空白

登录 DVWA 后页面样式不对,很多是路径问题。DVWA 的 CSS 和图片是通过相对路径加载的,如果你把源码文件夹命名为DVWA-master并且 URL 里带了奇怪后缀,可能会出现资源 404。直接把文件夹改成小写dvwa,访问http://127.0.0.1/dvwa/,样式问题基本就消失了。

页面空白还可能是 PHP 报错被隐藏了。打开C:\xampp\php\php.ini,把display_errors设为On,然后重启 Apache,就能在页面上看到具体错误信息。本地靶场建议开启错误显示,方便排查问题。

6.3 初始化数据库失败

点击 Create/Reset Database 之后卡在转圈,或者报Could not connect,基本都是config.inc.php里的数据库连接信息不对。按第 4 节的方法检查连接配置,把db_server设为127.0.0.1,确认 MySQL 已经启动,再刷新 setup.php。

如果确认配置没错,但还是无法创建数据库,可能是 phpMyAdmin 里的 root 账号权限不够。XAMPP 默认 root 密码为空,如果之前改过 root 密码,config.inc.php里也要同步改,或者用专用用户连接。

6.4 登录不上

账号admin、密码password是正确的,前提是数据库已经初始化成功。如果提示登录失败,先回到 setup.php 再点一次 Create/Reset Database。这个操作能重置 admin 用户的密码,同时清空所有漏洞模块的数据。

还有一种情况是浏览器缓存了旧 Session。DVWA 的登录状态是基于 Session 的,初始化数据库后旧的会话可能失效。解决办法是清除浏览器 Cookie,或者换一个无痕窗口重新登录。

6.5 PHP 版本兼容性问题

DVWA 2.5.4 在 PHP 8.2 下能跑,但某些老版本 DVWA 在 PHP 8 下会直接白屏,因为 PHP 7 以后移除了一些废弃函数,比如mysql_*系列。所以我才强调要下载官方最新版,不要用网上那种“怀旧版”。

如果页面顶部看到Deprecated警告,不影响功能,但看着烦。在php.ini里设置:

error_reporting = E_ALL & ~E_DEPRECATED display_errors = Off

保存后重启 Apache,警告就没了。需要注意的是,靶场学习过程中我建议保留错误显示,因为很多时候漏洞触发后需要在页面里看到 SQL 报错,才能判断注入是否成功。如果你因为嫌弃警告把它关了,后面做题可能会少很多信息。

7. 从搭建到上手:DVWA 使用路线与后续建议

7.1 搭建完成后的自测清单

搭建完成后,不要急着去打模块,先做一遍自测,确认每一个漏洞模块都能正常访问。我的自测清单是这样的:

  • 能正常登录 DVWA,并且左侧菜单可以展开。
  • 把 Security Level 设置为 Low,进入 SQL Injection 模块,输入1'能报错或出现异常页面。
  • 进入 XSS (Reflected) 模块,输入<script>alert(1)</script>能触发弹窗。
  • 进入 File Upload 模块,能正常上传文件。
  • 重新访问 setup.php,点击 Create/Reset Database 能恢复初始状态。

如果这些操作全部通过,说明靶场环境完全可用。如果某个模块打不开,通常是对应功能依赖的配置没开,比如文件上传模块可能需要目录写入权限,Windows 下一般不会出问题,Linux 下要检查hackable/uploads/目录是否可写。

7.2 新手刷题顺序建议

我建议的学习顺序是:先刷 SQL Injection 和 XSS,再刷 CSRF、Command Injection、File Upload,最后碰盲注和文件包含。SQL Injection 是整个 Web 渗透测试的基础,XSS 能帮你理解前后端交互,这两个模块都建议把 Low、Medium、High 三个等级打完,再对照 Impossible 源码看防御写法。

刷题不是只追求“打进去”。我习惯在每次成功之后,打开vulnerabilities目录下的源码,看当前难度等级的代码到底过滤了什么、校验了什么、为什么 payload 能绕过。这一步能沉淀出真正的经验,不然你今天能打 Low,明天换个过滤规则就不会了。

7.3 往后可以玩什么

DVWA 只是起点。打完之后,很多人会转向 Pikachu 靶场、SQLi-Labs 靶场、Upload-Labs 靶场,这些同样是本地漏洞环境,覆盖更细分的漏洞类型。比如 SQLi-Labs 专门用来练习 SQL 注入的各种变形,从联合注入到盲注,再到二次注入,一级一级递进;Pikachu 里也有很多基于业务逻辑的漏洞,比如越权、支付逻辑问题。

还有 Vulnhub 上的虚拟镜像,里面是完整的 Linux 系统与 Web 应用,适合练习从 Web 漏洞打到服务器提权的完整渗透流程。不过这类靶场通常需要虚拟机,对网络配置和理解要求更高,建议在 DVWA 里把基础打牢之后再去碰。

7.4 安全与合规提醒

DVWA 作为漏洞靶场,只能在本地或者你有明确授权的环境中使用。把它部署到公网、拿它去模拟攻击线上目标,都是高风险行为。搭建靶场的初衷是学习,而不是制造新的风险源头。我建议你在关闭 DVWA 页面或者结束学习后,直接停止 Apache 和 MySQL 服务,不让漏洞环境长期挂在后台。

如果你从本文的 XAMPP 方案切换到 Docker 方案,用完之后记得清理容器。一个暴露在局域网里的 DVWA 容器,本质上等同给内网丢了一个可以被攻击的站点,哪怕它只是个靶场,也可能被扫描器盯上。安全意识应该从自己动手搭环境那一刻就开始养。

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

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

立即咨询