SSRF 验证是什么
SSRF(Server-Side Request Forgery,服务端请求伪造)指服务端根据用户可控输入去发起请求,典型入口是 URL 参数、webhook 回调地址、头像与图片抓取、文档在线预览。攻击者可借此让服务器访问本应不可达的资源,例如内网服务或本机端口。验证的重点不是打通内网,而是判断请求目标是否由用户完全控制、以及服务端是否做了目标校验。常见做法是把目标 URL 换成自建的可控地址,观察回显服务是否收到来自应用服务器的请求,再对比内网地址与公网地址的响应差异。云元数据地址一律不主动请求。
基本信息
| 风险类型 | 服务端请求伪造,CWE-918 |
|---|---|
| 典型入口 | URL 参数、回调地址、头像或图片抓取、文档预览 |
| 验证方式 | 指向自建回显服务,观察请求到访与响应差异 |
| 边界 | 不做端口扫描式利用,不请求云元数据地址 |
| 修复方向 | 地址白名单、协议限制、禁止跟随跳转、出网管控 |
典型使用场景
- 图片与头像抓取:填一个外部 URL 让服务端下载
- 文档在线预览:服务端拉取用户提交的文档地址
- webhook 回调:配置回调地址后由服务端发起请求
- URL 导入:博客导入、订阅源抓取、书签解析
- 代理与转换接口:图片压缩、截图、PDF 生成类服务
验证流程
验证流程
1. 用自建可控地址(如内部测试机)替换目标 URL 参数
2. 在回显服务上确认是否收到来自应用服务器的请求
3. 对比内网地址与公网地址的响应差异,判断校验缺失
4. 检查是否可绕过(跳转、短链、编码变体)——仅记录思路
5. 记录请求样本与网络路径(脱敏),不深入利用常见防护与缺口
| 防护措施 | 说明 | 常见缺口 |
|---|---|---|
| 域名白名单 | 仅允许特定域名 | 白名单域名存在跳转或不校验路径时可被利用 |
| 协议限制 | 只允许 http/https | 其他协议与大小写、编码变体需一并核查 |
| 禁止内网地址 | 过滤 127.0.0.1、10.0.0.0/8 等 | 过滤不完整,可被进制或短写形式绕过 |
| 禁止跟随跳转 | 不自动重定向 | 未关闭跳转时,公网地址可跳向内网 |
| 出网与 DNS 管控 | 限制服务器可访问的网络 | DNS 重绑定可绕过前期校验 |
不要在授权外做端口探测式 SSRF 利用;云元数据地址一律不主动请求,改用配置核查判断防护是否到位。
修复视角:优先使用地址白名单;无法白名单时,需在解析后校验目标 IP,限制协议与端口,禁止跟随跳转,并对出网流量做统一管控。