JavaScript作为现代Web应用的核心语言,既是开发利器,也是攻击者的重点突破方向。本文从渗透测试工程师视角,系统性梳理30个关键JS安全攻防点,涵盖漏洞挖掘、防御绕过、信息泄露等实战场景。全文基于真实CVE案例及OWASP TOP 10标准,建议收藏学习。
一、漏洞挖掘篇
-
1. 原型链污染攻击 -
• 原理:通过污染 __proto__
或constructor.prototype
修改对象原型链 -
• 案例:Lodash CVE-2018-3721通过 merge
函数触发RCE -
• 防御:禁用 Object.assign()
处理用户输入,使用Object.create(null)
创建纯净对象 -
2. XSS盲打与存储型利用 -
• 技巧:构造 <img src=x onerror=alert(document.cookie)>
并监控HTTP请求日志 -
• 进阶:利用 document.write()
未过滤场景注入恶意脚本 -
3. CSRF Token绕过 -
• 手法:通过 fetch().then()
劫持页面内生成的Token -
• 防御:严格验证Referer头,启用SameSite Cookie属性 -
4. CORS配置滥用 -
• 漏洞点: Access-Control-Allow-Origin: *
允许任意域跨域请求 -
• 渗透:构造恶意页面使用 XMLHttpRequest
窃取用户数据 -
5. JWT密钥爆破 -
• 工具:使用 hashcat
对弱签名密钥进行字典攻击 -
• 防御:采用HS256强密钥,定期轮换Token
二、防御绕过篇
-
6. WAF指纹识别与绕过 -
• 技巧:将 alert()
改写为window['al'+'ert']()
分散检测特征 -
• 工具:使用JSFuck(6种符号编码)混淆Payload -
7. Content Security Policy绕过 -
• 漏洞场景:允许 unsafe-eval
或存在script-src 'self'
但未限制子域 -
• 渗透:上传恶意JS至合法CDN子域实现绕过 -
8. 沙箱逃逸攻击 -
• 案例:利用 <iframe>
的srcdoc
属性执行父页面函数 -
• 防御:启用 <iframe sandbox>
的allow-scripts限制 -
9. Web缓存投毒(Cache Poisoning) -
• 手法:通过篡改 X-Forwarded-Host
头污染CDN缓存 -
• 检测:对比正常请求与带毒请求的响应头差异 -
10. 正则表达式拒绝服务(ReDoS) -
• 高危模式: /(a+)+b/
类嵌套量词导致指数级计算 -
• 防御:使用安全正则库(如safe-regex)校验规则
三、信息泄露篇
-
11. 源码泄露检测 -
• 技巧:访问 .git/config
、.DS_Store
等敏感文件 -
• 工具:使用GitHacker自动化下载.git目录 -
12. API密钥硬编码扫描 -
• 正则模式: /(ak|sk|token)s*[:=]s*['"][a-f0-9]{32}/gi
-
• 案例:Github历史提交中暴露AWS Access Key -
13. 控制台信息泄露 -
• 渗透:监控 console.log()
输出的调试信息(如SQL语句) -
• 防御:生产环境移除所有调试输出 -
14. 错误信息利用 -
• 示例:通过 try/catch
捕获的数据库错误推断表结构 -
• 防护:统一返回通用错误页面 -
15. WebSocket敏感数据传输 -
• 抓包:使用Wireshark过滤 ws://
流量分析明文通信 -
• 加固:强制使用 wss://
并启用TLS 1.3加密
四、高级利用篇
-
16. Service Worker劫持 -
• 攻击链:注册恶意SW拦截所有网络请求(需先触发XSS) -
• 防御:限制SW注册范围,启用Subresource Integrity -
17. WebRTC内网探测 -
• 原理:通过 RTCPeerConnection
获取内网IP地址 -
• 防护:使用VPN或禁用WebRTC功能 -
18. 浏览器扩展漏洞利用 -
• 案例:通过 chrome.runtime.sendMessage
监听消息泄露数据 -
• 检测:审计扩展权限(如 <all_urls>
) -
19. IndexedDB数据窃取 -
• 渗透:遍历 window.indexedDB.databases()
获取存储内容 -
• 加固:加密敏感数据后再存储 -
20. 内存攻击(如Buffer Overflow) -
• 场景:通过 ArrayBuffer
操作触发V8引擎漏洞(需结合Exploit) -
• 缓解:启用Chrome的Site Isolation隔离机制
五、其他关键技巧
-
21. DOM Clobbering攻击 -
• 手法:通过 <form id=document>
覆盖全局对象属性 -
• 防御:使用 Object.freeze(window.document)
-
22. JSON劫持(JSON Hijacking) -
• 漏洞:通过重写Array构造函数窃取敏感JSON数据 -
• 防护:响应头添加 X-Content-Type-Options: nosniff
-
23. Web组件Shadow DOM绕过 -
• 渗透:使用 element.shadowRoot
遍历内部元素 -
• 限制:设置 closed
模式禁止外部访问 -
24. 浏览器历史记录嗅探 -
• 技巧:通过 :visited
伪类样式差异探测访问历史 -
• 防护:现代浏览器已限制此功能 -
25. 本地存储持久化攻击 -
• 持久XSS:将恶意脚本写入 localStorage
实现长期驻留 -
• 清理:定期调用 localStorage.clear()
-
26. 第三方库漏洞利用 -
• 扫描工具:使用 npm audit
或Snyk检测已知漏洞 -
• 案例:jQuery的 CVE-2020-11022
XSS漏洞 -
27. WebAssembly逆向分析 -
• 工具链:使用wasm2c将WASM转换为C代码审计 -
• 加固:启用WASI权限沙箱 -
28. 正则表达式注入 -
• 漏洞:动态生成RegExp时未转义用户输入 -
• 示例: new RegExp("^"+userInput+"$")
导致逻辑绕过 -
29. Node.js子进程命令注入 -
• 高危函数: child_process.exec()
拼接用户输入 -
• 修复:改用 execFile()
并严格校验参数 -
30. HTTP头注入(CRLF) -
• 攻击:通过 rn
分割头与内容实现响应拆分 -
• 过滤:移除用户输入中的 %0d%0a
字符
JavaScript安全是攻防博弈的前沿阵地,渗透测试人员需持续跟踪最新漏洞与防御方案。
原文始发于微信公众号(乌雲安全):30个必知必会的JS渗透测试技巧
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论