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检测技术

三种检测类型

  1. 增加特定请求头

    • 示例请求头:WL-Proxy-Client-IP
    • 类似于X-Forwarded-For,用于获取客户端IP
  2. 修改Host字段

    • 利用服务器对Host字段处理不当的漏洞
  3. 对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改进方案

改进点

  1. 架构调整

    • 从继承IProxyListener改为IScannerCheck
    • 使用被动扫描方式减少对正常请求的影响
  2. 扫描逻辑

    • 扫描逻辑位于InjectordoPassiveScan函数
    • injectPayloads注入header和param到request
    • makeHttpRequest函数发送请求
  3. 新增处理函数

    • injectAnyWhere函数处理Host和uri注入点
    • 对raw和host单独处理
    • 每个payload单独发送请求(因会不可逆影响请求体)

实现效果

  • 覆盖更广的注入场景
  • 减少对正常请求的干扰
  • 更直观的漏洞展示

4. 实际应用与结果

检测流程

  1. 发送构造的畸形请求
  2. 监控DNS平台接收的请求
  3. 关联触发请求与访问记录
  4. 验证SSRF漏洞存在

典型结果

  • 可能不会立即收到DNS请求
  • 后续时间段可能收到不同请求信息
  • 证明存在无回显SSRF风险

5. 未来改进方向

  1. DNSLog稳定性

    • Burp自带DNSLog有时不稳定
    • 考虑替代方案
  2. 请求查看问题

    • 某些畸形请求无法通过Burp日志查看
    • 需要改进请求记录方式
  3. 功能扩展

    • 增加更多注入场景
    • 提高检测准确性
    • 优化结果展示

6. 总结

SSRF检测需要结合多种技术手段,通过构造特殊请求、利用服务器解析漏洞、监控外部请求等方式综合判断。工具改进应注重减少对正常请求的影响,提高检测覆盖面和结果可读性。持续关注服务器组件更新和新的解析漏洞对提升检测能力至关重要。

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处理漏洞示例 : 漏洞利用 : 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到request makeHttpRequest 函数发送请求 新增处理函数 : injectAnyWhere 函数处理Host和uri注入点 对raw和host单独处理 每个payload单独发送请求(因会不可逆影响请求体) 实现效果 : 覆盖更广的注入场景 减少对正常请求的干扰 更直观的漏洞展示 4. 实际应用与结果 检测流程 : 发送构造的畸形请求 监控DNS平台接收的请求 关联触发请求与访问记录 验证SSRF漏洞存在 典型结果 : 可能不会立即收到DNS请求 后续时间段可能收到不同请求信息 证明存在无回显SSRF风险 5. 未来改进方向 DNSLog稳定性 : Burp自带DNSLog有时不稳定 考虑替代方案 请求查看问题 : 某些畸形请求无法通过Burp日志查看 需要改进请求记录方式 功能扩展 : 增加更多注入场景 提高检测准确性 优化结果展示 6. 总结 SSRF检测需要结合多种技术手段,通过构造特殊请求、利用服务器解析漏洞、监控外部请求等方式综合判断。工具改进应注重减少对正常请求的影响,提高检测覆盖面和结果可读性。持续关注服务器组件更新和新的解析漏洞对提升检测能力至关重要。