30个必知必会的JS渗透测试技巧

admin 2025年2月20日19:00:46评论38 views字数 2623阅读8分44秒阅读模式

JavaScript作为现代Web应用的核心语言,既是开发利器,也是攻击者的重点突破方向。本文从渗透测试工程师视角,系统性梳理30个关键JS安全攻防点,涵盖漏洞挖掘、防御绕过、信息泄露等实战场景。全文基于真实CVE案例及OWASP TOP 10标准,建议收藏学习。

一、漏洞挖掘篇

  1. 1. 原型链污染攻击
    • • 原理:通过污染__proto__constructor.prototype修改对象原型链
    • • 案例:Lodash CVE-2018-3721通过merge函数触发RCE
    • • 防御:禁用Object.assign()处理用户输入,使用Object.create(null)创建纯净对象
  2. 2. XSS盲打与存储型利用
    • • 技巧:构造<img src=x onerror=alert(document.cookie)>并监控HTTP请求日志
    • • 进阶:利用document.write()未过滤场景注入恶意脚本
  3. 3. CSRF Token绕过
    • • 手法:通过fetch().then()劫持页面内生成的Token
    • • 防御:严格验证Referer头,启用SameSite Cookie属性
  4. 4. CORS配置滥用
    • • 漏洞点Access-Control-Allow-Origin: *允许任意域跨域请求
    • • 渗透:构造恶意页面使用XMLHttpRequest窃取用户数据
  5. 5. JWT密钥爆破
    • • 工具:使用hashcat对弱签名密钥进行字典攻击
    • • 防御:采用HS256强密钥,定期轮换Token

二、防御绕过篇

  1. 6. WAF指纹识别与绕过
    • • 技巧:将alert()改写为window['al'+'ert']()分散检测特征
    • • 工具:使用JSFuck(6种符号编码)混淆Payload
  2. 7. Content Security Policy绕过
    • • 漏洞场景:允许unsafe-eval或存在script-src 'self'但未限制子域
    • • 渗透:上传恶意JS至合法CDN子域实现绕过
  3. 8. 沙箱逃逸攻击
    • • 案例:利用<iframe>srcdoc属性执行父页面函数
    • • 防御:启用<iframe sandbox>的allow-scripts限制
  4. 9. Web缓存投毒(Cache Poisoning)
    • • 手法:通过篡改X-Forwarded-Host头污染CDN缓存
    • • 检测:对比正常请求与带毒请求的响应头差异
  5. 10. 正则表达式拒绝服务(ReDoS)
    • • 高危模式/(a+)+b/类嵌套量词导致指数级计算
    • • 防御:使用安全正则库(如safe-regex)校验规则

三、信息泄露篇

  1. 11. 源码泄露检测
    • • 技巧:访问.git/config.DS_Store等敏感文件
    • • 工具:使用GitHacker自动化下载.git目录
  2. 12. API密钥硬编码扫描
    • • 正则模式/(ak|sk|token)s*[:=]s*['"][a-f0-9]{32}/gi
    • • 案例:Github历史提交中暴露AWS Access Key
  3. 13. 控制台信息泄露
    • • 渗透:监控console.log()输出的调试信息(如SQL语句)
    • • 防御:生产环境移除所有调试输出
  4. 14. 错误信息利用
    • • 示例:通过try/catch捕获的数据库错误推断表结构
    • • 防护:统一返回通用错误页面
  5. 15. WebSocket敏感数据传输
    • • 抓包:使用Wireshark过滤ws://流量分析明文通信
    • • 加固:强制使用wss://并启用TLS 1.3加密

四、高级利用篇

  1. 16. Service Worker劫持
    • • 攻击链:注册恶意SW拦截所有网络请求(需先触发XSS)
    • • 防御:限制SW注册范围,启用Subresource Integrity
  2. 17. WebRTC内网探测
    • • 原理:通过RTCPeerConnection获取内网IP地址
    • • 防护:使用VPN或禁用WebRTC功能
  3. 18. 浏览器扩展漏洞利用
    • • 案例:通过chrome.runtime.sendMessage监听消息泄露数据
    • • 检测:审计扩展权限(如<all_urls>
  4. 19. IndexedDB数据窃取
    • • 渗透:遍历window.indexedDB.databases()获取存储内容
    • • 加固:加密敏感数据后再存储
  5. 20. 内存攻击(如Buffer Overflow)
    • • 场景:通过ArrayBuffer操作触发V8引擎漏洞(需结合Exploit)
    • • 缓解:启用Chrome的Site Isolation隔离机制

五、其他关键技巧

  1. 21. DOM Clobbering攻击
    • • 手法:通过<form id=document>覆盖全局对象属性
    • • 防御:使用Object.freeze(window.document)
  2. 22. JSON劫持(JSON Hijacking)
    • • 漏洞:通过重写Array构造函数窃取敏感JSON数据
    • • 防护:响应头添加X-Content-Type-Options: nosniff
  3. 23. Web组件Shadow DOM绕过
    • • 渗透:使用element.shadowRoot遍历内部元素
    • • 限制:设置closed模式禁止外部访问
  4. 24. 浏览器历史记录嗅探
    • • 技巧:通过:visited伪类样式差异探测访问历史
    • • 防护:现代浏览器已限制此功能
  5. 25. 本地存储持久化攻击
    • • 持久XSS:将恶意脚本写入localStorage实现长期驻留
    • • 清理:定期调用localStorage.clear()
  6. 26. 第三方库漏洞利用
    • • 扫描工具:使用npm audit或Snyk检测已知漏洞
    • • 案例:jQuery的CVE-2020-11022XSS漏洞
  7. 27. WebAssembly逆向分析
    • • 工具链:使用wasm2c将WASM转换为C代码审计
    • • 加固:启用WASI权限沙箱
  8. 28. 正则表达式注入
    • • 漏洞:动态生成RegExp时未转义用户输入
    • • 示例new RegExp("^"+userInput+"$")导致逻辑绕过
  9. 29. Node.js子进程命令注入
    • • 高危函数child_process.exec()拼接用户输入
    • • 修复:改用execFile()并严格校验参数
  10. 30. HTTP头注入(CRLF)
    • • 攻击:通过rn分割头与内容实现响应拆分
    • • 过滤:移除用户输入中的%0d%0a字符

JavaScript安全是攻防博弈的前沿阵地,渗透测试人员需持续跟踪最新漏洞与防御方案。

原文始发于微信公众号(乌雲安全):30个必知必会的JS渗透测试技巧

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月20日19:00:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   30个必知必会的JS渗透测试技巧https://cn-sec.com/archives/3764475.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息