kabiri-labs/HostHeaderScanner

GitHub: kabiri-labs/HostHeaderScanner

一款专注于 Host 头注入及相关 Web 漏洞检测的安全扫描器,支持原始 HTTP 绕过、OOB 确认和虚拟主机发现。

Stars: 3 | Forks: 1

# HostHeaderScanner v1.6.0 [![许可证](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Python 版本](https://img.shields.io/badge/python-3.6%2B-blue.svg)](https://www.python.org/downloads/) [![GitHub Star](https://img.shields.io/github/stars/kabiri-labs/HostHeaderScanner.svg?style=social&label=Star)](https://github.com/kabiri-labs/HostHeaderScanner) **HostHeaderScanner** 是一款先进的安全工具,旨在检测 Host Header Injection 漏洞,包括 Server-Side Request Forgery (SSRF)、Open Redirect 及其他异常情况。它采用精密的技术,包括构造 HTTP 请求和综合分析,以帮助有效保障 Web 应用程序的安全。 ## 目录 - [功能](#features) - [安装说明](#installation) - [使用说明](#usage) - [基本用法](#basic-usage) - [选项](#options) - [示例](#examples) - [输出结果](#output) - [贡献](#contributing) - [许可证](#license) - [免责声明](#disclaimer) - [联系方式](#contact) ## 功能 - **基于反射的 Host Header Injection**:跨 `Host`、`X-Forwarded-Host`、`X-Forwarded-For`、`Forwarded` 及 15 个以上的其他路由 header 注入唯一的随机标记 host,然后检测在响应体、`Location` header 及其他响应 header 中的反射情况。由于标记是唯一的,因此发现的结果具有高可信度(缓存中毒 / 密码重置中毒 / 链接中毒)。 - **原始 HTTP 验证绕过**:使用内置的原始 HTTP/1.1 客户端(而非 `requests`)发送绕过 Host 验证的畸形请求:**重复的 `Host` header**、**绝对 URI (absolute-URI) 请求行**、**缩进 (折叠行) header** 以及 host 覆盖。 - **确认的 Web 缓存中毒**:添加唯一的 cache-buster,通过 unkeyed header 发送中毒请求,然后*不带*该 header 重新请求相同的 URL。存活的标记确认该响应已被缓存并提供给其他用户,同时会报告 `X-Cache`/`Age`/`CF-Cache-Status`。 - **基于 Host 的访问控制绕过**:检测在提供内部 host 或客户端 IP(`Host: localhost`、`X-Forwarded-For: 127.0.0.1` 等)时可访问的 401/403 endpoint,以及前端路径覆盖 header(`X-Original-URL`、`X-Rewrite-URL`)。 - **虚拟主机发现**:通过 `Host` header 针对内置或自定义字典暴力破解内部/隐藏的虚拟主机,标记状态、长度或页面标题与默认虚拟主机不同的 host。 - **真实的 OOB 确认**:将每次扫描的相关 ID 嵌入到带外 payload 中,并在提供监听器导出 URL(`--oob-poll-url`)的情况下轮询它,以确认盲 SSRF 交互。适用于 interactsh、webhook.site、RequestBin、Burp Collaborator 导出和自定义 sink。 - **可直接复制的复现命令**:每个发现都包含一个可直接运行的复现命令——针对 header/参数问题的 `curl` 命令,以及针对原始绕过的 `printf | ncat` / `openssl s_client` 网络层命令。 - **SSRF 检测**:结合响应时间偏差、内部目标指示符和 header 异常,通过加权评分模型减少误报。 - **Open Redirect 检测**:标记其 `Location` host 与注入的 Host 值匹配的重定向。 - **URL 参数 SSRF**:通过基线差异对比,针对内部目标探测常见参数(`url`、`next`、`redirect` 等)。 - **OOB 关联**:接受一个 `--oob` 域名,将其作为唯一子域嵌入到 payload 中,以便在您自己的 collaborator/listener 上关联交互。 - **多线程扫描**:使用具有界限的 `ThreadPoolExecutor`,支持连接池和自动重试。 - **灵活的请求**:可配置的 HTTP 方法、每请求超时、自定义 header、上游 proxy 以及可选的 TLS 验证绕过。 - **可自定义的详细级别**:提供不同级别的详细程度以控制输出量。 - **可导出报告**:以 JSON 或 Markdown 格式保存结果,方便文档记录。 - **优雅的中断处理**:允许使用 `Ctrl+C` 中断并优雅退出,不会丢失数据。 ## 安装说明 ### 前置条件 - **Python 3.6** 或更高版本。 ### 克隆仓库 ``` git clone https://github.com/kabiri-labs/HostHeaderScanner.git cd HostHeaderScanner ``` ### 安装依赖 使用 `pip` 安装所需的 Python 包: ``` pip install -r requirements.txt ``` 或者,单独安装它们: ``` pip install requests tqdm colorama ``` ## 使用说明 ``` python host_header_scanner.py [options] ``` ### 基本用法 ``` python host_header_scanner.py http://example.com ``` ### 选项 - ``:**(必需)** 要扫描的目标 URL。 - `--oob `:指定用于高级 SSRF 关联的带外 (OOB) 域名。 - `--oob-poll-url `:扫描后轮询的监听器导出 URL,用于确认 OOB 交互。 - `--wordlist ` 或 `-w`:用于发现的自定义虚拟主机字典(每行一个名称)。 - `--threads `:并发线程数(默认为 5)。必须在 1 到 20 之间。 - `--timeout `:单次请求超时时间(以秒为单位,默认为 10)。 - `--methods `:要测试的逗号分隔的 HTTP 方法(默认为 `GET`,例如 `GET,POST`)。 - `--header <"Name: Value">` 或 `-H`:添加自定义请求 header。可重复使用。 - `--proxy `:通过上游 proxy 路由流量(例如 `http://127.0.0.1:8080`)。 - `--insecure` 或 `-k`:禁用 TLS 证书验证。 - `--verbose `:详细级别(1 或 2)。级别 2 提供更详细的输出。 - `--output ` 或 `-o `:保存测试结果的输出文件(支持 `.json` 和 `.md` 扩展名)。 ### 示例 #### 指定线程数 ``` python host_header_scanner.py http://example.com --threads 10 ``` #### 详细级别 2 ``` python host_header_scanner.py http://example.com --verbose 2 ``` #### 将结果保存到文件 ``` python host_header_scanner.py http://example.com -o results.json ``` #### 使用 OOB 域名 ``` python host_header_scanner.py http://example.com --oob oob.example.com ``` #### 测试附加方法并通过 Proxy 路由 ``` python host_header_scanner.py http://example.com --methods GET,POST --proxy http://127.0.0.1:8080 ``` #### 发送自定义 Header(例如身份验证) ``` python host_header_scanner.py http://example.com -H "Authorization: Bearer " -H "Cookie: session=abc" ``` #### 通过 OOB 监听器确认盲 SSRF ``` python host_header_scanner.py http://example.com --oob xxxx.oast.fun --oob-poll-url https://api.listener.example/export ``` #### 使用自定义字典发现虚拟主机 ``` python host_header_scanner.py http://example.com -w internal-vhosts.txt ``` #### 完整命令 ``` python host_header_scanner.py http://example.com --threads 10 --timeout 8 --verbose 2 --output results.md --oob oob.example.com ``` ### 中断程序 - 随时按 `Ctrl+C` 可优雅地停止执行。 ## 输出结果 该工具提供了发现结果的详细摘要,突出显示检测到的任何漏洞。输出包括: - **测试类型**:SSRF、Open Redirect 或 Host Header Injection。 - **测试的 URL**:被测试的目标 URL。 - **使用的 HTTP 方法**:GET、POST、PUT、DELETE。 - **被篡改的 Header**:请求中使用的 HTTP header。 - **收到的状态码**:HTTP 响应状态码。 - **响应时间**:收到响应所需的时间。 - **Header 异常**:基线响应和测试响应之间 HTTP header 任何差异的详细信息(例如,对 `Content-Type` 或 `Vary` header 的更改)。 - **分析**:对结果的解释,包括响应时间异常、header 异常以及潜在的 OOB 交互。 ### 示例输出 ``` HostHeaderScanner 1.4.0 GitHub: https://github.com/kabiri-labs/HostHeaderScanner Target URL: http://example.com Original Host: example.com Methods: GET Using 5 threads (timeout 10.0s). Verbosity level set to 1. Starting Host Header Injection Testing... Host Header Injection Testing: 100%|████████████████████████| 27/27 [00:06<00:00, 4.34test/s] [!] Host Header Injection Finding! URL: http://example.com/ Method: GET Header: X-Forwarded-Host Payload: 834503a3f66d.example-collab.com Status Code: 302 Response Time: 0.01s Analysis: Injected host reflected in 'Location' header: https://834503a3f66d.example-collab.com/login Injected host reflected in response body (cache/link poisoning). -------------------------------------------------------------------------------- ========== Test Summary ========== Total findings: 1 --- Host Header Injection --- - GET http://example.com/ Header/Parameter: X-Forwarded-Host Payload: 834503a3f66d.example-collab.com Analysis: Injected host reflected in 'Location' header: https://834503a3f66d.example-collab.com/login Injected host reflected in response body (cache/link poisoning). -------------------------------------------------------------------------------- =================================== ``` ## 许可证 该项目在 **MIT License** 下授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。 ## 免责声明 **HostHeaderScanner** 仅用于教育和授权测试目的。未经明确许可,针对系统未经授权使用此工具是非法和不道德的。开发者不承担任何责任,也不对因滥用此工具造成的任何损害负责。 ## 联系方式 如需支持或咨询: - **电子邮箱**:[certification.kabiri@gmail.com](mailto:certification.kabiri@gmail.com) - **GitHub Issues**:[创建 Issue](https://github.com/kabiri-labs/HostHeaderScanner/issues) 如果您发现任何错误、有功能请求或疑问,请随时提交 issue 或 pull request。 如果您觉得它有用,请**给本项目点亮 Star** ⭐!
标签:CISA项目, Host头注入, Python, Web安全, 域名侦查, 无后门, 蓝队分析, 逆向工具