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-11022XSS漏洞
- 27. WebAssembly逆向分析
- • 工具链:使用wasm2c将WASM转换为C代码审计
- • 加固:启用WASI权限沙箱
- 28. 正则表达式注入
- • 漏洞:动态生成RegExp时未转义用户输入
- • 示例:new RegExp(“^”+userInput+”$”)导致逻辑绕过
- 29. Node.js子进程命令注入
- • 高危函数:child_process.exec()拼接用户输入
- • 修复:改用execFile()并严格校验参数
- 30. HTTP头注入(CRLF)
- • 攻击:通过\r\n分割头与内容实现响应拆分
- • 过滤:移除用户输入中的%0d%0a字符
JavaScript安全是攻防博弈的前沿阵地,渗透测试人员需持续跟踪最新漏洞与防御方案。
文章来源:乌雲安全
黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!
如侵权请私聊我们删文
END

© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END














暂无评论内容