HUNT-DOM 是一个面向客户端 DOM 漏洞的攻防技能集,聚焦在受害者浏览器中执行的攻击。由于服务端通常看不到 payload,WAF 与服务器端输入过滤对这类攻击基本无效;其中 PostMessage 缺少 origin 校验可直接实现跨域令牌窃取,无需 XSS。
【主要用途】 围绕四类客户端 DOM 攻击面进行发现与验证:DOM Clobbering(通过 HTML 注入覆盖 JS 全局变量)、PostMessage 劫持(缺少或弱 origin 校验)、Service Worker 滥用、CSS 数据外带(CSS Exfil)。同时覆盖 dangerouslySetInnerHTML 等框架 sink 与客户端模板注入(CSTI)的探测。
【主要能力】
- DOM Clobbering:利用无 script 的标记注入覆盖 window 上的可覆盖全局(如 config、settings 等),使被覆盖的值进入 location、innerHTML、eval、script.src 等 sink,从而在脚本被过滤的场景下触发 DOM-XSS 或认证绕过。提供浏览器控制台脚本筛选可疑全局,并给出源码审查命令。针对 jQuery < 3.5.0 的 CVE-2020-11022 / CVE-2020-11023(.html()/.append() 传入攻击者 HTML 会自变异执行)给出版本确认与测试路径。
- PostMessage 劫持:识别未校验 origin 的监听器(数据流向 innerHTML/eval/location/令牌存储),以及以 targetOrigin '' 广播秘密的发送方(任意框架页面可读取令牌/授权码)。附带两类 PoC:从攻击者页面驱动无 origin 校验的监听器;捕获使用 '' 的发送方泄露的秘密。同时提示对部分校验(indexOf、endsWith、正则)可用形似域名绕过,并覆盖“首个消息即信任”或帧加载期间 event.origin 为空/未定的 PostMessage 竞态。
- Service Worker 滥用:明确规则——SW 脚本 URL 必须与调用 register() 的页面同源,跨域脚本 URL 会抛 SecurityError,且没有任何头部可开启跨域 SW 脚本注册;Service-Worker-Allowed 只放宽同源脚本可控制的 scope。因此路径是先把 SW 脚本放到目标源上(可服务 JS 的上传、可反射为脚本的路径、返回 text/javascript 的 JSON/JSONP 端点、或可控的既有路由),再由同源 XSS 注册。提供枚举现有 SW 与 scope、查找返回 text/javascript 的上传/路由的命令,以及拦截 fetch 并外带 URL 与 authorization 头的示例。SW 可跨标签关闭存活并在下次访问同 scope 时重跑,因此可造成持续性凭据拦截。
- CSS 注入/外带:通过属性选择器(如 input[value^="a"])配合 url() 把 CSRF 令牌/API 密钥/nonce 逐字符泄露到 OOB 主机,无需 JS;配合 @import 递归可突破“静态输入仅泄露一个字符”的限制。强调须先读取线上 CSP:若 img-src/style-src/connect-src/default-src 限制外部源,则 CSS 外带不可行。
- 框架 sink 与 CSTI:检索 dangerouslySetInnerHTML、v-html=、[innerHTML]=、.html( 等用法,并跟踪用户数据是否在无净化器(DOMPurify/sanitize-html)情况下到达 sink;若存在 DOMPurify 则检查 clobbering/mXSS 绕过与版本。检测 Angular/Vue/Handlebars/Mustache/Nunjucks/Alpine.js 等框架后,测试 {{}} sink,并在渲染后的 DOM(而非 curl 的原始 HTML)中确认是否为客户端渲染。
【使用方式】 按阶段操作:先定位注入点与端点信号(允许标记但可能剥离 script 的富文本/预览/SVG 上传等;/sso/、/embed/、/widget/、/oauth/、/sdk.js、支付/结账 iframe;/sw.js、/service-worker.js、/firebase-messaging-sw.js、/ngsw-worker.js;?theme=、自定义 CSS 字段、邮件模板编辑器、style= 透传),再用附带的 grep/curl 命令审查源码,套用相应 PoC 进行验证。
【适用场景】 授权安全测试与漏洞挖掘中对客户端 DOM 漏洞的探测、复现与链式利用评估,包括从 Clobbering 到 DOM-XSS/认证绕过、从 PostMessage 到账户接管、从 CSS 外带到 CSRF 链、从同源 SW 到持续凭据拦截。
【限制与验证纪律】
- 工具:DOM Invader(内置于 Burp 浏览器,提供 sources→sinks、postMessage 日志、clobbering 扫描)、postMessage-tracker(Chrome 扩展)、Burp Collaborator / interactsh / request-bin 作为 CSS 外带与 SW PoC 必需的 OOB sink;引用任何工具 URL 前先验证。
- 验证要求:在 DevTools 中触发的技术不构成漏洞,必须经 OOB 确认并证明状态影响。Clobbering 需展示被覆盖值确实到达 sink;PostMessage 需区分缺失校验与弱校验,且仅凭消息日志不是证据;CSS 外带唯一证据是每个正确字符对应的 OOB 回调;SW 注册必须为同源脚本,SecurityError 说明引用了错误的源,并需证明持久性(关闭标签重开仍有新的 OOB 命中且无需再次 XSS)。所有测试使用唯一标记(如 btoa(domain)+nonce)以便归因,且应对比渲染后的 DOM 而非原始 HTML。
- 严重性参考:同源 Service Worker 导致持续凭据拦截为 Critical;PostMessage 数据流向 DOM-XSS/令牌窃取导致账户接管为 High–Critical;DOM Clobbering 导致抵达认证/会话的 DOM-XSS 为 High;经 OOB 证明的 CSRF 令牌 CSS 外带为 Medium(若链式 CSRF 涉及账户关键操作可提升)。
- 分类与定价:除上述技术内容外,该技能的收费、价格、适用平台与具体使用步骤暂未提供。