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检测, 加密, 安全测试, 攻击性安全, 漏洞扫描器, 逆向工具