DOMDig:一款针对单页应用的DOM XSS扫描工具
字数 1046 2025-08-12 11:33:45
DOMDig:单页应用DOM XSS扫描工具详解
工具概述
DOMDig是一款专为单页应用程序(SPA)设计的DOM XSS扫描工具,运行于Chromium浏览器环境中。与其他扫描工具不同,DOMDig通过追踪DOM树修改行为和网络请求(XHR/fetch/websocket)来爬取Web应用程序,包括复杂应用如Gmail。
核心特性
- 真实浏览器环境:基于Chromium运行,能够准确模拟用户交互
- 递归DOM爬取引擎:深度扫描单页应用结构
- 全面请求支持:处理XHR、fetch和websocket请求
- 高级配置选项:
- Cookie管理
- 代理设置
- 自定义Header
- HTTP认证
- 可编程登录序列:支持脚本化认证流程
技术架构
DOMDig基于htcrawl节点库构建,该库同样被htcap工具使用,具有强大的爬取能力,特别适合处理如Gmail等复杂应用。
安装指南
-
克隆项目仓库:
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://htcap.org/scanme/domxss.php
参数说明:
-c:设置Cookie-p:指定代理
爬取机制
DOMDig采用递归爬取策略:
- 追踪DOM树的所有修改
- 监控所有XHR/fetch/websocket请求
- 自动触发事件模拟真实用户交互
- 注入XSS Payload并跟踪执行情况
登录序列配置
登录序列(初始化序列)是JSON格式的指令集,在扫描开始前执行:
[
["write", "#username", "demo"],
["write", "#password", "demo"],
["clickToNavigate", "#btn-login"]
]
支持的操作类型:
write <selector> <text>:向指定元素写入文本click <selector>:点击元素clickToNavigate <selector>:点击预期会导致页面跳转的元素sleep <seconds>:等待指定秒数
Payload配置
通过JSON文件(-P选项)加载Payload数组,格式要求:
[
";window.___xssSink({0});",
""
]
关键要求:
- 必须包含
window.___xssSink({0})函数调用 - 可使用常见XSS向量如
alert(1)等
性能表现
在测试案例中,DOMDig展示了强大能力:
- 持续爬取数小时
- 捕获约3000个XHR请求(Gmail案例)
- 演示视频:YouTube链接
许可证
DOMDig遵循Apache-3.0开源许可证协议。
项目地址
GitHub仓库:DOMDig
最佳实践
- 针对复杂SPA时,配置详细的登录序列
- 根据目标应用特点定制Payload
- 对于长时间运行的扫描,使用代理监控
- 结合DOM修改和网络请求分析结果
- 对关键业务功能进行重点测试