Web安全之SSRF攻击与防御详解
字数 931 2025-11-10 14:25:08

Web安全之SSRF攻击与防御详解

一、攻击描述
SSRF(Server-Side Request Forgery)是一种由攻击者构造请求,让服务端发起非预期网络请求的安全漏洞。攻击者利用服务端应用作为代理,间接访问内部系统或第三方系统,常导致信息泄露、内网渗透等风险。

二、攻击原理深度解析

  1. 漏洞产生条件

    • 服务端存在可从外部获取数据的功能(如图片下载、网页抓取)
    • 请求目标URL可由用户直接或间接控制
    • 服务端对目标地址校验不足
  2. 常见触发场景

    • 远程图片下载(通过URL获取头像/封面)
    • 网页内容抓取(预览功能、翻译服务)
    • 文件读取(通过file://协议读取本地文件)
    • Webhook回调测试功能

三、攻击流程分步详解

  1. 探测漏洞点

    • 寻找所有接收URL参数的功能点
    • 测试不同协议支持情况(HTTP/HTTPS/FTP等)
    • 观察错误信息判断服务端处理逻辑
  2. 构造恶意请求

    POST /api/fetch_url HTTP/1.1
    Content-Type: application/json
    
    {
      "url": "http://192.168.1.1/admin"
    }
    
  3. 利用方式分类

    • 基础探测:访问内网存活主机
    • 协议利用:使用file://读取敏感文件
    • 重绑定攻击:利用DNS重定向绕过校验
    • 端口扫描:通过响应时间判断端口开放状态

四、防御策略分层实现

  1. 输入校验层

    • 白名单校验:只允许特定域名或IP段
    const allowedDomains = ['example.com', 'cdn.example.com'];
    function validateUrl(inputUrl) {
      const url = new URL(inputUrl);
      return allowedDomains.includes(url.hostname);
    }
    
  2. 协议限制层

    • 禁用危险协议(file://、gopher://、dict://)
    • 限制只允许HTTP/HTTPS协议
  3. 网络隔离层

    • 设置网络访问白名单
    • 使用中间代理服务器进行出站请求
    • 禁止访问回环地址(127.0.0.1、localhost)
  4. 请求过滤层

    • 解析目标IP,禁止内网IP段访问
    function isInternalIP(ip) {
      const ranges = [
        '10.0.0.0/8',
        '172.16.0.0/12', 
        '192.168.0.0/16',
        '127.0.0.0/8'
      ];
      return ranges.some(range => isIPInRange(ip, range));
    }
    

五、进阶防御方案

  1. DNS重绑定防护

    • 解析域名后立即校验IP
    • 请求前后进行双重DNS解析比对
  2. 重定向防护

    • 限制重定向次数(最多2-3次)
    • 对重定向目标进行再次校验
  3. 时间盲注防护

    • 设置请求超时时间(如5秒)
    • 监控异常响应时间模式

六、实战检测方法

  1. 自动化工具

    • 使用SSRFmap、Gopherus等工具检测
    • 编写自定义Payload进行fuzz测试
  2. 手动验证

    • 尝试访问已知存在的内网服务
    • 使用Burp Collaborator检测带外数据渗出

通过分层防御和持续监控,可有效降低SSRF攻击风险,保护内网资源安全。

Web安全之SSRF攻击与防御详解 一、攻击描述 SSRF(Server-Side Request Forgery)是一种由攻击者构造请求,让服务端发起非预期网络请求的安全漏洞。攻击者利用服务端应用作为代理,间接访问内部系统或第三方系统,常导致信息泄露、内网渗透等风险。 二、攻击原理深度解析 漏洞产生条件 : 服务端存在可从外部获取数据的功能(如图片下载、网页抓取) 请求目标URL可由用户直接或间接控制 服务端对目标地址校验不足 常见触发场景 : 远程图片下载(通过URL获取头像/封面) 网页内容抓取(预览功能、翻译服务) 文件读取(通过file://协议读取本地文件) Webhook回调测试功能 三、攻击流程分步详解 探测漏洞点 : 寻找所有接收URL参数的功能点 测试不同协议支持情况(HTTP/HTTPS/FTP等) 观察错误信息判断服务端处理逻辑 构造恶意请求 : 利用方式分类 : 基础探测 :访问内网存活主机 协议利用 :使用file://读取敏感文件 重绑定攻击 :利用DNS重定向绕过校验 端口扫描 :通过响应时间判断端口开放状态 四、防御策略分层实现 输入校验层 : 白名单校验:只允许特定域名或IP段 协议限制层 : 禁用危险协议(file://、gopher://、dict://) 限制只允许HTTP/HTTPS协议 网络隔离层 : 设置网络访问白名单 使用中间代理服务器进行出站请求 禁止访问回环地址(127.0.0.1、localhost) 请求过滤层 : 解析目标IP,禁止内网IP段访问 五、进阶防御方案 DNS重绑定防护 : 解析域名后立即校验IP 请求前后进行双重DNS解析比对 重定向防护 : 限制重定向次数(最多2-3次) 对重定向目标进行再次校验 时间盲注防护 : 设置请求超时时间(如5秒) 监控异常响应时间模式 六、实战检测方法 自动化工具 : 使用SSRFmap、Gopherus等工具检测 编写自定义Payload进行fuzz测试 手动验证 : 尝试访问已知存在的内网服务 使用Burp Collaborator检测带外数据渗出 通过分层防御和持续监控,可有效降低SSRF攻击风险,保护内网资源安全。