SSRF 漏洞实战:内网探测、云元数据窃取一条龙

文章目录

    • [一、SSRF 到底伪造了谁](#一、SSRF 到底伪造了谁)
    • 二、常见"一条龙"入口
    • [三、内网探测:SSRF 当扫描仪](#三、内网探测:SSRF 当扫描仪)
      • [1. 为什么能探](#1. 为什么能探)
      • [2. 探测在实战中的意义](#2. 探测在实战中的意义)
      • [3. 授权测试怎么做才不添乱](#3. 授权测试怎么做才不添乱)
      • [4. DNS 与绕过思维(防守要懂)](#4. DNS 与绕过思维(防守要懂))
    • [四、云元数据窃取:SSRF 最刺痛云的那一下](#四、云元数据窃取:SSRF 最刺痛云的那一下)
      • [1. 元数据服务是什么](#1. 元数据服务是什么)
      • [2. 为什么说"一条龙"而不是单点洞](#2. 为什么说“一条龙”而不是单点洞)
      • [3. IMDSv1 与 IMDSv2(以 AWS 公开模型为例)](#3. IMDSv1 与 IMDSv2(以 AWS 公开模型为例))
      • [4. 用户数据与其它敏感项](#4. 用户数据与其它敏感项)
      • [5. 授权验证注意](#5. 授权验证注意)
    • 五、一条龙链路的完整叙事(便于汇报)
    • 六、防御:真正管用的几层
      • [1. 业务层------能不做远程拉取就不做](#1. 业务层——能不做远程拉取就不做)
      • [2. URL 允许列表](#2. URL 允许列表)
      • [3. 协议白名单](#3. 协议白名单)
      • [4. 网络层](#4. 网络层)
      • [5. 云元数据](#5. 云元数据)
      • [6. 响应处理](#6. 响应处理)
      • [7. 检测](#7. 检测)
      • [8. WAF / RASP](#8. WAF / RASP)
    • 七、收尾

SSRF(Server-Side Request Forgery,服务端请求伪造)有一句很形象的概括:

本来该由浏览器去请求的地址,变成了服务器替你去请求

图片预览、文章抓取、Webhook 测试、PDF 渲染、链接转卡片、仓库导入......这些功能很常见,也很好用。麻烦在于:服务端出网或出内网时,若 URL 完全由用户说了算,服务器就成了攻击者的代理探针------扫内网、撞管理端口、打不上公网却打得进的组件,在云上还能顺手问一句"元数据服务,把临时凭证给我吧"。


一、SSRF 到底伪造了谁

伪造的是服务端的身份与网络位置

防火墙可能允许应用服务器访问内网 Redis、未鉴权的管理接口、云厂商链路本地元数据;却不允许你的笔记本直接访问。SSRF 让请求从"应用服务器"发出来,于是边界策略被借道。

和 CSRF 别混:

CSRF SSRF
谁发请求 受害者浏览器 漏洞服务器
借谁的势 用户 Cookie 服务器网络位置/权限
典型目标 用户态操作 内网、元数据、本地服务

二、常见"一条龙"入口

优先怀疑这些参数名与功能:

  • urllinksrctargetwebhookcallbackfeed
  • 头像/图片远程拉取
  • 文档/网页转 PDF、截图服务
  • 健康检查、主动探测
  • 第三方集成"测试连接"

协议也不止 http://file://gopher://dict://、重定向跳转,都可能扩大能力,取决于语言库与取消能力。能禁协议就禁,只留 http/https。


三、内网探测:SSRF 当扫描仪

1. 为什么能探

应用服务器通常位于内网网段,对 10.0.0.0/8172.16.0.0/12192.168.0.0/16127.0.0.1 的访问策略,比互联网用户宽。攻击者改 URL 主机为内网 IP 或域名,根据响应时间、状态码、报错片段、页面长度差异,判断端口是否开放、服务是什么。

2. 探测在实战中的意义

不是为了"扫全 C 段很酷",而是为了找:

  • 未授权 Redis / 数据库 / 弹性控制台;
  • 仅内网可达的管理后台;
  • Kubernetes 管理接口、云厂商内网组件;
  • 本机 127.0.0.1 上的调试端口。

一旦找到未鉴权服务,危害可能从 SSRF 升级到 RCE 或数据泄露------根因仍是内网服务裸奔 + SSRF 入口

3. 授权测试怎么做才不添乱

  • 限速,避免把内网扫瘫;
  • 先证明确可打到回环或已知测试服务;
  • 记录可访问的敏感网段类型,而不是输出完整活端口字典给无关人员;
  • 推动内网服务鉴权与网络分段,而不只是修一个参数。

4. DNS 与绕过思维(防守要懂)

攻击者可能用:

  • 十进制/异形 IP、短地址;
  • 域名先解析到公网再改到内网(DNS Rebinding,定时条件更苛刻);
  • 302 跳到内网;
  • 大小写、稀有解析差异。

因此防御不能只写 startsWith("http") 且不含 10. 这种幼稚过滤,要解析后校验、禁跳转或校验跳转目标、统一出站代理策略


四、云元数据窃取:SSRF 最刺痛云的那一下

1. 元数据服务是什么

云主机(EC2、CVM、ECS 等)上常有一个链路本地 地址,供实例查询自身信息:主机名、用户数据、临时凭证 等。经典讨论最多的是类似 http://169.254.169.254/ 这类地址(各云路径不同)。

设计意图:应用合法取临时角色凭证,免填长效密钥。

SSRF 风险:用户若能让服务器去请求该地址,就可能读到本应只有实例本地能拿的凭证,再拿凭证调云 API------列存储桶、读密钥、建高权限用户,取决于角色权限。

这就是"一条龙"里最吓人的那截:SSRF → 元数据 → 临时密钥 → 云 API。

2. 为什么说"一条龙"而不是单点洞

text 复制代码
① 业务存在 URL 拉取类功能(入口)
② 无严格出站限制,能访问链路本地/内网(网络)
③ 元数据服务可被简单 GET 打到(尤其旧版无会话头校验的模式)
④ 实例角色权限过大(权限)
⑤ 凭证可在实例外使用(身份)

只修 ① 也能救急;要从架构上变难,需要 ②③④⑤ 一起收。

3. IMDSv1 与 IMDSv2(以 AWS 公开模型为例)

AWS 等云厂商推进了更安全的元数据访问方式:需要先拿会话 token(PUT 等),再带头发请求。这让单纯的 SSRF GET 难直接拖走凭证。

运维侧应:

  • 强制较新的元数据服务模式(如仅 IMDSv2);
  • 给实例角色最小权限
  • 敏感负载甚至考虑无角色或极窄角色。

其它云有各自的元数据安全机制与加固文档,原则相通:默认难取、权限最小、网络可观测。

4. 用户数据与其它敏感项

元数据里除了凭证,还可能有启动脚本、密钥残留、内部域名。SSRF 读到用户数据同样危险。清理镜像与用户数据中的秘密,和防 SSRF 一样重要。

5. 授权验证注意

在自有实验账号演示"能读到元数据"时,使用最小角色,读完即轮换,勿把真实密钥贴进报告附件。客户环境中,能证明"请求可达元数据地址且返回结构异常敏感"时,优先停机修复与角色收敛,而不是继续用偷来的权限做横向炫耀。


五、一条龙链路的完整叙事(便于汇报)

用故事板给领导或开发讲:

  1. 攻击者在"导入链接预览"处提交内网或元数据 URL;
  2. 应用服务器发起请求;
  3. 先探测到内网某未授权服务(可选分支);
  4. 或直接读到云临时凭证;
  5. 用凭证访问对象存储/计算 API;
  6. 数据外泄或资源被挖矿。

修复汇报时对应四张牌:入口校验、出站管控、元数据加固、角色收敛。 只说"我们过滤了 169.254"而不做角色收敛,仍会在下一次绕过后重演。


六、防御:真正管用的几层

1. 业务层------能不做远程拉取就不做

能让浏览器直传的,别经服务器中转。必须中转时,进入统一"出站访问服务"。

2. URL 允许列表

只允许访问企业配置过的域名集合;拒绝 IP 字面量(看业务);禁止内网与链路本地网段。

校验要在解析之后做,并防 DNS 再绑定;限制重定向次数与目标。

3. 协议白名单

https(或 http 也严格),禁用 file/gopher/dict 等。

4. 网络层

应用节点对 169.254.169.254、内网管理段默认拒绝,仅对必要固定目标放行。

出站经代理,代理侧做策略与审计。

5. 云元数据

强制加固模式(如仅 v2);角色最小权限;敏感实例单独账号与网络。

6. 响应处理

不要把内网服务的原始响应全文回给用户;统一错误信息。减少"用响应内容当布尔探针"。

7. 检测

应用日志记录出站 URL(注意脱敏);对访问元数据地址、异常内网网段的请求告警;云侧监控异常角色调用(陌生 IP 用临时密钥)。

8. WAF / RASP

可拦一批明显的元数据 IP 与内网地址,辅防而已;编码与跳转能绕字符串规则。


七、收尾

SSRF 的可怕,不在于 payload 花哨,而在于它借用了你最信任的那台机器的网络身份。内网探测揭示分段与鉴权失败;云元数据窃取揭示"临时凭证其实是高权限钥匙"。一条龙能走通,往往是功能图省事 + 网络默认通 + 角色过大的合力。

防守请记住更短的一句:

用户可控的 URL,只能打到你点头同意的目的地;
元数据要难取,角色要最小,出站要可审计。

今晚若只做一件事:搜代码里所有 HTTP 客户端出站,列出"URL 是否用户可控";同时查云主机是否强制安全元数据模式、角色权限是否宽得离谱。

这两件事做完,你对 SSRF 一条龙的防御,就已经从口头对齐变成了可执行的排查。


相关推荐
我爱cope1 小时前
【计算机网络 | 物理层3:数字编码与调制:比特如何变成可传输的信号?】
网络·学习·计算机网络
yunwei371 小时前
eBPF 教程:精准隔离已建立的 TCP 连接
linux·安全·开源
潘志宏_ZHPAN1 小时前
智能体互联网:原理、架构与开发实践—项目6:智能体安全与生命周期管理
网络·安全
147API1 小时前
AI 图片编辑接口报 400 怎么排查?先读错误体,再查参数、图片与 mask
网络·人工智能
戴西软件2 小时前
戴西CAxWorks.VPG车辆工程仿真软件技术解析(上)——安全仿真体系的自动化构建
运维·网络·数据库·人工智能·算法·安全·自动化
ZENERGY-众壹2 小时前
电力监控系统安全防护实战:如何将生产大区逆变器数据安全穿透至 SIS 平台
安全·系统安全
砚凝霜2 小时前
软考网络工程师|第 6 章 应用层安全协议、防火墙完整备考笔记
网络·笔记·安全
gnhpc13 小时前
国产龙芯主板为智能电网网络安全升级筑牢防护屏障
安全
小马过河R3 小时前
AI Coding应用上线安全实践指南
人工智能·安全·安全架构·engineering·ai coding·harness