kevin-mizu/domloggerpp

GitHub: kevin-mizu/domloggerpp

一款可高度定制化的浏览器扩展,用于监控、拦截和调试 JavaScript Sink,帮助安全研究员快速定位 DOM XSS 等客户端漏洞。

Stars: 774 | Forks: 84


A browser extension that allows you to monitor, intercept, and debug JavaScript sinks based on customizable configurations.
GitHub release (latest by date)

## 📦 安装 **从扩展商店安装**: - Firefox: https://addons.mozilla.org/en-US/firefox/addon/domloggerpp - Chromium: https://chrome.google.com/webstore/detail/domlogger%2B%2B/lkpfjhmpbmpflldmdpdoabimdbaclolp - Safari: 尚未推出。 **手动安装**: 下载最新版本:https://github.com/kevin-mizu/domloggerpp/releases/ - Firefox: 访问 `about:debugging#/runtime/this-firefox` 并点击 `Load Temporary Add-on`。

- Chromium: 访问 `chrome://extensions/`,启用 `Developer mode` 并点击 `Load unpacked`。

*如果您想自行构建扩展,请查看 [app](./app/) 文件夹。*
## 🌟 功能特性 - [x] 基于正则表达式的域名管理。 - [x] 灵活的 Hook 配置(`class`、`function`、`attribute`、`event`)。 - [x] 基于正则表达式的 Hook 参数和堆栈跟踪过滤(`match`、`!match`、`matchTrace`、`!matchTrace`)。 - [x] 动态正则生成(`exec:`)。 - [x] 动态更新 Sink 参数(`beforeEnter`;`afterEnter`)。 - [x] 可定制的通知系统(`alert`、`notification`)。 - [x] 必需的 Hook 日志记录条件(`requiredHook`)。 - [x] 按需调试断点。 - [x] 集成的 Devtools 日志面板。 - [x] 响应头过滤。 - [x] 通过 Webhook 进行远程日志记录。 - [x] 广泛的主题定制。
## 📝 使用示例 https://github.com/kevin-mizu/domloggerpp/assets/48991194/d6ac9f90-0f44-4cd2-a5e6-890cd44b0aeb
## 🛠️ Devtools ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e7ae68d76b231412.png) 1. `Custom filter buttons`(自定义过滤按钮):根据您的自定义设置动态生成,这些按钮有助于日志过滤。 2. `Data/Canary search bar`(数据/Canary 搜索栏):使用与 Sink 参数数据相关的特定条件,轻松过滤和高亮日志。 3. `Advanced column search`(高级列搜索):根据特定的列条件(例如 `sink=innerHTML;frame=top`)定制搜索,以获得更精确的结果。 4. `Global search bar`(全局搜索栏):此默认数据表功能允许在所有列中进行搜索。 5. `Debug button`(调试按钮):直接导航到触发 Sink 的页面,并自动设置断点以便调试。 6. `Log data management buttons`(日志数据管理按钮): - 导入 JSON 日志数据。 - 清除现有日志数据。 - 导出 JSON 格式的日志数据。
## 💬 弹出窗口

- `Domains`:使用正则表达式定义允许的域名,以指定您希望从哪些站点接收日志。 - `Hooking`:选择要应用于所选网站的 Hook 配置。 - `Misc`:启用或禁用特定的配置设置。 * `PwnFox support`:允许所有 [PwnFox](https://github.com/yeswehack/PwnFox) 容器(仅限 Firefox)。 * `Remove response headers`:根据您的配置文件移除响应头。
## ⚙️ 设置 https://github.com/kevin-mizu/domloggerpp/assets/48991194/0827eef3-6c16-42fc-b84d-d8ea16def6bf - `Settings`:管理您的 Hook 配置 —— 根据需要创建、编辑、修改和删除。 - `Domains`:轻松管理允许的域名,类似于弹出菜单中的功能。 - `Webhook`:指定一个远程主机,该主机将根据您的配置设置接收日志。 - `Devtools`:如果您正在使用后端服务器并且不希望在 devtool 面板中显示信息,此部分允许您禁用该功能。 - `Table`:个性化 devtools 表格以符合您的偏好。 - `Customize`:个性化应用程序的主题以符合您的偏好。
## 🔗 Hook 配置 ### 全局 JSON 结构 ``` { "_description": "JSON config example", "hooks": { "category": { "type_1": [ "sink_1", "sink_2" ], "type_2": [ "sink_1", "sink_2" ] } }, "config": { "*": {}, "sink_1": { "match": [ "regex_1", "regex_2", "exec:return 'regex_3'" ], "!match": [ "regex_1", "regex_2", "exec:return 'regex_3'" ], "matchTrace": [ "regex_1", "regex_2", "exec:return 'regex_3'" ], "!matchTrace": [ "regex_1", "regex_2", "exec:return 'regex_3'" ], "beforeEnter": "return args", "afterEnter": "return args", "requiredHook": [ "type_2" ], "alert": { "match": [ "regex_1", "regex_2", "exec:return 'regex_3'" ], "!match": [ "regex_1", "regex_2", "exec:return 'regex_3'" ], "notification": true }, "showThis": true } }, "globals": { "Blacklist": [ "api", "app" ] }, "onload": "console.log(1)", "removeHeaders": [ "content-security-policy" ] } ``` *配置中指定的所有键均非强制;您可以根据特定需求管理它们,或根据需要省略。* ### _描述 此键旨在提供一种在配置 JSON 中插入注释的方式。只要 JSON 保持有效,该值可以是任何内容。 ### Hooks - `category`:充当 Devtools 面板中的过滤器,帮助您组织和识别 Sink。 - `type_X`:指定您要定位的 Sink 类型。可能的类型包括: + class + attribute + function + event - `sink_X`:表示需要被 Hook 的 Sink 名称,其表示法因类型而异: + `class` & `function`:直接使用目标名称,例如 `URLSearchParams`。 + `event`:仅使用事件名称。例如,对于 `onmessage` 事件,只需使用 `message`。 + `attribute`:根据需要添加前缀 `set:` 或 `get:`。例如 `set:Element.prototype.innerHTML`。 ### Config - `sink`:指要配置的目标 Sink。它必须存在于 hooks 部分中。 - `match` || `matchTrace`:正则表达式数组。Sink 的 `parameters` || `stack trace` 必须符合这些模式。 - `!match` || `!matchTrace`:正则表达式数组,Sink 的 `parameters` || `stack trace` 不应匹配这些模式。 - `beforeEnter` || `afterEnter`:此键应包含一个原始 JavaScript 函数,该函数将在 Sink 本身之前/之后执行(以及在 DOMLogger++ 进行任何检查之前)。该函数接收 3 个参数:`target`、`thisArg` 和 `args`,它们均引用当前识别的 Sink。例如,在 `eval('2')` 上使用 `return [args[0] + '*2']` 将导致 `4`。 - `requiredHook`:指定必须在目标 Sink 开始记录信息之前至少触发一次的 Hook 或 Sink 列表。示例可在 [leverage-innerHTML.json](./configs/leverage-innerHTML.json) 配置文件中找到。 - `alert`:根据特定条件在扩展图标上触发警报徽章。 + `match` & `!match`:Sink 参数分别必须符合或避免的额外正则表达式,以触发警报。 + `notification`:如果设置为 `true`,当满足所有条件时将弹出通知。 - `showThis`:如果设置为 `true`,将在函数调用的上下文中记录 `this=` 对象。 自 `1.0.4` 版本起,现在可以使用 `exec:` 正则指令,它允许您从 JavaScript 执行生成正则表达式。例如:`exec:return document.location.pathname`。 *有关更详细的示例和见解,请参阅 [configs](./configs/) 文件夹。* ### globals 此键的内容可在 `domlogger.globals` 变量中访问。它旨在方便修改 `exec:`、`beforeEnter` 或 `afterEnter` 指令中使用的特定变量。使用示例可在 [cspt.json](./configs/cspt.json) 配置文件中找到。 ### onload 此键应包含一个原始 JavaScript 函数,该函数将在 DOMLogger++ 加载后执行。 ### removeHeaders 通过此键,您可以提供一个响应头列表(小写),如果启用了移除标头功能,您希望移除这些标头。这在测试期间移除安全标头时特别有用。
## ⌨ 快捷键 https://github.com/user-attachments/assets/9855e9e9-9c98-4284-821c-52d877390569 **在任意页面** - `[ALT] + [SHIFT] + [P]`:打开弹出窗口。 - `[ALT] + [SHIFT] + [O]`:打开选项页面。 **在选项配置编辑器中** - `[ALT] + [A]`:添加新配置。 - `[ALT] + [R]`:重命名配置。 - `[ALT] + [SHIFT] + [DELETE]`:删除配置。 - `[ALT] + [A]`:添加新配置。
## 🧰 研讨会 - [GreHack](https://x.com/GrehackConf) 2024 ([source](./workshops/grehack2024/)): http://domloggerpp-workshop.mizu.re:5173/
## 🖥️ 后端 尚未开发。
## 🗺️ 路线图 - 建立集成的后端服务器。 - 改进 Devtools 面板的缩放功能。 - 寻找一种 Hook document.location 属性的方法。 - 简化无头浏览器的兼容性。 - 修复 Reflect.apply、this.nodeName.toLowerCase... Hook 导致的 DOS 问题。 - 修复当 Sink 在 iframe 内触发时的 Devtools 跳转按钮问题(它应重定向到顶层框架)。 - 寻找一种方法来避免 document.write 导致扩展崩溃。 - 找出为什么 Hook eval 会在 Cloudflare 挑战中导致崩溃(循环调用 eval getter...)。
## 🤝 贡献者 许多人帮助并将继续帮助 DOMLogger++ 成长为现在的样子,需要在此表示感谢! [villu164](https://github.com/villu164), [@abdilahrf](https://x.com/abdilahrf), [@busf4ctor](https://x.com/busf4ctor), [@_Worty](https://x.com/_Worty), [owalid](https://github.com/owalid), [@xanhacks](https://twitter.com/xanhacks), [@kire_devs_hacks](https://twitter.com/kire_devs_hacks), [aristosMiliaressis](https://github.com/aristosMiliaressis), [@MtnBer](https://twitter.com/MtnBer), [@FeelProud_sec](https://twitter.com/FeelProud_sec), [@jonathan404_](https://x.com/jonathan404_), [@PikuHaku](https://x.com/PikuHaku), [@aituglo](https://x.com/aituglo), [@xnl_h4ck3r](https://x.com/xnl_h4ck3r), [AetherBlack](https://github.com/AetherBlack), [@me0wday](https://x.com/me0wday), [@k1ng_pr4wn](https://x.com/k1ng_pr4wn) *特别感谢 [@BitK\_](https://twitter.com/BitK_) 在 [Pwnfox](https://github.com/yeswehack/PwnFox) 中结构良好的代码,它帮助我很好地理解了浏览器扩展 ❤️*
标签:Chromium, DevTools, DOM XSS, Firefox, Homebrew安装, JavaScript Hook, Sink 监控, Web 安全, XSS 调试, 参数拦截, 可定制配置, 堆栈跟踪, 多平台, 数据可视化, 正则匹配, 浏览器扩展, 自定义脚本, 自定义脚本