Dancas93/SSRF-Scanner
GitHub: Dancas93/SSRF-Scanner
一款高性能的SSRF漏洞扫描器,通过10个攻击阶段和377个Payload全面检测Web应用中的服务端请求伪造漏洞。
Stars: 40 | Forks: 11
# 🔥 SSRF-Scanner 🔥
[](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安全, 加密, 异步扫描, 无后门, 漏洞扫描器, 蓝队分析, 逆向工具