pratikkhairnar160/Vaelion-XSS
GitHub: pratikkhairnar160/Vaelion-XSS
一款基于真实浏览器执行验证的 XSS 漏洞扫描器,通过无头 Chrome 捕获 JavaScript 对话框来确认漏洞,显著降低误报率。
Stars: 0 | Forks: 0
# Vaelion-XSS
```
========================================
Vaelion-XSS
Cross Site Scripting Scanner
By Vaelion
========================================
```
一个专注于授权 Web 应用安全测试的、独立的 **跨站脚本攻击 (XSS)** 漏洞扫描器。
Vaelion-XSS 将 payload 注入到目标 URL 的每一个查询字符串参数(以及 URL 片段)中,在真实的无头 Chrome 浏览器中渲染生成的页面,并通过捕获 payload 触发的原生 JavaScript 对话框(`alert` / `confirm` / `prompt`)来确认漏洞是否被利用。由于它验证的是实际的客户端执行情况,而不是简单的字符串反射匹配,因此它产生的误报率远低于基于 grep 的 XSS 检查。
## 概述
| 组件 | 详情 |
|---|---|
| 语言 | Python |
| 引擎 | Selenium + Headless Chrome |
| 检测方式 | 真实的浏览器 JavaScript 执行 |
| Payload | 2600+ 个 XSS payload |
| 输出 | JSON / HTML / TXT 报告 |
| 许可证 | MIT |
## 路线图
- [x] 反射型 XSS 检测
- [x] DOM 型 XSS 浏览器验证
- [x] 自定义 payload 支持
- [x] JSON/HTML 报告
未来计划:
- [ ] Blind XSS 支持
- [ ] Burp Suite 集成
- [ ] 更好的 DOM sink 分析
- [ ] API 模式
## 功能
- **真实执行确认** — 使用无头 Chrome + Selenium,而非字符串匹配启发式算法
- **多目标扫描** — 支持单个 `--url` 或包含 URL 列表的 `--file`
- **多线程** — 可配置的工作线程池 (`--threads`),配合可复用的浏览器驱动池以提升吞吐量
- **自定义 payload** — 可以通过 `--payload` 引入你自己的 payload 文件,或指定单个临时的 payload
- **内置 2,600+ 精选 XSS payload** (`payloads/xss.txt`)
- **结构化报告** — 支持 JSON、HTML 或纯文本,根据 `--output` 文件扩展名自动选择
- **详细 / 调试模式**,用于排查扫描故障
- **彩色终端输出**,便于快速直观的分类筛查
- **干净的退出代码**和错误处理,适合 CI/自动化流程
## 安装说明
需要 Python 3.9+ 并且主机上已安装 Google Chrome。
```
git clone https://github.com/pratikkhairnar160/Vaelion-XSS.git
cd Vaelion-XSS
pip install -r requirements.txt
```
`webdriver-manager` 会在首次运行时自动下载匹配的 ChromeDriver —— 无需手动配置驱动。
## 使用说明
扫描单个 URL:
```
python3 vaelion_xss.py --url "https://target.tld/search?q=test"
```
从文件中读取 URL 列表进行扫描,并使用更多线程:
```
python3 vaelion_xss.py --file urls.txt --threads 10
```
使用自定义 payload 文件并保存 HTML 报告:
```
python3 vaelion_xss.py --url "https://target.tld/page?id=1" \
--payload payloads/xss.txt \
--output report.html
```
使用详细输出测试单个临时 payload:
```
python3 vaelion_xss.py --url "https://target.tld/page?id=1" \
--payload "" \
--verbose
```
为下游工具保存 JSON 报告:
```
python3 vaelion_xss.py --file urls.txt --output findings.json
```
## 支持的选项
| 标志 | 简写 | 描述 | 默认值 |
|---|---|---|---|
| `--url` | `-u` | 指定扫描的单个目标 URL | — |
| `--file` | `-f` | 包含目标 URL 的文件(每行一个) | — |
| `--payload` | `-p` | Payload 文件路径,或单个字面 payload | `payloads/xss.txt` |
| `--threads` | `-t` | 并发工作线程数 | `5` |
| `--timeout` | | 每次请求等待 JS 对话框的秒数 | `2.0` |
| `--output` | `-o` | 报告文件路径 (`.json`, `.html`, 或 `.txt`) | — |
| `--verbose` | `-v` | 启用详细/调试日志 | off |
| `--no-banner` | | 隐藏启动横幅 | off |
| `--version` | | 打印版本信息并退出 | — |
`--url` 和 `--file` 可以组合使用;目标 URL 会自动进行去重。
## 检测原理
1. 解析每个目标 URL 的查询参数(如果存在,还包括 URL 片段)。
2. 对于每一个参数,生成一个变体 URL,其中仅在该参数中注入 payload(所有其他参数保持不变)。
3. 在无头 Chrome 中加载该变体 URL。
4. 如果在 `--timeout` 秒内触发了原生 JS 对话框,说明 payload 已执行 —— 该发现将被记录并立即打印输出。
5. 如果没有触发对话框,则将该变体标记为不易受攻击(仅在 `--verbose` 模式下显示)。
这种方法只会标记在真实浏览器环境中作为 JavaScript 实际运行的 payload,相比于在 HTTP 响应体中匹配 payload 字符串,这是一个更具实质意义的强信号。
## 局限性
- 仅能检测**会触发 JS 对话框的反射型/DOM 型 XSS**。它无法发现需要额外步骤才能触发的存储型 XSS、不依赖 `alert`/`confirm`/`prompt` 类型 payload 的 XSS,或者位于扫描器未获得对应会话授权的认证流程之后的漏洞。
对于 DOM 型 XSS,由于 sink 会在渲染后的页面中执行,`payloads/xss.txt` 中的 polyglot/基于对话框的 payload 依然有效。
- 需要安装 Chrome/Chromium,且能被 `webdriver-manager` 访问。
- 无头浏览器扫描本质上比纯 HTTP 扫描慢 —— 请根据目标的容忍度和你自己的授权范围调整 `--threads` 和 `--timeout`。
## 法律免责声明
Vaelion-XSS 仅用于**授权的安全测试和教育目的**。请仅对你拥有或获得明确书面测试许可的系统运行此工具。
在大多数司法管辖区,未经授权扫描系统是非法的(例如,根据美国《计算机欺诈和滥用法》、英国《计算机滥用法》以及其他地区的同等法律),并且即使系统在技术上可以访问,也可能违反目标的服务条款或漏洞赏金计划规则。
作者 (**Vaelion**) 不承担任何责任,也不对因滥用此工具造成的任何损害负责。请负责任地使用它,保持在授权范围内,并遵守你所测试的任何计划的披露政策。
## 作者
**Vaelion**
安全研究员 | Web 应用安全 | 漏洞赏金 | 应用安全
## 许可证
基于 [MIT 许可证](LICENSE) 发布。
标签:Selenium, URL枚举, XSS检测, 加密, 安全测试, 攻击性安全, 漏洞扫描器, 逆向工具