Skip to content

SSRF 与文件上传

SSRF 原理与防护、文件上传漏洞与校验。

Updated View as Markdown
For humans

SSRF 与文件上传

两个“后端特有”的高危漏洞:SSRF 打内网,文件上传打服务器

SSRF:服务端请求伪造

原理:服务器替用户发起请求(拉取 URL、导入功能),攻击者利用它访问内网资源

功能: 传入图片 URL, 服务器抓取
攻击: url = http://169.254.169.254/latest/meta-data/  ← 云元数据(凭据!)
      url = http://内网IP:6379/                       ← 打 Redis

危害:读取云元数据(AK/SK)、扫描内网、攻击内网服务(Redis/数据库)。

防护

措施
输入 URL 白名单(域名/协议)、禁止内网网段、禁止重定向跟随
网络 服务器出网隔离(防火墙/安全组),元数据服务加认证
响应 返回内容过滤(不返回原始响应给用户)
实现 用库解析 URL(防绕过:@、编码、DNS rebinding)

DNS rebinding(考点):攻击者域名先解析公网 IP 通过校验,再解析到内网 IP。防护:校验后再次解析或用 IP 直连白名单。

文件上传漏洞

风险 攻击
恶意文件执行 上传 webshell(PHP/JSP),服务器沦陷
存储耗尽 上传超大文件/海量文件
解析绕过 双重扩展名(.jpg.php)、大小写
内容攻击 含恶意脚本的文件被下载执行(XSS)

防护清单

  1. 校验扩展名 + MIME + 内容魔数(文件头),白名单优先
  2. 重命名存储:不保留用户文件名(随机名 + 服务端扩展名)
  3. 存储与执行分离:上传目录禁脚本执行(Nginx 配置)
  4. 大小限制 + 频率限制
  5. 独立域名/对象存储:隔离执行环境(见 CDN 与静态化篇)

面试追问

  1. SSRF 是什么? 服务端替用户发请求,被利用访问内网/云元数据。拉 URL 类功能都有风险
  2. SSRF 防护? URL 白名单 + 禁内网网段 + 出网隔离 + 防重定向和 DNS rebinding
  3. DNS rebinding? 域名解析两次不一致绕过校验。解析后校验 IP 或 IP 白名单
  4. 文件上传怎么防? 白名单扩展名 + 内容魔数 + 重命名存储 + 目录禁执行 + 大小限制
  5. 上传的 webshell 怎么防执行? 存储与执行分离:上传目录禁脚本、独立域名或对象存储
Navigation

Type to search…

↑↓ navigate↵ selectEsc close