hacktricks/pentesting-web/xss-cross-site-scripting/dom-invader.md

7.2 KiB
Raw Permalink Blame History

DOM Invader

{% hint style="success" %} 学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks
{% endhint %}

DOM Invader

DOM Invader 是一个安装在 Burp 内置浏览器中的浏览器工具。它通过各种来源和接收点(包括网络消息和原型污染)来检测 DOM XSS 漏洞。该工具作为扩展预安装。

DOM Invader 在浏览器的 DevTools 面板中集成了一个选项卡,支持以下功能:

  1. 识别网页上的可控接收点,用于 DOM XSS 测试,提供上下文和清理细节。
  2. 记录、编辑和重新发送通过 postMessage() 方法发送的网络消息,用于 DOM XSS 测试。DOM Invader 还可以使用特别构造的网络消息自动检测漏洞。
  3. 检测 客户端原型污染 来源,并扫描发送到风险接收点的可控小工具。
  4. 识别 DOM 覆盖漏洞

启用它

在 Burp 的内置浏览器中,转到 Burp 扩展 并启用它:

现在刷新页面,在 Dev Tools 中你会找到 DOM Invader 选项卡:

注入一个 Canary

在前面的图像中,你可以看到一个 随机字符组,这就是 Canary。你现在应该开始在网页的不同部分参数、表单、URL...)中 注入并每次点击搜索。DOM Invader 将检查 canary 是否结束于任何有趣的接收点,可能被利用。

此外,选项 Inject URL params 和 Inject forms 将自动打开一个 新选项卡注入 每个找到的 URL 参数和 表单 中的 canary

注入一个空的 Canary

如果你只想找到页面可能存在的潜在接收点,即使它们不可利用,你可以 搜索一个空的 canary

发送消息

DOM Invader 允许使用网络消息测试 DOM XSS具有以下功能

  1. 记录通过 postMessage() 发送的网络消息,类似于 Burp Proxy 的 HTTP 请求/响应历史记录日志。
  2. 修改重新发送 网络消息以手动测试 DOM XSS类似于 Burp Repeater 的功能。
  3. 自动更改 和发送网络消息以探测 DOM XSS。

消息详情

通过点击每条消息,可以查看详细信息,包括客户端 JavaScript 是否访问了消息的 origindatasource 属性。

  • origin : 如果 消息的来源信息未检查,你可能能够从 任意外部域 向事件处理程序发送跨域消息。但如果进行了检查,仍然可能不安全。
  • data: 这是发送有效负载的地方。如果此数据未使用,则接收点无用。
  • source: 评估源属性,通常引用一个 iframe是否经过验证而不是来源。即使进行了检查也不能保证验证无法被绕过。

回复消息

  1. 消息 视图中,点击任何消息以打开消息详情对话框。
  2. 根据需要编辑 数据 字段。
  3. 点击 发送

原型污染

DOM Invader 还可以搜索 原型污染漏洞。首先,你需要启用它:

然后,它将 搜索来源,使你能够向 Object.prototype 添加任意属性。

如果找到任何内容,将出现一个 测试 按钮以 测试找到的来源。点击它,将出现一个新选项卡,在控制台中创建一个对象并检查 testproperty 是否存在:

let b = {}
b.testproperty

一旦你找到一个源,你可以扫描小工具

  1. 当点击扫描小工具按钮时DOM Invader会在DOM视图中任何已识别的原型污染源旁边打开一个新标签。然后开始扫描合适的小工具。
  2. 与此同时,在同一标签中,DOM Invader标签应在DevTools面板中打开。扫描完成后通过已识别的小工具访问的任何接收点将在DOM视图中显示。例如,下面的示例中显示了一个名为html的小工具属性被传递到innerHTML接收点。

DOM覆盖

在前面的图像中可以看到DOM覆盖扫描可以被启用。一旦完成DOM Invader将开始搜索DOM覆盖漏洞

参考

{% hint style="success" %} 学习与实践AWS黑客技术HackTricks培训AWS红队专家ARTE
学习与实践GCP黑客技术HackTricks培训GCP红队专家GRTE

支持HackTricks
{% endhint %}