Web安全-SSRF服务端请求伪造
字数 1796 2025-08-10 12:17:58

SSRF(服务端请求伪造)漏洞全面解析与防御指南

一、SSRF基础概念

SSRF(Server-Side Request Forgery,服务端请求伪造)是攻击者构造恶意链接传给服务端执行造成的漏洞,主要用于外网探测或攻击内网服务。

与CSRF的区别

特性 SSRF CSRF
攻击目标 服务器本身 用户浏览器
利用方式 滥用服务器对外请求功能 利用用户已认证状态
关键问题 服务器对URL信任过度 服务器缺乏随机token校验
防御重点 URL输入过滤与限制 增加随机token和referer检查

二、SSRF漏洞成因

主要由于服务器提供了从其他服务器获取数据的功能,但缺乏严格的过滤与限制,导致攻击者可传入任意地址让后端服务器请求。

典型场景:后端代码直接请求用户提供的未经验证URL。

三、SSRF攻击危害

  1. 信息收集

    • 获取web应用可达服务器的banner信息
    • 收集内网服务指纹信息(开放端口、中间件版本等)
    • 探测内部网络和端口信息
  2. 内网攻击

    • 攻击内网系统或应用程序
    • 通过漏洞获取webshell(如Struts2命令执行、Redis未授权访问等)
  3. 资源访问

    • 通过URL Scheme读取内部资源
    • 让服务器执行特定攻击动作

四、常见漏洞场景

  1. URL分享功能:通过目标地址获取网页/图片内容
  2. 在线翻译服务:可构造恶意请求获取回显
  3. 图片加载与下载:非直接使用img标签的图片处理
  4. 收藏功能:获取URL内容的title和文本
  5. 社交分享:获取超链接标题等内容
  6. 转码服务:为移动设备优化网页内容
  7. 云服务器监控:远程执行存活检测命令
  8. 网站采集/抓取:对用户提供URL进行信息采集
  9. 邮件系统:接收邮件服务地址
  10. 文件处理:ffmpeg、ImageMagick、docx/pdf/xml处理器等
  11. 未公开API:扩展调用URL的功能
  12. 关键词功能:包含share、wap、url、link、src、source、target等参数的功能

五、漏洞利用技术

1. 协议利用

dict协议

  • 用途:探测端口服务版本信息
  • 示例:
    curl -v 'dict://127.0.0.1:22'
    curl -v 'http://example.com/ssrf.php?url=dict://139.9.198.30:22'
    

file协议

  • 用途:读取文件系统内容
  • 示例:
    curl -v 'file:///etc/passwd'
    curl -v 'http://example.com/ssrf.php?url=file:///etc/passwd'
    

gopher协议

  • 用途:构造任意TCP数据
  • 示例:
    gopher://10.0.0.1:6789/Hi%0aEveryone%0athis%20is%20just%20a%20test
    

2. 危险PHP函数

  1. curl_exec()

    • 端口探测:dict://127.0.0.1:22
    • 可结合Burp进行端口爆破
  2. file_get_contents()

    • 文件读取:file:///etc/passwd
    • 使用伪协议读取源码:
      php://filter/read=convert.base64-encode/resource=fgc.php
      
  3. fsockopen()

    • 可指定IP和端口获取信息

3. 敏感文件路径

  • Windows

    file://c:\windows\win.ini
    
  • Linux

    file:///etc/passwd
    file:///etc/httpd/conf/httpd.conf
    

六、无回显SSRF利用

  1. HTTP带外通道

    • 使用Burp Collaborator client
    • 构造请求使服务器访问Collaborator地址
  2. DNSlog

    • 使用http://dnslog.cn/
    • 让服务器发起DNS查询以确认漏洞存在

七、绕过技术

  1. URL解析绕过

    http://www.baidu.com@10.10.10.10
    
  2. IP格式转换

    • 八进制:0300.0250.1192.168.0.1
    • 十六进制:0xC0.0xA8.0.1
    • 十进制:3232235521
    • 十六进制整数:0xC0A80001
  3. 端口添加

    10.10.10.80:80
    
  4. xip.io/xip.name

    192.168.0.1.xip.io
    
  5. 短网址

    • 通过https://www.ft12.com/生成短链
  6. 特殊字符

    127。0。0。1
    
  7. IPv6格式

    http://[::]:80/
    
  8. @符号

    xxx.com@10.10.10.10
    

八、防御措施

  1. 输入过滤

    • 验证远程服务器响应
    • 统一错误信息避免信息泄露
  2. 限制措施

    • 限制请求端口为常用HTTP端口(80,443)
    • 设置内网IP黑名单
    • 禁用不需要的协议(仅允许http/https)
  3. 代码层面

    • 对用户提供的URL进行严格校验
    • 使用白名单机制限制可访问域名
    • 避免直接使用用户输入构造请求
  4. 网络层面

    • 内网服务设置严格访问控制
    • 关键服务设置网络隔离

九、总结

SSRF漏洞危害严重,可导致内网渗透和数据泄露。开发人员应:

  1. 永远不信任用户提供的URL
  2. 实施严格的输入验证和过滤
  3. 限制服务器发起的网络请求范围和协议
  4. 对敏感操作实施多层防护

通过全面的防御措施和持续的漏洞检测,可有效降低SSRF漏洞风险。

SSRF(服务端请求伪造)漏洞全面解析与防御指南 一、SSRF基础概念 SSRF (Server-Side Request Forgery,服务端请求伪造)是攻击者构造恶意链接传给服务端执行造成的漏洞,主要用于外网探测或攻击内网服务。 与CSRF的区别 | 特性 | SSRF | CSRF | |------|------|------| | 攻击目标 | 服务器本身 | 用户浏览器 | | 利用方式 | 滥用服务器对外请求功能 | 利用用户已认证状态 | | 关键问题 | 服务器对URL信任过度 | 服务器缺乏随机token校验 | | 防御重点 | URL输入过滤与限制 | 增加随机token和referer检查 | 二、SSRF漏洞成因 主要由于服务器提供了从其他服务器获取数据的功能,但缺乏严格的过滤与限制,导致攻击者可传入任意地址让后端服务器请求。 典型场景:后端代码直接请求用户提供的未经验证URL。 三、SSRF攻击危害 信息收集 : 获取web应用可达服务器的banner信息 收集内网服务指纹信息(开放端口、中间件版本等) 探测内部网络和端口信息 内网攻击 : 攻击内网系统或应用程序 通过漏洞获取webshell(如Struts2命令执行、Redis未授权访问等) 资源访问 : 通过URL Scheme读取内部资源 让服务器执行特定攻击动作 四、常见漏洞场景 URL分享功能 :通过目标地址获取网页/图片内容 在线翻译服务 :可构造恶意请求获取回显 图片加载与下载 :非直接使用img标签的图片处理 收藏功能 :获取URL内容的title和文本 社交分享 :获取超链接标题等内容 转码服务 :为移动设备优化网页内容 云服务器监控 :远程执行存活检测命令 网站采集/抓取 :对用户提供URL进行信息采集 邮件系统 :接收邮件服务地址 文件处理 :ffmpeg、ImageMagick、docx/pdf/xml处理器等 未公开API :扩展调用URL的功能 关键词功能 :包含share、wap、url、link、src、source、target等参数的功能 五、漏洞利用技术 1. 协议利用 dict协议 用途:探测端口服务版本信息 示例: file协议 用途:读取文件系统内容 示例: gopher协议 用途:构造任意TCP数据 示例: 2. 危险PHP函数 curl_ exec() : 端口探测: dict://127.0.0.1:22 可结合Burp进行端口爆破 file_ get_ contents() : 文件读取: file:///etc/passwd 使用伪协议读取源码: fsockopen() : 可指定IP和端口获取信息 3. 敏感文件路径 Windows : Linux : 六、无回显SSRF利用 HTTP带外通道 : 使用Burp Collaborator client 构造请求使服务器访问Collaborator地址 DNSlog : 使用http://dnslog.cn/ 让服务器发起DNS查询以确认漏洞存在 七、绕过技术 URL解析绕过 : IP格式转换 : 八进制: 0300.0250.1 → 192.168.0.1 十六进制: 0xC0.0xA8.0.1 十进制: 3232235521 十六进制整数: 0xC0A80001 端口添加 : xip.io/xip.name : 短网址 : 通过https://www.ft12.com/生成短链 特殊字符 : IPv6格式 : @符号 : 八、防御措施 输入过滤 : 验证远程服务器响应 统一错误信息避免信息泄露 限制措施 : 限制请求端口为常用HTTP端口(80,443) 设置内网IP黑名单 禁用不需要的协议(仅允许http/https) 代码层面 : 对用户提供的URL进行严格校验 使用白名单机制限制可访问域名 避免直接使用用户输入构造请求 网络层面 : 内网服务设置严格访问控制 关键服务设置网络隔离 九、总结 SSRF漏洞危害严重,可导致内网渗透和数据泄露。开发人员应: 永远不信任用户提供的URL 实施严格的输入验证和过滤 限制服务器发起的网络请求范围和协议 对敏感操作实施多层防护 通过全面的防御措施和持续的漏洞检测,可有效降低SSRF漏洞风险。