rafashaalfiandi/XSSentinel
GitHub: rafashaalfiandi/XSSentinel
一款专注的 XSS fuzz 扫描器,结合智能 payload 策略、反射上下文分析与可选浏览器验证来检测反射型和 DOM 型跨站脚本漏洞。
Stars: 0 | Forks: 0
## 概述
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扫描, 安全测试, 攻击性安全, 无后门, 特征检测, 蓝队分析, 逆向工具