Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md'

This commit is contained in:
Translator 2025-08-05 00:33:35 +00:00
parent 43c40d49b5
commit 950f13a43c

View File

@ -4,80 +4,127 @@
## DOM Invader
DOM Invader 是一个安装在 Burp 内置浏览器中的浏览器工具。它通过各种源和接收器,包括网络消息和原型污染,帮助**检测 DOM XSS 漏洞**。该工具作为扩展预安装
DOM Invader 是一个安装在 **Burp Suite 内置 Chromium 浏览器** 中的浏览器工具。它通过自动 **插桩 JavaScript 源和接收器** 来帮助 **检测 DOM XSS 和其他客户端漏洞**原型污染、DOM 覆盖等)。该扩展随 Burp 一起提供,只需启用即可
DOM Invader 在浏览器的 DevTools 面板中集成了一个选项卡,支持以下功能
DOM Invader 在浏览器的 DevTools 面板中添加了一个选项卡,让您可以
1. **识别网页上可控的接收器**以进行 DOM XSS 测试,提供上下文和清理细节。
2. **记录、编辑和重新发送通过 `postMessage()` 方法发送的网络消息**以进行 DOM XSS 测试。DOM Invader 还可以使用特别构造的网络消息自动检测漏洞。
3. 检测 **客户端原型污染** 源并扫描发送到风险接收器的可控小工具。
4. 识别 **DOM clobbering 漏洞**
1. **实时识别可控接收器**包括上下文属性、HTML、URL、JS和应用的清理。
2. **记录、编辑和重新发送 `postMessage()` 网络消息**,或让扩展自动变更它们。
3. **检测客户端原型污染源并扫描 gadget→sink 链**,实时生成 PoC。
4. **查找 DOM 覆盖向量**(例如 `id` / `name` 冲突,覆盖全局变量)。
5. 通过丰富的设置 UI **微调行为**(自定义 canary、自动注入、重定向阻止、源/接收器列表等)。
### 启用它
---
在 Burp 的内置浏览器中,转到 **Burp 扩展** 并启用它:
### 1. 启用它
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
现在刷新页面,在 **Dev Tools** 中你会找到 **DOM Invader 选项卡:**
1. 打开 **Proxy ➜ Intercept ➜ Open Browser**Burp 的嵌入式浏览器)。
2. 点击 **Burp Suite** 徽标(右上角)。如果它被隐藏,先点击拼图块。
3. 在 **DOM Invader** 选项卡中,将 **Enable DOM Invader** 切换为开启并按 **Reload**
4. 打开 DevTools `F12` / 右键 ➜ 检查)并停靠。一个新的 **DOM Invader** 面板出现。
<figure><img src="../../images/image (695).png" alt=""><figcaption></figcaption></figure>
> Burp 会根据配置文件记住状态。如有需要,在 *Settings ➜ Tools ➜ Burps browser ➜ Store settings...* 下禁用它。
### 注入金丝雀
### 2. 注入一个 Canary
在前面的图像中,你可以看到一个 **随机字符组,即金丝雀**。你现在应该开始在网页的不同部分参数、表单、URL...)中 **注入**并每次点击搜索。DOM Invader 将检查 **金丝雀是否结束于任何有趣的接收器**,可能被利用。
一个 **canary** 是一个随机标记字符串(例如 `xh9XKYlV`DOM Invader 会跟踪它。您可以:
此外,选项 **Inject URL params** 和 Inject forms 将自动打开一个 **新选项卡****注入** 每个找到的 **URL** 参数和 **表单** 中的 **金丝雀**
* **复制** 它并手动注入到参数、表单、Web-Socket 帧、网络消息等中。
* 使用 **Inject URL params / Inject forms** 按钮打开一个新选项卡canary 会自动附加到每个查询键/值或表单字段。
* 搜索 **空 canary** 以揭示所有接收器,无论其可利用性如何(非常适合侦察)。
### 注入空金丝雀
#### 自定义 canary (2025+)
如果你只是想找到页面可能存在的潜在接收器,即使它们不可利用,你可以 **搜索一个空金丝雀**
Burp 2024.12 引入了 **Canary settings**Burp 徽标 ➜ DOM Invader ➜ Canary。您可以
### 发送消息
* **随机化** 或设置 **自定义字符串**(对多选项卡测试或默认值自然出现在页面上的情况很有帮助)。
* **复制** 值到剪贴板。
* 更改需要 **Reload**
DOM Invader 允许使用网络消息测试 DOM XSS具有以下功能
---
1. **记录通过 `postMessage()` 发送的网络消息**,类似于 Burp Proxy 的 HTTP 请求/响应历史记录日志。
2. **修改****重新发送** 网络消息以手动测试 DOM XSS类似于 Burp Repeater 的功能。
3. **自动更改** 和发送网络消息以探测 DOM XSS。
### 3. 网络消息 (`postMessage`)
#### 消息详情
**Messages** 子选项卡记录每个 `window.postMessage()` 调用,显示 `origin``source``data` 的使用情况。
通过点击每条消息,可以查看详细信息,包括客户端 JavaScript 是否访问了消息的 `origin``data``source` 属性
**修改并重新发送**:双击一条消息,编辑 `data`,然后按 **Send**(类似 Burp Repeater
- **`origin`** : 如果 **消息的来源信息未检查**,你可能能够从 **任意外部域** 向事件处理程序发送跨域消息。但如果进行了检查,仍然可能不安全。
- **`data`**: 这是发送有效负载的地方。如果此数据未使用,则接收器无用。
- **`source`**: 评估源属性,通常引用一个 iframe是否经过验证而不是来源。即使进行了检查也不能保证验证无法被绕过。
**自动模糊**:在设置中启用 **Postmessage interception ➜ Auto-mutate**,让 DOM Invader 生成基于 canary 的有效负载并重放给处理程序。
#### 回复消息
字段含义回顾:
1. 从 **Messages** 视图中,点击任何消息以打开消息详情对话框
2. 根据需要编辑 **Data** 字段
3. 点击 **Send**
* **origin** 处理程序是否验证 `event.origin`
* **data** 有效负载位置。如果未使用,则接收器无关紧要
* **source** iframe / window 引用验证;通常比严格的源检查弱
### 原型污染
---
DOM Invader 还可以搜索 **原型污染漏洞**。首先,你需要启用它:
### 4. 原型污染
<figure><img src="../../images/image (1026).png" alt=""><figcaption></figcaption></figure>
**Settings ➜ Attack types ➜ Prototype pollution** 下启用。
然后,它将 **搜索源**,使你能够向 **`Object.prototype`** 添加任意属性。
工作流程:
1. **浏览** DOM Invader 标记在 URL/query/hash 或 JSON 网络消息中找到的污染 **源**`__proto__``constructor``prototype`)。
2. **测试** 点击 *Test* 打开一个 PoC 选项卡,其中应该存在 `Object.prototype.testproperty`
如果找到任何内容,将出现一个 **Test** 按钮以 **测试找到的源**。点击它,将出现一个新选项卡,在控制台中创建一个对象并检查 `testproperty` 是否存在:
```javascript
let b = {}
b.testproperty
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
```
一旦你找到一个源,你可以**扫描小工具**
3. **扫描小工具** DOM Invader 暴力破解属性名称并跟踪是否有任何最终进入危险接收器(例如 `innerHTML`)。
4. **利用** 当找到小工具-接收器链时,会出现一个 *Exploit* 按钮,将源 + 小工具 + 接收器链在一起以触发警报。
1. 当点击**扫描小工具**按钮时DOM Invader会在**DOM**视图中任何已识别的原型污染源旁边打开一个新标签。然后开始扫描合适的小工具。
2. 与此同时,在同一标签中,**DOM Invader**标签应在DevTools面板中打开。扫描完成后通过已识别的小工具访问的任何接收点将在**DOM**视图中显示。例如,下面的示例中显示了一个名为`html`的小工具属性被传递到`innerHTML`接收点。
高级设置(齿轮图标):
## DOM污染
* **移除 CSP / X-Frame-Options** 以保持 iframe 在小工具扫描期间可用。
* **在单独的帧中扫描技术** 以避免 `__proto__``constructor` 的干扰。
* **单独禁用技术** 以适应脆弱的应用。
在前面的图像中可以看到可以开启DOM污染扫描。一旦完成**DOM Invader将开始搜索DOM污染漏洞**。
---
## 参考
### 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** *齿轮图标* ➜ 启用/禁用特定接收器(例如 `eval``setAttribute`),可能会破坏应用。
2. **Attack Types**
* **Prototype pollution**(具有每种技术的设置)。
* **DOM clobbering**
3. **Misc**
* **Redirect prevention** 阻止客户端重定向,以免接收器列表丢失。
* **Breakpoint before redirect** 在重定向前暂停 JS 以进行调用栈检查。
* **Inject canary into all sources** 自动在所有地方注入 canary可配置的源/参数允许列表。
4. **Canary**
* 查看 / 随机化 / 设置自定义 canary复制到剪贴板。更改需要浏览器重载。
---
### 7. 提示与良好实践
* **使用不同的 canary** 避免使用常见字符串如 `test`,否则会出现误报。
* **暂时禁用重型接收器**`eval``innerHTML`),如果它们在导航期间破坏页面功能。
* **与 Burp Repeater & Proxy 结合使用** 复制产生脆弱状态的浏览器请求/响应,并制作最终的利用 URL。
* **记住框架范围** 源/接收器按浏览上下文显示iframe 内的漏洞可能需要手动关注。
* **导出证据** 右键点击 DOM Invader 面板 ➜ *保存截图* 以包含在报告中。
---
## References
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader](https://portswigger.net/burp/documentation/desktop/tools/dom-invader)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling)
@ -85,5 +132,7 @@ b.testproperty
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc)
{{#include ../../banners/hacktricks-training.md}}