SSRF 漏洞

面试官想考什么

  • 是否理解 SSRF 的本质。
  • 是否知道常见触发场景。
  • 是否知道常用协议和绕过方式。
  • 是否知道 SSRF 的危害和修复。

一句话定义

1
SSRF 是服务端请求伪造,攻击者可以控制服务端发起请求的目标地址,让服务器代替攻击者访问内部或外部资源。

产生原因

  • 后端根据用户输入的 URL 发起请求。
  • 没有严格校验协议、域名、IP 和跳转地址。
  • 没有限制访问内网、localhost、云 metadata。

常见场景

  • URL 预览。
  • 图片抓取。
  • 远程下载。
  • Webhook。
  • PDF 生成。
  • 在线截图。
  • 从 URL 导入文件。
  • 头像远程加载。

常用协议

协议 用途
http/https 访问内网 Web 服务
file 读取本地文件,取决于后端是否支持
gopher 构造原始 TCP 请求,历史上常用于攻击 Redis 等服务
dict 探测端口或特定服务
ftp 访问 FTP 服务
ldap 特定环境下可用于内网服务请求

测试方法

1
我会先找可控 URL 参数,用 DNSLog 或自己的 VPS 验证服务端是否发起请求。如果能收到请求,再测试 127.0.0.1、localhost、内网 IP、云 metadata 地址和常见内网端口,判断是否能访问内部资源。

黑名单绕过

  • 127.0.0.1 变形。
  • localhost
  • 0.0.0.0
  • IPv6:[::1]
  • 十进制 IP。
  • 八进制 IP。
  • 十六进制 IP。
  • 短地址。
  • @ 符号绕过。
  • 302 跳转。
  • DNS rebinding。
  • 白名单子域名绕过。
  • 大小写和 URL 编码。

危害

  • 探测内网主机和端口。
  • 访问内网管理后台。
  • 读取云 metadata。
  • 攻击 Redis、Elasticsearch 等内网服务。
  • 绕过外网访问限制。

修复方案

  • 做 URL 白名单。
  • 只允许 http/https。
  • 禁止访问内网 IP、localhost、保留地址段。
  • 解析域名后校验真实 IP。
  • 禁止自动跳转,或跳转后重新校验。
  • 屏蔽云 metadata 地址。
  • 设置超时和响应大小限制。
  • 记录日志和告警。

面试标准回答

1
2
3
4
5
6
7
SSRF 是服务端请求伪造,核心是攻击者能控制服务端请求的目标地址,让服务器代替攻击者访问内部或外部资源。

它常见于 URL 预览、图片抓取、远程下载、Webhook、PDF 生成等功能。测试时我会先用 DNSLog 或自己的服务器确认服务端是否发起请求,再测试 localhost、127.0.0.1、内网 IP、云 metadata 和常见内网端口。

常见利用协议包括 http/https、file、gopher、dict、ftp 等。绕过方面会看 IP 变形、localhost 变形、IPv6、302 跳转、DNS rebinding、@ 符号和白名单绕过。

修复上主要是白名单限制、禁止访问内网和保留地址段、限制协议、校验跳转后的真实地址,并做好超时和日志监控。