mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md'
This commit is contained in:
parent
43c40d49b5
commit
950f13a43c
@ -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 ➜ Burp’s 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user