【DVWA系列】——JavaScript——High详细教程

本文仅用于技术研究,禁止用于非法用途。
Author:枷锁

文章目录

    • 漏洞核心原理分析
      • Token生成流程(还原后)
      • 完整Token生成路径
    • 逐步攻击教程
      • 方法一:控制台手动执行
      • 方法二:分步计算Token值
      • 方法三:自动化攻击脚本
    • 技术原理详解
    • 防御措施与修复建议
    • 防御措施与修复方案
        • 1. 根本漏洞原因
        • 2. 安全方案
    • 各安全级别防御对比

本文环境Security Level:High

以下是针对DVWA(Damn Vulnerable Web Application)中 JavaScript Attacks模块High级别的详细漏洞分析与利用教程,结合多篇技术资料整理而成。


漏洞核心原理分析

在High级别中,DVWA使用了高度混淆的JavaScript代码多级SHA256哈希验证机制,但关键漏洞依然是客户端验证。攻击者可以通过分析混淆代码,理解Token生成流程,从而绕过验证机制。

Token生成流程(还原后)

// 1. 字符串反转函数
function do_something(e) {
    for (var t = "", n = e.length - 1; n >= 0; n--) t += e[n];
    return t;
}

// 2. 第一阶段Token处理
function token_part_1(a, b) {
    document.getElementById("token").value = do_something(
        document.getElementById("phrase").value
    );
}

// 3. 第二阶段Token处理(300ms后执行)
function token_part_2(e = "XX") {
    document.getElementById("token").value = sha256(
        e + document.getElementById("token").value
    );
}

// 4. 第三阶段Token处理(点击提交时执行)
function token_part_3(t, y = "ZZ") {
    document.getElementById("token").value = sha256(
        document.getElementById("token").value + y
    );
}

// 初始化流程
document.getElementById("phrase").value = "";
token_part_1("ABCD", 44); // 立即执行
setTimeout(() => token_part_2("XX"), 300); // 300ms后执行
document.getElementById("send").addEventListener("click", token_part_3); // 点击时执行

完整Token生成路径

  1. 用户输入短语(如"success")
  2. token_part_1执行:反转字符串(“success” → “sseccus”)
  3. token_part_2执行(300ms后):添加"XX"前缀并SHA256哈希(“XXsseccus” → SHA256)
  4. 点击提交时token_part_3执行:添加"ZZ"后缀并再次SHA256哈希(SHA256结果 + “ZZ” → 最终Token)

逐步攻击教程

方法一:控制台手动执行

  1. 访问DVWA页面:登录DVWA,安全级别设为High,进入JavaScript Attacks模块

  2. 打开开发者工具:按F12或右键 → 检查 → Console标签
    【DVWA系列】——JavaScript——High详细教程_第1张图片

  3. 执行以下代码

// 1. 设置短语
document.getElementById("phrase").value = "success";

// 2. 执行第一阶段:反转字符串
token_part_1("ABCD", 44); // 此时token变为"sseccus"

// 3. 执行第二阶段:添加"XX"前缀并SHA256
token_part_2("XX"); // 生成中间哈希值

// 4. 执行第三阶段:添加"ZZ"后缀并SHA256
token_part_3("", "ZZ"); // 生成最终Token

// 5. 提交表单
document.forms[0].submit();

【DVWA系列】——JavaScript——High详细教程_第2张图片

方法二:分步计算Token值

  1. 计算第一步:反转字符串

    const phrase = "success";
    const reversed = phrase.split('').reverse().join(''); // "sseccus"
    
  2. 计算第二步:第一次SHA256

    // 使用在线SHA256工具或控制台计算
    const step1 = "XX" + reversed; // "XXsseccus"
    const hash1 = sha256(step1); // 示例:7f1bfaaf829f785ba5801d5bf68c1ecaf95ce04545462c8b8f311dfc9014068a
    
  3. 计算第三步:第二次SHA256

    const step2 = hash1 + "ZZ"; 
    const finalToken = sha256(step2); // 示例:28638d855bc00d62b33f9643eab3e43d8335ab2b308039abd8fb8bef86331b14
    
  4. 手动提交

    • Phrase输入框:success
    • Token输入框:填入上面计算的finalToken
    • 点击Submit按钮

方法三:自动化攻击脚本

DOCTYPE html>
<html>
<body>
<script>
function attackDVWA() {
    // 1. 创建隐藏iframe访问目标页面
    const iframe = document.createElement('iframe');
    iframe.style.display = 'none';
    document.body.appendChild(iframe);
    
    iframe.onload = function() {
        const doc = iframe.contentDocument;
        
        // 2. 设置目标短语
        doc.getElementById("phrase").value = "success";
        
        // 3. 获取并执行原始脚本
        const scripts = doc.getElementsByTagName('script');
        for (let script of scripts) {
            if (script.src.includes('high.js')) {
                // 4. 直接调用混淆函数
                const newScript = doc.createElement('script');
                newScript.textContent = `
                    token_part_1("ABCD", 44);
                    token_part_2("XX");
                    token_part_3("", "ZZ");
                    document.forms[0].submit();
                `;
                doc.body.appendChild(newScript);
                break;
            }
        }
    };
    
    // 5. 设置目标URL(需先登录DVWA)
    iframe.src = 'http://localhost/dvwa/vulnerabilities/javascript/';
}

// 执行攻击
attackDVWA();
script>
body>
html>

技术原理详解

  1. 混淆代码还原

    • 使用在线工具如http://deobfuscatejavascript.com/还原代码
    • 关键识别点:setTimeoutaddEventListener调用顺序
  2. SHA256哈希机制

    // 典型SHA256实现结构
    function sha256(input) {
        // 初始化哈希常量
        const K = [0x428a2f98, 0x71374491, ...];
        // 消息填充和分块处理
        // 多轮压缩函数运算
        // 返回十六进制哈希值
    }
    

    两次哈希增加复杂度但仍在客户端进行

  3. 时序攻击关键

    • token_part_2的300ms延迟必须等待
    • token_part_3绑定在点击事件上
    • 执行顺序:part1 → part2 → (点击) part3

防御措施与修复建议

  1. 服务端验证
// 服务器端验证示例
session_start();
$validToken = hash('sha256', hash('sha256', "XX".strrev($_SESSION['secret'])."ZZ"));

if ($_POST['token'] !== $validToken || $_POST['phrase'] !== "success") {
    die("Invalid request!");
}
  1. 增强防护机制

    • 使用HMAC-SHA256替代纯SHA256
    • 添加时间戳和一次性随机数(nonce)
    • 实施CSRF令牌保护
  2. 混淆技术的局限性

    • 混淆不能替代服务器验证
    • 客户端代码永远不可信
    • 最小化客户端敏感逻辑

通过本教程,您已掌握DVWA High级别JavaScript攻击的核心技术。关键要点是:无论客户端如何混淆加密,只要验证逻辑在客户端执行,就存在被绕过的风险。实际应用中务必在服务端完成最终验证。

: 展示了HMAC-SHA256的应用实例,说明单纯SHA256的不足
: 提供了DVWA各难度级别的对比分析,包括High级别的混淆技术
: 详细解释了SHA256的JavaScript实现原理


防御措施与修复方案

1. 根本漏洞原因
  • 客户端Token生成:所有加密逻辑在浏览器端完成,攻击者可完全控制流程。
  • 混淆非加密:混淆(Obfuscation)仅增加阅读难度,无法替代服务端验证。
2. 安全方案

// 服务端Token验证示例(Impossible级别思路)
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $expectedToken = hash('sha256', hash('sha256', "XX" . strrev($_SESSION['secret']) . "ZZ"));
    if ($_POST['token'] !== $expectedToken || $_POST['phrase'] !== "success") {
        die("Invalid token!");
    }
    echo "Success!";
}
?>

关键改进

  • 服务端生成Token:基于会话密钥动态计算,避免客户端暴露逻辑。
  • 一次性Token:每次请求更新会话密钥,防止重放攻击。

各安全级别防御对比

安全级别 Token生成位置 加密逻辑 绕过难度
Low 客户端 无加密(ROT13+MD5)
Medium 客户端 字符串反转 ⭐⭐
High 客户端 SHA256混淆 ⭐⭐⭐
Impossible 服务端 动态密钥+多次哈希 无法绕过

总结:High级别的混淆虽增加分析成本,但未解决核心问题——信任客户端输入。安全设计的核心原则是:关键逻辑必须在服务端实现,且需结合会话隔离与动态密钥。建议在实战中参考Impossible级别的服务端验证模型。

宇宙级免责声明​​
重要声明:本文仅供合法授权下的安全研究与教育目的!
1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。
2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。
3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。
4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。
5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。
6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。
7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。

安全研究的正确姿势:
✅ 先授权,再测试
✅ 只针对自己拥有或有权测试的系统
✅ 发现漏洞后,及时报告并协助修复
✅ 尊重隐私,不越界

⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。

希望这个教程对你有所帮助!记得负责任地进行安全测试。

你可能感兴趣的:(网络安全,靶场练习,javascript,网络,开发语言,web安全,网络安全,前端)