R0X4R/ressrf
GitHub: R0X4R/ressrf
一款基于 Go 的高并发 SSRF 漏洞模糊测试扫描器,通过动态请求追踪和 OAST 带外检测实现带内与带外的服务端请求伪造漏洞发现。
Stars: 20 | Forks: 3

* **动态 callback 映射:** 利用非对称加密 token(`interactsh`)精确指出哪个参数或 header key 触发了远程网络 ping。
* **高级协议绕过:** 包含多云 IMDS 元数据 token、替代协议封装(`gopher://`、`dict://`、`file://`)以及字符混淆的 URL 解析器绕过。 ## 检测工作流 ``` graph TD %% Define Global Styles & Colors classDef target fill:#1a1c1e,stroke:#30363d,stroke-width:2px,color:#fff; classDef engine fill:#1f242c,stroke:#ffbc00,stroke-width:2px,color:#fff; classDef success fill:#1b2a1a,stroke:#2ea44f,stroke-width:2px,color:#fff; classDef alert fill:#341a1a,stroke:#da3637,stroke-width:2px,color:#fff; classDef platform fill:#161b22,stroke:#58a6ff,stroke-width:2px,color:#fff; %% Workflow Nodes T["🎯 Target:
https://vulnerable.server.tld"]:::target subgraph FuzzingEngine [" "] P1["1. Parameter Fuzzer"] P2["2. Header Fuzzer"] P3["3. Protocol Bypasses"] end style FuzzingEngine fill:#0d1117,stroke:#30363d,stroke-dasharray: 5 5 IB["🔓 [ALT-PROTO HIT]
Local Content Leak"]:::success OAST["🌐 OAST Platform
(Public/Private)"]:::platform OOB["🔥 [LIVE OOB HIT]
Dynamic Callback Captured"]:::alert %% Connection Logic Routing T --> FuzzingEngine P3 -->|In-Band Reflection| IB P1 -->|Out-of-Bound Trigger| OAST P2 -->|Out-of-Bound Trigger| OAST OAST -->|Real-Time Polling Channel| OOB ``` 1. **阶段 1(参数):** 利用映射到内部请求索引的自定义 `idx` 追踪子域来变异查询字符串。 2. **阶段 2(Headers):** 在并发的 goroutine 下同时探测超过 35 个经典的路由和代理转发 header。 3. **阶段 3(替代协议):** 测试本地资源边界,并根据系统文件反射模式检查响应流,以便立即捕获带内漏洞。 ## 安装 ``` go install -v github.com/R0X4R/ressrf@latest ``` 在首次初始化时,该工具会自动在 `~/.config/ressrf/payloads.cfg` 内配置其默认的多云字典* **从源码安装** ``` git clone https://github.com/R0X4R/ressrf.git && cd ressrf && go install . ``` ## 用法 ``` ressrf -h ``` ### 参考 Flag | 短 Flag | 长 Flag | 默认值 | 描述 | | --- | --- | --- | --- | | **`-l`** | `--list` | *必填* | 包含目标 URL 矩阵的输入文件路径。 | | **`-c`** | `--collab` | *动态* | 自定义 Interactsh/OAST 基础设施节点域覆盖。 | | **`-t`** | `--threads` | `20` | 活跃的并发系统处理工作线程。 | | **`-r`** | `--rate` | `50` | 每秒全局最大请求速率限制。 | | **`-H`** | `--header` | `""` | 附加持久的结构化授权 token 或自定义 header。 | | **`-o`** | `--outdir` | `output` | 用于日志捕获和结果摘要的输出目录路径。 | | **`-s`** | `--silent` | `false` | 隐藏文本横幅、信息统计和里程碑行。 | | **`-b`** | `--color-blind` | `false` | 从 stdout 流中剔除 ANSI 终端颜色序列。 | | **`-v`** | `--verbose` | `false` | 显示活动连接更新和状态码的实时流 | ### 操作示例 标准的并发扫描执行: ``` ressrf -l targets.txt -t 30 -r 100 ``` 输出至自定义存储目的地的静默 fuzz 执行: ``` ressrf -l targets.txt -s -o ssrf_audit ``` 你可以将其与其他工具管道结合: ``` subfinder -d target.com -all -silent | httpx -silent | katana -silent | gf ssrf | ressrf ``` 要实时查看连接状态修改或调试日志,请添加 verbose flag。它会将活跃的网络交互、状态码和连接失败情况直接流式传输到你的终端屏幕上: ``` cat targets.txt | ressrf -v ``` ## 自定义 Payload 底层的验证规则利用了嵌入式引擎追踪。位于 `~/.config/ressrf/payloads.cfg` 的默认向量包含了结构化的占位符标签: * `{COLLAB}`:动态替换为各自的交互式追踪子域。 * `{COLLAB_URL}`:预配置的完整 HTTP 连接追踪前缀。 # 自定义扩展会在运行时无缝追加 [http://169.254.169.254/latest/meta-data/](http://169.254.169.254/latest/meta-data/) file:///etc/passwd dict://{COLLAB}:11211/stats [http://127.0.0.1.nip.io](http://127.0.0.1.nip.io).{COLLAB} ## 输出架构 当交互式 callback 命中监听循环时,结果将以简洁的格式直接流式传输到终端行上: **启动测试服务器** ``` go test -v test.go ``` **然后测试该工具** ``` ./ressrf -l ssrf.txt ReSSRF - Advanced In-Band and Out-of-Band SSRF Fuzzing Scanner with Dynamic Request Tracking [LOADED 2 URLS] [COLLAB SESSION: subdomain.oast.pro] http://localhost:8081/internal?file=http%3A%2F%2F127.0.0.1%3A80 [ALT-PROTO HIT] [Local Content Leak] http://localhost:8081/internal?file=http%3A%2F%2Flocalhost%3A80 [ALT-PROTO HIT] [Local Content Leak] http://localhost:8081/test?url=default [LIVE OOB HIT] [Header Injection] [Base-Url] http://localhost:8081/test?url=default [LIVE OOB HIT] [Header Injection] [Referer] [*] SCANNING COMPLETE. KEEPING SESSION OPEN 20s FOR REMAINING PAYLOADS TO LAND. OOB CALLBACK RESULTS: http://localhost:8081/test?url=default [LIVE OOB HIT] [Header Injection] [Base-Url] http://localhost:8081/test?url=default [LIVE OOB HIT] [Header Injection] [Referer] [TOTAL TRANSACTION HITS 233] [OUTPUT: /home/user/output] ``` **生成的文件** 工作区输出目录会保存三个核心组件: 1. `findings.txt` - 整合后的结构化漏洞确认信息。 2. `activity.log` - 按时间顺序追踪出站请求、fuzzer 变异和 HTTP 传输异常的账目。 3. `callback.log` - 从 OAST 连接密钥安全获取的原始传入事务条目。 ## 鸣谢 * **SSRF 结构化方法论:** 深受 **[reconftw](https://github.com/six2dez/reconftw)** 中 fuzzer 设计模式的启发,作者为 [@six2dez](https://github.com/six2dez)。 * **非对称 OAST 基础设施引擎:** 由 ProjectDiscovery 的 [interactsh](https://github.com/projectdiscovery/interactsh) 提供支持。
功能 • 工作流 • 安装 • 用法 • Payload • 贡献 • 鸣谢
它通过系统地变异参数和 header,同时对远程 OAST 协作协议进行实时、动态的关联追踪,从而自动化地对大量 URL 目标进行 server-side request forgery 发现。 ## 背景 该引擎中实现的检测逻辑、fuzzer 覆盖率和多阶段结构化工作流改编自 [**ReconFTW**](https://github.com/six2dez/reconftw) 中的 SSRF 模块并受到了它的启发。虽然原始的脚本方法仍然非常有效,但开发 **ReSSRF** 的目的是将这些核心的行为原语转化为高并发的、编译型的 Go 架构——从而增强运行时内存优化、扩展吞吐能力,并在大规模安全测试中提供强大的容错能力。 ## 功能 * **多向量分析:** 自动化进行针对性的参数 fuzzer 扫描,同时结合多层 HTTP 请求 header 变异。* **动态 callback 映射:** 利用非对称加密 token(`interactsh`)精确指出哪个参数或 header key 触发了远程网络 ping。
* **高级协议绕过:** 包含多云 IMDS 元数据 token、替代协议封装(`gopher://`、`dict://`、`file://`)以及字符混淆的 URL 解析器绕过。 ## 检测工作流 ``` graph TD %% Define Global Styles & Colors classDef target fill:#1a1c1e,stroke:#30363d,stroke-width:2px,color:#fff; classDef engine fill:#1f242c,stroke:#ffbc00,stroke-width:2px,color:#fff; classDef success fill:#1b2a1a,stroke:#2ea44f,stroke-width:2px,color:#fff; classDef alert fill:#341a1a,stroke:#da3637,stroke-width:2px,color:#fff; classDef platform fill:#161b22,stroke:#58a6ff,stroke-width:2px,color:#fff; %% Workflow Nodes T["🎯 Target:
https://vulnerable.server.tld"]:::target subgraph FuzzingEngine [" "] P1["1. Parameter Fuzzer"] P2["2. Header Fuzzer"] P3["3. Protocol Bypasses"] end style FuzzingEngine fill:#0d1117,stroke:#30363d,stroke-dasharray: 5 5 IB["🔓 [ALT-PROTO HIT]
Local Content Leak"]:::success OAST["🌐 OAST Platform
(Public/Private)"]:::platform OOB["🔥 [LIVE OOB HIT]
Dynamic Callback Captured"]:::alert %% Connection Logic Routing T --> FuzzingEngine P3 -->|In-Band Reflection| IB P1 -->|Out-of-Bound Trigger| OAST P2 -->|Out-of-Bound Trigger| OAST OAST -->|Real-Time Polling Channel| OOB ``` 1. **阶段 1(参数):** 利用映射到内部请求索引的自定义 `idx` 追踪子域来变异查询字符串。 2. **阶段 2(Headers):** 在并发的 goroutine 下同时探测超过 35 个经典的路由和代理转发 header。 3. **阶段 3(替代协议):** 测试本地资源边界,并根据系统文件反射模式检查响应流,以便立即捕获带内漏洞。 ## 安装 ``` go install -v github.com/R0X4R/ressrf@latest ``` 在首次初始化时,该工具会自动在 `~/.config/ressrf/payloads.cfg` 内配置其默认的多云字典* **从源码安装** ``` git clone https://github.com/R0X4R/ressrf.git && cd ressrf && go install . ``` ## 用法 ``` ressrf -h ``` ### 参考 Flag | 短 Flag | 长 Flag | 默认值 | 描述 | | --- | --- | --- | --- | | **`-l`** | `--list` | *必填* | 包含目标 URL 矩阵的输入文件路径。 | | **`-c`** | `--collab` | *动态* | 自定义 Interactsh/OAST 基础设施节点域覆盖。 | | **`-t`** | `--threads` | `20` | 活跃的并发系统处理工作线程。 | | **`-r`** | `--rate` | `50` | 每秒全局最大请求速率限制。 | | **`-H`** | `--header` | `""` | 附加持久的结构化授权 token 或自定义 header。 | | **`-o`** | `--outdir` | `output` | 用于日志捕获和结果摘要的输出目录路径。 | | **`-s`** | `--silent` | `false` | 隐藏文本横幅、信息统计和里程碑行。 | | **`-b`** | `--color-blind` | `false` | 从 stdout 流中剔除 ANSI 终端颜色序列。 | | **`-v`** | `--verbose` | `false` | 显示活动连接更新和状态码的实时流 | ### 操作示例 标准的并发扫描执行: ``` ressrf -l targets.txt -t 30 -r 100 ``` 输出至自定义存储目的地的静默 fuzz 执行: ``` ressrf -l targets.txt -s -o ssrf_audit ``` 你可以将其与其他工具管道结合: ``` subfinder -d target.com -all -silent | httpx -silent | katana -silent | gf ssrf | ressrf ``` 要实时查看连接状态修改或调试日志,请添加 verbose flag。它会将活跃的网络交互、状态码和连接失败情况直接流式传输到你的终端屏幕上: ``` cat targets.txt | ressrf -v ``` ## 自定义 Payload 底层的验证规则利用了嵌入式引擎追踪。位于 `~/.config/ressrf/payloads.cfg` 的默认向量包含了结构化的占位符标签: * `{COLLAB}`:动态替换为各自的交互式追踪子域。 * `{COLLAB_URL}`:预配置的完整 HTTP 连接追踪前缀。 # 自定义扩展会在运行时无缝追加 [http://169.254.169.254/latest/meta-data/](http://169.254.169.254/latest/meta-data/) file:///etc/passwd dict://{COLLAB}:11211/stats [http://127.0.0.1.nip.io](http://127.0.0.1.nip.io).{COLLAB} ## 输出架构 当交互式 callback 命中监听循环时,结果将以简洁的格式直接流式传输到终端行上: **启动测试服务器** ``` go test -v test.go ``` **然后测试该工具** ``` ./ressrf -l ssrf.txt ReSSRF - Advanced In-Band and Out-of-Band SSRF Fuzzing Scanner with Dynamic Request Tracking [LOADED 2 URLS] [COLLAB SESSION: subdomain.oast.pro] http://localhost:8081/internal?file=http%3A%2F%2F127.0.0.1%3A80 [ALT-PROTO HIT] [Local Content Leak] http://localhost:8081/internal?file=http%3A%2F%2Flocalhost%3A80 [ALT-PROTO HIT] [Local Content Leak] http://localhost:8081/test?url=default [LIVE OOB HIT] [Header Injection] [Base-Url] http://localhost:8081/test?url=default [LIVE OOB HIT] [Header Injection] [Referer] [*] SCANNING COMPLETE. KEEPING SESSION OPEN 20s FOR REMAINING PAYLOADS TO LAND. OOB CALLBACK RESULTS: http://localhost:8081/test?url=default [LIVE OOB HIT] [Header Injection] [Base-Url] http://localhost:8081/test?url=default [LIVE OOB HIT] [Header Injection] [Referer] [TOTAL TRANSACTION HITS 233] [OUTPUT: /home/user/output] ``` **生成的文件** 工作区输出目录会保存三个核心组件: 1. `findings.txt` - 整合后的结构化漏洞确认信息。 2. `activity.log` - 按时间顺序追踪出站请求、fuzzer 变异和 HTTP 传输异常的账目。 3. `callback.log` - 从 OAST 连接密钥安全获取的原始传入事务条目。 ## 鸣谢 * **SSRF 结构化方法论:** 深受 **[reconftw](https://github.com/six2dez/reconftw)** 中 fuzzer 设计模式的启发,作者为 [@six2dez](https://github.com/six2dez)。 * **非对称 OAST 基础设施引擎:** 由 ProjectDiscovery 的 [interactsh](https://github.com/projectdiscovery/interactsh) 提供支持。
标签:CISA项目, EVTX分析, Go, Ruby工具, Snort, SSRF, 日志审计