rafashaalfiandi/XSSentinel

GitHub: rafashaalfiandi/XSSentinel

一款专注的 XSS fuzz 扫描器,结合智能 payload 策略、反射上下文分析与可选浏览器验证来检测反射型和 DOM 型跨站脚本漏洞。

Stars: 0 | Forks: 0


 __  __ ____ ____             _   _            _

 \ \/ // ___/ ___|  ___ _ __ | |_(_)_ __   ___| |

  \  / \___ \___ \ / _ \ '_ \| __| | '_ \ / _ \ |

  /  \  ___) |__) |  __/ | | | |_| | | | |  __/ |

 /_/\_\|____/____/ \___|_| |_|\__|_|_| |_|\___|_|

XSSentinel

一款专注的 XSS fuzz 扫描器,具备智能 payload 选择、浏览器验证、CSP 检查、WAF 提示以及 DOM sink 分析功能。

Python Platform Security

## 概述 XSSentinel 通过将高信号 payload fuzz 与轻量级目标情报相结合,帮助测试反射型和 DOM 型 XSS 行为。它可以检查反射上下文、分析 CSP 状态、识别类似 WAF 的信号,并可选择通过本地 Chromium 或 Playwright 确认浏览器执行情况。 默认的 payload 来源是 `xss-payloads.txt`。在智能模式下,XSSentinel 会扩展并优先处理该文件,首先运行价值最高的 payload,如果第一批次中未找到经浏览器确认的结果,则继续运行剩余的 payload。 ## 功能 - 从本地 payload 文件中进行智能 payload 优先级排序和扩展。 - 自动发现 GET/POST 表单和查询参数。 - 对 script、属性、文本、注释和原始响应位置的 HTML 反射上下文进行分析。 - 带有简洁风险提示的 CSP 分析。 - 基于 header、响应码和拦截文本的 WAF 信号检测。 - 针对常见 JavaScript source 和 sink 的 DOM sink 分析。 - 可选的浏览器确认功能,用于验证 alert、confirm、prompt 和对话框的执行。 ## 要求 必需: - Linux shell 环境。 - Python 3.10 或更高版本。 - 访问目标应用程序的网络权限。 - 测试目标应用程序的授权。 - 本代码库中包含的本地数据文件:`xss-payloads.txt`、`useragents.txt` 以及 `xssentinel_core/` 包。 可选但推荐: - Chromium 或 Google Chrome,用于基于浏览器的 XSS 确认。扫描器会在 `PATH` 中查找 `chromium`、`chromium-browser`、`google-chrome` 或 `google-chrome-stable`。 - 带有 Chromium 支持的 Playwright。如果找不到本地 Chromium,XSSentinel 可以在 Playwright 安装且可用时使用它。 基本扫描不需要浏览器支持。如果没有 Chromium 或 Playwright,XSSentinel 仍会执行 HTTP 请求、反射分析、CSP 检查、WAF 检测和 DOM sink 分析,但无法在真实浏览器中确认 JavaScript 对话框的执行。 ## 安装说明 ``` git clone https://github.com/rafashaalfiandi/XSSentinel.git cd XSSentinel chmod +x install.sh ./install.sh ``` 安装程序会将该工具复制到 `~/.local/share/xssentinel`,并在 `~/.local/bin/xssentinel` 处创建命令包装器。 如果安装后该命令不可用,请将以下内容添加到你的 shell 配置中: ``` export PATH="$HOME/.local/bin:$PATH" ``` ## 使用说明 交互式运行扫描器: ``` xssentinel ``` 或者直接传入目标: ``` xssentinel "https://target.test/search?q=test" ``` 带有查询参数的目标会自动进行规范化以进行 fuzz。例如,`https://target.test/search?q=test&id=1` 将被视为一个可进行 fuzz 的目标,其中的查询值会在扫描期间被替换。 如果没有可用的查询参数,XSSentinel 会请求页面并尝试从以下位置发现可测试的输入: - GET 表单。 - POST 表单。 - 带有查询字符串的链接。 - 独立的输入字段。 - 在内联或同源 JavaScript 中找到的参数名称。 当前的命令行入口接受目标 URL。当在页面上发现 POST 表单时,会自动创建 POST 扫描。 ## 扫描流程 1. 规范化目标 URL 并确保其使用 `http://` 或 `https://`。 2. 根据现有的查询参数构建扫描目标,或者在不存在查询参数时发现 GET/POST 表单。 3. 默认从 `xss-payloads.txt` 加载 payload。 4. 在智能模式下,扩展 payload 变体,移除重复项,根据检测到的上下文对它们进行评分,并选择第一批次智能 payload。 5. 探测目标以推断反射上下文,例如 script 块、HTML 属性、HTML 文本、注释或原始响应。 6. 分析目标情报:CSP、类似 WAF 的信号、脚本、DOM source 和 DOM sink。 7. 发送 payload 请求并检查响应反射。 8. 如果 Chromium 或 Playwright 可用,在浏览器中验证合适的反射 payload,并监视 `alert`、`confirm`、`prompt` 或 JavaScript 对话框的执行情况。 9. 如果智能批次未产生确认结果,则继续使用剩余的 payload 进行详尽的回退测试。 ## Payload 文件 `xss-payloads.txt` 是主要的 payload 来源,也是默认使用的文件。注释和空行将被忽略。启用智能扩展后,一个源 payload 可以生成多个编码、解码、转义和语法突变的变体。 `smart-selected-180-payloads.txt` 是保留在项目中的精选 payload 列表,用于兼容性和手动实验。它不再是默认的扫描器来源。如果在代码或未来的 CLI 选项中明确选择了此文件,扫描器将仅使用这 180 个精选 payload。 在启动信息块中: - `payloads` 是当前运行去重或智能扩展后加载的 payload 数量。 - `selected` 是第一批次智能 payload 的大小。默认为 90 个 payload。 - `selected=90` 并不意味着只有 90 个 payload。它意味着在继续对其余部分进行详尽的回退测试之前,会先测试这 90 个 payload。 示例: ``` [INFO] target=https://target.test/search method=GET param=q payloads=97,235 selected=90 chromium=on dom=on csp=strict waf=cloudflare context=none ``` ## 浏览器验证 XSSentinel 在可用时会使用本地 Chromium 或 Playwright。浏览器验证会启动受控的浏览器会话,注入对话框钩子,导航至 payload 目标,并检查 payload 是否触发了有效的 JavaScript 对话框信号。 如果你想要启用 `chromium=on`,请在扫描前安装以下其中之一: ``` sudo apt install chromium ``` 或者通过你常用的系统包管理器提供 Google Chrome / Chromium。如果在同一个 Python 环境中安装了 Playwright,也可以使用它: ``` python3 -m pip install playwright python3 -m playwright install chromium ``` 如果缺少浏览器支持,扫描器会打印 `chromium=off` 或表现为相应状态,并继续进行非浏览器分析。 ## 输出字段 - `target`:正在测试的规范化目标 URL。此视图中会隐藏 fuzz 的值。 - `method`:用于扫描目标的 HTTP 方法,通常是 `GET` 或发现的 `POST`。 - `param`:第一个 fuzz 的参数名称。 - `payloads`:加载和扩展后本次运行的 payload 总数。 - `selected`:第一批次智能 payload 计数。 - `chromium`:浏览器验证的可用性。 - `dom`:DOM/脚本分析状态。 - `csp`:检测到的 CSP 状态摘要。 - `waf`:检测到的类似 WAF 的指纹(如果有)。 - `context`:检测到的反射上下文,如果探测未揭示任何内容则为 `none`。 ## 项目布局 ``` . |-- main.py |-- install.sh |-- uninstall.sh |-- xss-payloads.txt |-- smart-selected-180-payloads.txt |-- useragents.txt `-- xssentinel_core/ ``` 从源码运行时,请将这些文件保存在一起。安装程序会将所需文件复制到 `~/.local/share/xssentinel` 中。 ## 卸载 ``` ./uninstall.sh ``` ## 负责任的使用 仅在拥有或获得明确测试授权的应用程序上使用 XSSentinel。未经授权的扫描可能会造成破坏,并可能违反法律、合同或可接受的使用政策。
标签:CISA项目, Python, Web安全, XSS扫描, 安全测试, 攻击性安全, 无后门, 特征检测, 蓝队分析, 逆向工具