fcavallarin/domdig
GitHub: fcavallarin/domdig
专门针对单页应用的 DOM XSS 扫描器,在 Chromium 浏览器中运行以递归爬取和检测多种前端漏洞。
Stars: 416 | Forks: 48
# DOM挖掘
DOMDig 是一个在 Chromium 网络浏览器内部运行的 DOM XSS 扫描器,它可以递归扫描单页应用程序 (SPA)。
与其他扫描器不同,DOMDig 可以通过跟踪 DOM 修改和 XHR/fetch/websocket 请求来抓取任何 Web 应用程序(包括 gmail),并且可以通过触发事件来模拟真实用户交互。在此过程中,XSS 载荷被放入输入字段,并跟踪其执行情况,以查找注入点和相关的 URL 修改。
它基于 [htcrawl](https://htcrawl.org),这是一个功能强大的 node 库,足以轻松抓取 gmail 账户。
# 主要功能
- 在真实浏览器 (Chromium) 中运行
- 递归 DOM 抓取引擎
- 处理 XHR、fetch、JSONP 和 websocket 请求
- 支持 cookies、代理、自定义标头、HTTP 认证等
- 可编写脚本的登录序列
- 序列记录器
- Postmessage 模糊测试器
# 快速入门
## 安装
```
git clone https://github.com/fcavallarin/domdig.git
cd domdig && npm i && cd ..
node domdig/domdig.js
```
## 示例
```
node domdig.js -c 'foo=bar' -p http:127.0.0.1:8080 https://fcvl.net/htcap/scanme/domxss.php
```
# 执行的检查
DOMDig 可以执行三种不同的检查:
1. DOM XSS
2. 存储型 DOM XSS
3. 模板注入
4. postMessage XSS
## DOM型XSS
DOM XSS 检查可以配置不同的模式,启用不同的行为。默认情况下,所有模式均已启用。
这些模式包括:
1. domscan
2. fuzz
### DOM扫描
它抓取 DOM 以搜索用户可以注入 JavaScript 代码的位置,例如文本框。它可以发现扫描器无法猜测的注入点。一个例子是搜索功能,它获取输入框的文本,为了触发搜索,将其放入 URL 的哈希值中作为 JSON 字符串。
### 模糊测试
它对 URL(查询参数和哈希值)进行模糊测试,以查看我们的代码是否在页面加载时执行。如果没有代码执行,它会抓取 DOM 并触发 HTML 事件,希望能找到执行我们载荷的内容。
它还可以发现经典的反射型 XSS。
## 存储型 DOM XSS
执行 DOM XSS 检查后,DOMDig 会重新抓取同一页面,等待先前使用的载荷执行。如果发现一个,则意味着它可以幸免于页面重新加载。
## 模板注入
搜索模板占位符(例如 `{var1}`)可能被评估为 JavaScript 代码的位置。
# 报告的漏洞
每个报告的漏洞包含以下字段:
1. **type**:漏洞类型,可以是 `domxss`、`stored` 或 `templateinj`
2. **url**:发现漏洞时的页面 URL
3. **payload**:使用的载荷
4. **element**:我们注入载荷的 HTML 元素的 CSS 选择器(如果有)
5. **description**:文本描述
6. **confirmed**:当 URL 包含攻击载荷时,漏洞被视为已确认。如果未确认,则意味着代码已成功执行,但可能需要手动分析以了解注入载荷与 URL 结构之间的关系。
# 抓取引擎
DOMDig 使用 [htcrawl](https://htcrawl.org) 作为抓取引擎。
该图显示了递归抓取过程。
.
下面的视频展示了引擎抓取 gmail 的过程。抓取持续了数小时,捕获了大约 3000 个 XHR 请求。
[](https://www.youtube.com/watch?v=5FLmWjKE2JI "HTCAP 抓取 Gmail")
# 登录序列
登录序列(或初始序列)是一个 json 对象,包含扫描开始前要执行的操作列表。
列表的每个元素都是一个数组,其中第一个元素是要执行的操作名称,其余元素是这些操作的“参数”。
操作包括:
- navigate <url>
- write <selector> <text>
- select <selector> <value>
- click <selector>
- clickToNavigate <selector>
- sleep <seconds>
- setTarget <selector>
## 示例
```
[
["navigate", "https://target.local/login-page"],
["write", "#username", "demo"],
["write", "#password", "demo"],
["sleep", 2],
["clickToNavigate", "#btn-login"]
]
```
# 载荷文件
载荷可以从 json 文件(-P 选项)作为字符串数组加载。要构建自定义载荷,必须使用字符串 `window.___xssSink({0})` 作为要执行的函数(而不是经典的 `alert(1)`)。
## 示例
```
[
';window.___xssSink({0});',
'
'
]
```
标签:API密钥检测, BeEF, Chromium, CISA项目, DOM XSS, GNU通用公共许可证, MITM代理, Node.js, SPA, Web安全, 单页应用, 安全测试, 开源安全工具, 攻击性安全, 爬虫, 结构化查询, 网络安全, 自动化安全, 自定义脚本, 自定义脚本, 蓝队分析, 跨站脚本攻击, 输入验证, 逆向工程平台, 隐私保护