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) 作为抓取引擎。 该图显示了递归抓取过程。 ![SPA 抓取流程图](https://htcrawl.org/img/htcap-flowchart.png). 下面的视频展示了引擎抓取 gmail 的过程。抓取持续了数小时,捕获了大约 3000 个 XHR 请求。 [![抓取 gmail](https://fcvl.net/htcap/img/htcap-gmail-video.png)](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安全, 单页应用, 安全测试, 开源安全工具, 攻击性安全, 爬虫, 结构化查询, 网络安全, 自动化安全, 自定义脚本, 自定义脚本, 蓝队分析, 跨站脚本攻击, 输入验证, 逆向工程平台, 隐私保护