DOM Invader

Reading time: 9 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

DOM Invader

DOM Invader 是一个安装在 Burp Suite 内置 Chromium 浏览器 中的浏览器工具。它通过自动 插桩 JavaScript 源和接收器 来帮助 检测 DOM XSS 和其他客户端漏洞(原型污染、DOM 覆盖等)。该扩展随 Burp 一起提供,只需启用即可。

DOM Invader 在浏览器的 DevTools 面板中添加了一个选项卡,让您可以:

  1. 实时识别可控接收器,包括上下文(属性、HTML、URL、JS)和应用的清理。
  2. 记录、编辑和重新发送 postMessage() 网络消息,或让扩展自动变更它们。
  3. 检测客户端原型污染源并扫描 gadget→sink 链,实时生成 PoC。
  4. 查找 DOM 覆盖向量(例如 id / name 冲突,覆盖全局变量)。
  5. 通过丰富的设置 UI 微调行为(自定义 canary、自动注入、重定向阻止、源/接收器列表等)。

1. 启用它

  1. 打开 Proxy ➜ Intercept ➜ Open Browser(Burp 的嵌入式浏览器)。
  2. 点击 Burp Suite 徽标(右上角)。如果它被隐藏,先点击拼图块。
  3. DOM Invader 选项卡中,将 Enable DOM Invader 切换为开启并按 Reload
  4. 打开 DevTools( F12 / 右键 ➜ 检查)并停靠。一个新的 DOM Invader 面板出现。

Burp 会根据配置文件记住状态。如有需要,在 Settings ➜ Tools ➜ Burp’s browser ➜ Store settings... 下禁用它。

2. 注入一个 Canary

一个 canary 是一个随机标记字符串(例如 xh9XKYlV),DOM Invader 会跟踪它。您可以:

  • 复制 它并手动注入到参数、表单、Web-Socket 帧、网络消息等中。
  • 使用 Inject URL params / Inject forms 按钮打开一个新选项卡,canary 会自动附加到每个查询键/值或表单字段。
  • 搜索 空 canary 以揭示所有接收器,无论其可利用性如何(非常适合侦察)。

自定义 canary (2025+)

Burp 2024.12 引入了 Canary settings(Burp 徽标 ➜ DOM Invader ➜ Canary)。您可以:

  • 随机化 或设置 自定义字符串(对多选项卡测试或默认值自然出现在页面上的情况很有帮助)。
  • 复制 值到剪贴板。
  • 更改需要 Reload

3. 网络消息 (postMessage)

Messages 子选项卡记录每个 window.postMessage() 调用,显示 originsourcedata 的使用情况。

修改并重新发送:双击一条消息,编辑 data,然后按 Send(类似 Burp Repeater)。

自动模糊:在设置中启用 Postmessage interception ➜ Auto-mutate,让 DOM Invader 生成基于 canary 的有效负载并重放给处理程序。

字段含义回顾:

  • origin – 处理程序是否验证 event.origin
  • data – 有效负载位置。如果未使用,则接收器无关紧要。
  • source – iframe / window 引用验证;通常比严格的源检查弱。

4. 原型污染

Settings ➜ Attack types ➜ Prototype pollution 下启用。

工作流程:

  1. 浏览 – DOM Invader 标记在 URL/query/hash 或 JSON 网络消息中找到的污染 __proto__constructorprototype)。
  2. 测试 – 点击 Test 打开一个 PoC 选项卡,其中应该存在 Object.prototype.testproperty
javascript
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
  1. 扫描小工具 – DOM Invader 暴力破解属性名称并跟踪是否有任何最终进入危险接收器(例如 innerHTML)。
  2. 利用 – 当找到小工具-接收器链时,会出现一个 Exploit 按钮,将源 + 小工具 + 接收器链在一起以触发警报。

高级设置(齿轮图标):

  • 移除 CSP / X-Frame-Options 以保持 iframe 在小工具扫描期间可用。
  • 在单独的帧中扫描技术 以避免 __proto__constructor 的干扰。
  • 单独禁用技术 以适应脆弱的应用。

5. DOM 覆盖

切换 Attack types ➜ DOM clobbering。DOM Invader 监控动态创建的元素,其 id/name 属性与全局变量或表单对象冲突(<input name="location"> → 覆盖 window.location)。每当用户控制的标记导致变量替换时,会生成一个条目。


6. 设置概述 (2025)

DOM Invader 现在分为 Main / Attack Types / Misc / Canary 类别。

  1. Main
  • Enable DOM Invader – 全局开关。
  • Postmessage interception – 开启/关闭消息记录;子开关用于自动变更。
  • Custom Sources/Sinks齿轮图标 ➜ 启用/禁用特定接收器(例如 evalsetAttribute),可能会破坏应用。
  1. Attack Types
  • Prototype pollution(具有每种技术的设置)。
  • DOM clobbering
  1. Misc
  • Redirect prevention – 阻止客户端重定向,以免接收器列表丢失。
  • Breakpoint before redirect – 在重定向前暂停 JS 以进行调用栈检查。
  • Inject canary into all sources – 自动在所有地方注入 canary;可配置的源/参数允许列表。
  1. Canary
  • 查看 / 随机化 / 设置自定义 canary;复制到剪贴板。更改需要浏览器重载。

7. 提示与良好实践

  • 使用不同的 canary – 避免使用常见字符串如 test,否则会出现误报。
  • 暂时禁用重型接收器evalinnerHTML),如果它们在导航期间破坏页面功能。
  • 与 Burp Repeater & Proxy 结合使用 – 复制产生脆弱状态的浏览器请求/响应,并制作最终的利用 URL。
  • 记住框架范围 – 源/接收器按浏览上下文显示;iframe 内的漏洞可能需要手动关注。
  • 导出证据 – 右键点击 DOM Invader 面板 ➜ 保存截图 以包含在报告中。

References

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks