Dancas93/SSRF-Scanner

GitHub: Dancas93/SSRF-Scanner

一款高性能的SSRF漏洞扫描器,通过10个攻击阶段和377个Payload全面检测Web应用中的服务端请求伪造漏洞。

Stars: 40 | Forks: 11

# 🔥 SSRF-Scanner 🔥 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) # SSRF-Scanner 一个全面、高性能的 SSRF (Server-Side Request Forgery) 漏洞扫描器,通过多种攻击向量测试 Web 应用程序中潜在的 SSRF 问题。 ## 🎯 功能特性 - **10 个攻击阶段** - 全面的测试方法 - **约 28,300 个请求** - 针对每个目标的大量 payload 覆盖 - **377 个独立 Payload** - 涵盖 10 个不同的 payload 类别 - **智能基线检测** - 减少误报 - **并发扫描** - 最多支持 200 个并发请求 - **速率限制** - 可配置的每秒请求数 - **多种输出格式** - JSON, CSV, HTML, TXT - **实时进度** - 动态请求统计和成功率 - **Async/Await** - 高性能异步实现 ## 安装说明 ### 克隆仓库 ``` git clone https://github.com/Dancas93/SSRF-Scanner.git cd SSRF-Scanner ``` ### 创建虚拟环境 ``` python3 -m venv venv # 激活虚拟环境 # 在 macOS/Linux 上: source venv/bin/activate # 在 Windows 上: .\venv\Scripts\activate # 安装依赖项 pip3 install -r requirements.txt ``` ## 🚀 快速开始 ### 基本用法 ``` # 扫描单个 URL python3 ssrf_scanner.py -u https://example.com # 从文件扫描多个 URL python3 ssrf_scanner.py -f urls.txt # 使用 callback URL 扫描以进行远程 SSRF 检测 python3 ssrf_scanner.py -u https://example.com -b your-callback.burpcollaborator.net # 使用自定义设置进行高速扫描 python3 ssrf_scanner.py -u https://example.com --concurrency 300 --rate-limit 150 # 安静模式(仅显示漏洞) python3 ssrf_scanner.py -u https://example.com -q # 多种输出格式 python3 ssrf_scanner.py -u https://example.com --output-format html,json,csv ``` ### 命令行选项 ``` -h, --help Show help message -u, --url Single URL to scan -f, --file File containing URLs to scan -b, --backurl Callback URL for remote SSRF detection -d, --debug Enable debug mode -c, --cookie Set cookies (format: 'name1=value1; name2=value2') --concurrency N Number of concurrent requests (default: 200) --rate-limit N Max requests per second (default: 100) -q, --quiet Only show vulnerabilities (no progress) --proxy URL Proxy URL (e.g., http://127.0.0.1:8080) --proxy-auth U:P Proxy authentication (username:password) --output-format FMT Output format: json, csv, html, txt, all (default: csv) ``` ## 🎯 攻击阶段 扫描器执行 **10 个全面的攻击阶段**,共发起 **约 28,300 次请求**: ### 1. 本地 IP 攻击 (20% - 约 5,600 个请求) 使用各种 IP 格式测试内网访问: - **35 个基础 payload** × 27 个 header × 各种变体 - 标准 localhost (`127.0.0.1`, `localhost`, `::1`) - IP 编码 (十进制: `2130706433`, 十六进制: `0x7f000001`, 八进制: `0177.0.0.1`) - IPv6 变体 (`[::1]`, `[0:0:0:0:0:ffff:127.0.0.1]`) - Unicode 变体 (`127。0。0。1`) - URL 编码格式 ### 2. 云元数据攻击 (12% - 约 3,400 个请求) 尝试访问云服务元数据 endpoint: - **39 个 payload**,针对 AWS, GCP, Azure, DigitalOcean, Alibaba Cloud - AWS: `169.254.169.254/latest/meta-data/` - GCP: `metadata.google.internal/computeMetadata/v1/` - Azure: `169.254.169.254/metadata/instance` - IMDSv1 和 IMDSv2 变体 - 编码和混淆的 endpoint ### 3. 协议攻击 (12% - 约 3,400 个请求) 测试各种协议处理器: - 来自 `protocols.txt` 的 **21 种协议** - 标准: `http://`, `https://`, `ftp://`, `file://` - 高级: `gopher://`, `dict://`, `ldap://`, `jar://` - 数据库: `mysql://`, `mongodb://`, `postgres://`, `redis://` - 网络: `ws://`, `wss://`, `smtp://` - 特定协议处理器 (Gopher 命令、Dict 查询、文件路径) ### 4. 编码 Payload 攻击 (8% - 约 2,300 个请求) 使用编码技术绕过过滤器: - **10 个基础 payload** 包含多种编码变体 - 单/双重 URL 编码 - Base64 编码 - Unicode 编码 (`。`, `/`) - 混合编码组合 - 十六进制编码 ### 5. 参数攻击 (8% - 约 2,300 个请求) 通过 URL 参数测试 SSRF: - **66 个参数 payload** - 常见参数: `url=`, `path=`, `redirect=`, `uri=`, `file=` - 文件包含: `document=`, `page=`, `load=` - API: `callback=`, `webhook=`, `api_url=` - 重定向: `redirect_to=`, `return_url=`, `next=` ### 6. 端口扫描攻击 (8% - 约 2,300 个请求) 通过端口扫描检测内部服务: - **33 个端口 payload** - Web: `:80`, `:443`, `:8080`, `:8443` - 数据库: `:3306`, `:5432`, `:6379`, `:27017` - 管理后台: `:8000`, `:8008`, `:9000` - 服务: `:22`, `:21`, `:25`, `:9200` ### 7. DNS 重绑定攻击 (8% - 约 2,300 个请求) 测试 DNS 重绑定漏洞: - **13 个 payload**,包含 Burp Collaborator 集成 - `127.0.0.1.nip.io`, `127.0.0.1.xip.io` - `localhost.localtest.me` - 自定义回调域名 (使用 `-b` 标志) - 基于时间的 DNS 变体 ### 8. CRLF 注入攻击 (10% - 约 2,800 个请求) 🆕 通过换行注入操纵 HTTP 请求: - **43 个 CRLF payload** - Header 注入: `%0d%0aHost:%20evil.com` - HTTP 请求走私 (Request Smuggling): `%0d%0aTransfer-Encoding:%20chunked` - 响应拆分: `%0d%0aHTTP/1.1%20200%20OK` - 缓存中毒: `%0d%0aX-Forwarded-Scheme:%20http` - 会话固定: `%0d%0aSet-Cookie:%20admin=true` - CORS 绕过: `%0d%0aAccess-Control-Allow-Origin:%20*` ### 9. Scheme 混淆攻击 (10% - 约 2,800 个请求) 🆕 测试替代/罕见协议以绕过过滤器: - **90+ 种 scheme payload** - Java 专用: `jar:`, `netdoc:` - PHP wrapper: `php://filter`, `expect://`, `phar://` - Data URI: `data://text/plain;base64,` - 文件传输: `tftp://`, `nfs://`, `rsync://`, `smb://` - 目录: `ldap://`, `ldapi://` - 版本控制: `git://`, `svn://` - 流媒体: `rtsp://`, `rtmp://` - 远程访问: `ssh://`, `telnet://`, `rdp://`, `vnc://` - 压缩: `compress.zlib://`, `compress.bzip2://` ### 10. 远程攻击 (4% - 约 1,100 个请求) 外部回调验证 (需要 `-b` 标志): - **10 个回调 URL 变体** - 纯域名: `your-callback.com` - HTTP/HTTPS: `http://your-callback.com` - 带路径: `/ssrf-test` - 带端口: `:80`, `:443`, `:8080` - URL 编码 (单次和双重) - 测试外部通信和 DNS 解析 ## 🔍 验证方法 扫描器使用 **智能基线对比** 来减少误报: ### 1. 响应码分析 - 与基线状态码进行对比 - 仅在状态码与基线**不同**时标记 - 将速率限制 (429) 排除在漏洞之外 - 检测意外的状态变化 ### 2. 响应内容分析 - 搜索 SSRF 指标: - `root:`, `admin:` (用户列表) - `AWS`, `metadata`, `credentials` (云元数据) - `BEGIN RSA`, `BEGIN PRIVATE` (私钥) - `api_key`, `secret`, `token` (敏感数据) - 排除速率限制响应 - 内容指纹识别 ### 3. 响应头分析 - 检测可疑的 header: - `x-internal`, `server-internal` - `x-backend-server`, `x-upstream` - `x-forwarded-server` - 内部服务指标 ### 4. 时间分析 - 响应时间差异 - 基于超时的检测 - 通过时间进行端口扫描 ### 智能基线检测 - 通过 3 个初始请求创建基线 - 跟踪状态码、响应大小、内容哈希 - 确定响应稳定性 - 仅标记与基线**存在显著偏差**的响应 - 防止在状态与基线匹配时出现误报 ## 📊 输出与报告 ### 输出格式 扫描器生成多种报告格式: 1. **JSON 报告** (`output/report.json`) - 机器可读格式 - 完整的漏洞详情 - 便于与其他工具集成 2. **CSV 报告** (`output/report.csv`) - 兼容电子表格 - 可排序和过滤 - 适合数据分析 3. **HTML 报告** (`output/report.html`) - 可视化、交互式报告 - 统计数据和图表 - 颜色编码的严重程度 - 专业的呈现方式 4. **文本报告** (`output/report.txt`) - 人类可读格式 - 便于快速审查 - 适合终端查看 ### 报告内容 每条漏洞发现包含: - **目标 URL** - 被测试的 endpoint - **攻击类型** - 检测到问题的阶段 (例如:CRLF_Injection, Scheme_Confusion) - **Payload** - 触发漏洞的确切 payload - **响应码** - 接收到的 HTTP 状态码 - **响应大小** - 响应的字节大小 - **验证方法** - 如何被验证的 (例如:"Response Content Analysis") - **时间戳** - 检测到漏洞的时间 - **备注** - 详细信息以及与基线的差异 ### 摘要统计 - 扫描的 URL 总数 - 发起的请求总数 - 发现的漏洞数量 - 成功率 (%) - 独立的攻击类型 - 按攻击阶段划分的明细 - 扫描持续时间 ## 📈 性能 ### 速度与效率 - **并发请求**:最多 200 个并发连接 - **速率限制**:可配置 (默认:100 req/s) - **自适应限流**:根据错误自动调整 - **智能退避**:失败时降低速率,成功时提高速率 - **Async/Await**:高性能异步实现 ### 典型扫描时间 - **单个 URL**:约 3-5 分钟 (以 100 req/s 发送 28,300 个请求) - **高并发下**:约 2-3 分钟 (300 个并发,150 req/s) - **多个 URL**:呈线性扩展 ### 资源使用 - **内存**:约 100-200 MB - **CPU**:中等 (异步 I/O 密集型) - **网络**:可配置的带宽使用 ## 🛡️ 安全特性 ### 智能检测 - ✅ 基线对比以减少误报 - ✅ 排除速率限制 (429 不标记为漏洞) - ✅ 响应模式分析 - ✅ 基于内容的验证 - ✅ 基于时间的检测 ### 安全扫描 - ✅ 可配置的速率限制 - ✅ 超时处理 - ✅ 错误恢复 - ✅ 优雅降级 - ✅ 连接池 ## 📦 Payload 文件 所有 payload 都存储在 `payloads/` 目录中: ``` payloads/ ├── local_ips.txt (35 payloads) - Internal IP variations ├── headers.txt (27 payloads) - HTTP headers to test ├── cloud_metadata.txt (39 payloads) - Cloud metadata endpoints ├── protocols.txt (21 payloads) - Protocol handlers ├── encoded_payloads.txt (10 payloads) - Encoding variations ├── parameter_payloads.txt (66 payloads) - URL parameters ├── port_payloads.txt (33 payloads) - Port specifications ├── dns_rebinding.txt (13 payloads) - DNS rebinding domains ├── crlf_injection.txt (43 payloads) - CRLF injection patterns └── scheme_confusion.txt (90 payloads) - Alternative protocols ``` **总计:377 个独立 payload** 你可以自定义任何 payload 文件以添加你自己的测试用例! ## 🎯 示例输出 ``` ░██████╗░██████╗██████╗░███████╗ ██╔════╝██╔════╝██╔══██╗██╔════╝ ╚█████╗░╚█████╗░██████╔╝█████╗░░ ░╚═══██╗░╚═══██╗██╔══██╗██╔══╝░░ ██████╔╝██████╔╝██║░░██║██║░░░░░ ╚═════╝░╚═════╝░╚═╝░░╚═╝╚═╝ [*] Configuration: Concurrency: 200 Rate Limit: 100 req/s Timeout: 15s Output Format: json [*] Creating baseline for https://example.com... [*] Baseline: Status={200}, AvgSize=3125, Stable=Yes [*] Starting attack phases... URLs: 1/1 | Requests: 5,234/28,300 (98.5% success, 112.3 req/s) | Phase: Local IP | Progress: 20.0% URLs: 1/1 | Requests: 18,234/28,300 (99.1% success, 118.4 req/s) | Phase: CRLF Injection | Progress: 64.0% URLs: 1/1 | Requests: 28,300/28,300 (99.5% success, 121.5 req/s) | Phase: Remote | Progress: 100.0% ⏱️ Total Scan Time: 233.12 seconds ================================================== SSRF Scan Summary ================================================== Statistics: -------------------- Total URLs Scanned: 1 Total Requests: 28,300 Vulnerabilities Found: 3 Success Rate: 99.5% Unique Attack Types: 2 Vulnerabilities by Attack Type: ------------------------------ CRLF_Injection: 2 found Scheme_Confusion: 1 found ================================================== Detailed results saved in: JSON Report: output/report.json ``` ## 📝 许可证 该项目基于 MIT 许可证授权 - 有关详细信息,请参阅 LICENSE 文件。 ## ⚠️ 免责声明 本工具仅供教育和授权的安全测试目的使用。用户有责任确保已获得测试目标系统的许可。对于本工具的滥用或造成的损害,开发者不承担任何责任。
标签:CISA项目, Python, SSRF检测, Web安全, 加密, 异步扫描, 无后门, 漏洞扫描器, 蓝队分析, 逆向工具