SSRF检测的一些思考
字数 1479 2025-08-29 08:31:54
SSRF检测技术详解与实战指南
1. SSRF检测概述
SSRF(Server-Side Request Forgery)是一种服务器端请求伪造漏洞,攻击者可以利用服务器作为代理发起内部网络请求。本文介绍了几种有效的SSRF检测方法和技术原理。
2. 核心检测技术
2.1 Cracking the lens技术
原理:
- 通过构造畸形的HTTP请求
- 配合特殊的请求头
- 使服务器处理请求时出现问题
- 从而将请求导向自定义服务器
关键点:
- 在所有请求中添加
Cache-Control: no-transform头 - 防止请求在传输过程中被处理或修改
- 使用DNS平台接收请求验证漏洞
2.2 Blind-SSRF检测技术
三种检测类型:
-
增加特定请求头
- 示例请求头:
WL-Proxy-Client-IP - 类似于
X-Forwarded-For,用于获取客户端IP
- 示例请求头:
-
修改Host字段
- 利用服务器对Host字段处理不当的漏洞
-
对URL进行特殊处理
- 构造畸形URL利用解析漏洞
URL处理漏洞示例:
Url backendURL = "http://public-backend/";
String uri = ctx.getRequest().getRawUri();
URI proxyUri;
try {
proxyUri = new URIBuilder(uri)
.setHost(backendURL.getHost())
.setPort(backendURL.getPort())
.setScheme(backendURL.getScheme())
.build();
} catch (URISyntaxException e) {
Util.sendError(ctx, 400, INVALID_REQUEST_URL);
return;
}
漏洞利用:
- Apache HttpComponents 4.5.1版本不检测uri是否以
/开头 - 可构造
http://public-backend@host形式的请求 @前的public-backend被当作用户名- 实际请求发送到
host指定的地址
3. 工具实现与改进
3.1 collaborator-everywhere工具
特点:
- 专注于请求头注入
- 自动关联请求与访问记录
- 循环检测collaborator收到的请求
局限性:
- 注入点仅涵盖header字段
- 情况覆盖不全面
- 直接修改referer等字段可能导致请求出错
3.2 Blind-SSRF工具
特点:
- 补充了collaborator-everywhere的不足
- 采用逐个请求头添加的方式
- 一个请求包只增加一个字段
局限性:
- 不能直观展示漏洞情况
3.3 Burp4SSRF改进方案
改进点:
-
架构调整:
- 从继承
IProxyListener改为IScannerCheck - 使用被动扫描方式减少对正常请求的影响
- 从继承
-
扫描逻辑:
- 扫描逻辑位于
Injector的doPassiveScan函数 injectPayloads注入header和param到requestmakeHttpRequest函数发送请求
- 扫描逻辑位于
-
新增处理函数:
injectAnyWhere函数处理Host和uri注入点- 对raw和host单独处理
- 每个payload单独发送请求(因会不可逆影响请求体)
实现效果:
- 覆盖更广的注入场景
- 减少对正常请求的干扰
- 更直观的漏洞展示
4. 实际应用与结果
检测流程:
- 发送构造的畸形请求
- 监控DNS平台接收的请求
- 关联触发请求与访问记录
- 验证SSRF漏洞存在
典型结果:
- 可能不会立即收到DNS请求
- 后续时间段可能收到不同请求信息
- 证明存在无回显SSRF风险
5. 未来改进方向
-
DNSLog稳定性:
- Burp自带DNSLog有时不稳定
- 考虑替代方案
-
请求查看问题:
- 某些畸形请求无法通过Burp日志查看
- 需要改进请求记录方式
-
功能扩展:
- 增加更多注入场景
- 提高检测准确性
- 优化结果展示
6. 总结
SSRF检测需要结合多种技术手段,通过构造特殊请求、利用服务器解析漏洞、监控外部请求等方式综合判断。工具改进应注重减少对正常请求的影响,提高检测覆盖面和结果可读性。持续关注服务器组件更新和新的解析漏洞对提升检测能力至关重要。