资讯动态

SSRF漏洞深度剖析:从云元数据攻击到DNS重绑定绕过实战

发布时间:2026/10/19 5:37:58 来源:尧图企业网站定制
1. 先搞清楚SSRF为什么值得你花时间研究1.1 用快递员的例子讲透SSRF的本质SSRF服务端请求伪造这几年在漏洞赏金圈子里热度一直很高。它的描述听起来很简单攻击者引诱服务器代替自己发起HTTP请求。但很多人对这个漏洞的理解停留在服务器能帮我访问某个地址这个层面这就低估了它的真实危害。打个比方。你住在一栋有门禁的大楼里楼下有个代收快递的服务中心。正常流程是你告诉客服帮我去外面某家店取件客服骑车帮你跑腿。SSRF攻击者做的事情是明明自己进不了大楼内部却利用客服的身份告诉对方顺便帮我去你们大楼内部的管理室看一眼。管理室的门牌号通常不对外公布普通访客根本摸不到可客服自己就在楼里他拿工牌刷一下门禁就到了。更麻烦的是客服进门后用的还是他自己的权限。这就是SSRF和普通漏洞之间最关键的区别它让攻击者借用了服务器本身的网络位置、身份信任和内部权限。一次成功的SSRF往往不是终点而是串联攻击的起点。在云环境里这个大楼内部变成了云平台内部网络那个管理室变成云元数据服务危害直接上升好几个等级。1.2 为什么赏金平台里SSRF的含金量越来越高我在各个漏洞赏金项目里观察了几年明显感觉SSRF的地位在逐年上升厂商愿意为它开出的奖金也越来越高。背后原因大概有三个。第一SSRF容易造成小洞牵出大洞的连环效应。一个看似只能访问内网页面的小功能点往内网探测几轮后可能碰到底层未授权服务甚至拿到远程代码执行。安全团队评估漏洞时看的是最终危害所以同一个SSRF在不同环境里评级可能完全不同。第二云原生架构放大了它的影响面。现在大量业务跑在云上云内网、对象存储、数据库实例、容器编排平台之间是可以互通的。SSRF一旦触达云元数据接口泄露的临时凭证可能覆盖很大范围权限。第三它确实不好修。看起来像是在URL输入框加个校验实际牵扯到DNS解析、协议白名单、重定向策略、网络隔离一堆问题。防御方修不干净攻击方自然反复尝试。1.3 AllThingsSSRF到底能帮你什么第一次看到AllThingsSSRF这个资料库的时候我的感受是终于有人系统性把SSRF相关的资料整理成目录了。它收录了研究文章、框架漏洞披露、绕过技巧汇总、实战payload集合还有一批真实漏洞公告的链接。但我想提醒一点光把里面的payload抄下来背诵对实战能力的提升相当有限。我见过不少新人对着payload列表一条条试试不通就卡住完全不知道为什么这个payload在某种环境里有效、换个环境就失效。真正有价值的是去理解每条绕过技术背后的攻击模式以及它对应的是哪个环节的校验缺陷。把AllThingsSSRF当成一个学习索引顺着它把知识点串成体系作用远比收藏它然后吃灰要大。2. 真实世界SSRF赏金案例攻击面在哪2.1 云元数据接口SSRF的顶级目标在云厂商的虚拟机里有一个特殊的本地地址叫云元数据服务绝大多数SSRF报告里它都是首选的验证目标。它的作用是给当前实例提供运行时的元信息比如实例ID、主机名、用户数据甚至包括绑定到该实例上的临时凭证。常见的利用链长这样研究员先找到一个能传入URL且由服务端发起请求的功能点用自己控制的地址确认请求确实从目标服务器发出然后用元数据地址去替换。一旦请求成功返回攻击者就拿到了这台云主机特有的身份凭证。接下来就可以用云厂商官方工具去列出这台主机有权限访问的存储桶、数据库或其他资源。我在整理这类报告时注意到一个高频细节不少应用会把响应内容完整回显给用户这极大降低了验证难度但也容易被厂商直接封堵。而那些不回显的应用也不是毫无破绽可以通过请求延迟、错误信息差异来半盲判断。这类案例在AllThingsSSRF里收录了不少建议重点看早期云平台漏洞的披露文章它们展示了最原始的利用思路后来的很多变种都源于那些基础操作。2.2 内网端口探测把SSRF当扫描器用SSRF最容易被忽视的攻击面其实是它作为内网端口扫描器的能力。外部扫描器看到的只是企业暴露在公网的服务而SSRF让攻击者的探测流量带上内部来源这个身份能绕过很多边界防火墙。我在真实赏金报告里见过这样的案例某网站提供一个图片代理接口前端提交远程图片地址服务端拉取图片后返回缩略图。研究员用这个接口探测内网网段通过对比响应时间和内容差异画出了内网存活主机的大致地图又定位到一台带着管理后台的服务器。整个过程中没有使用任何主动扫描工具请求全部由目标服务器发起日志里看起来就像业务在正常拉取图片。这里想说点实战心得很多人拿到SSRF就激动地开始大范围扫内网一跑就是几百个IP这是非常不明智的做法。第一大流量遍历请求会被风控系统识别账户可能被封第二日志会详细记录你的行为一旦厂商追责或者争议边界对你很不利。我在测试时倾向用小范围、多角度验证的方式比如先探测三五个明显目标确认影响后立刻收手写报告后续的影响评估留给厂商的安全团队。2.3 URL加载功能的隐藏入口很多业务功能天然就带着用户输入URL服务器去访问的逻辑这些功能点是最容易出SSRF的地方排查时建议重点看。网页截图服务算是典型代表。厂商提供输入网址生成网页缩略图的接口这个功能本质上就是让服务器去抓取页面再渲染成图片。攻击者提交一个内网地址页面截图会直接把内网后台的长相展现出来。我在分析报告时看到过利用截图功能读取内网管理后台页面内容的案例攻击者甚至不需要看懂响应数据看图片就够了。此外还有PDF导出与预览服务、Webhook回调地址配置、文章采集与富文本导入、订阅源拉取、API调试代理等功能。判断逻辑很简单凡是用户给一个字符串服务器自己去请求的地方都值得认真测一遍。这种功能往往由业务方从开源组件二次封装而来组件自身的版本和默认配置决定了是否包含SSRF风险所以排查时不仅要测功能还要注意底层组件版本。2.4 协议级SSRF不止于HTTP如果默认SSRF只发生在HTTP协议上会错过很大一片攻击面。很多编程语言的URL处理库默认支持多种协议最常见的是file、dict、gopher。file协议可以读取服务器本地文件是快速验证SSRF回显的可靠手段dict协议用来探测内网服务指纹非常顺手交互简单、响应清晰gopher协议最灵活可以构造完整的TCP数据流历史上很多内网服务利用都靠它我的习惯是先用dict协议做快速存活判断确认目标内网存在什么服务再去决定是否用gopher构造完整利用。直接上手gopher构造复杂数据流的成本很高如果没有百分百把握建议先以确认存在漏洞、明确影响范围为主要目标把完整利用链路作为加分项而不是必选项。AllThingsSSRF里专门有协议相关的研究文章和payload集合看完你会对每个协议在不同语言库里的支持情况有清晰的认知。3. 那些让人拍大腿的绕过思路3.1 DNS重绑定两次解析之间的时间差真实报告里最常见的绕过手段之一就是DNS重绑定它在原理上很简单攻击者准备一个域名第一次解析时返回公网地址让服务端校验通过第二次真正发起请求时解析结果变成了内网地址。校验和目标请求之间出现时间差绕过就成立了。关键点是让域名的TTL足够短最好设置成1秒左右。很多服务端的校验和请求流程之间时间间隙往往比想象中大。我在分析报告时见过一个Webhook回调场景平台在添加回调地址时校验域名是公网解析研究员利用同一个域名的两条A记录和极短TTL让校验通过后实际请求指向了内网接口最终拿到了管理接口的返回数据。防御方看到这种报告时往往会很困惑因为从代码看明明做了域名校验。但真正的弱点在于校验和请求是两个独立的解析过程二者没有绑定一致。这个知识点在AllThingsSSRF的绕过技术区有很详细的分析建议在本地搭个环境复现一遍理解了它的时序关系之后不管做测试还是做防御都会顺手很多。3.2 IP地址变形进制、写法、IPv6IP黑名单防不住的一个核心原因是同一台主机的IP地址可以有很多种写法。我在看旧报告时发现这类变形技巧在十多年前就被研究透了可直到今天在真实漏洞里依然频繁出现。比较实用的整理思路是把它们分成几类。 第一类是进制混淆比如把127.0.0.1换算成十进制整数在一些库解析后依然指向本机。 第二类是写法变形比如省略地址中的某些部分或者在八进制写法前加前导零。 第三类是IPv6映射把IPv4地址映射成IPv6形式例如回环地址的映射写法绕过那些只检查IPv4字面量的规则。这里想强调一个容易被忽视的点同一个IP地址变形在Python、Java、Node.js、PHP的处理结果可能完全不同。有的语言把某些写法当非法URL直接拒绝另一些则强行修正后请求成功。所以判断的核心不是记住每个写法而是理解目标语言的URL解析特性。测试时手边放一个各语言解析对比的速查表比记忆几百个变形payload可靠得多。3.3 URL解析器的二次解析差异在真实报告里见过更多的一种情况是服务端代码和底层请求库使用了不同的URL解析规则导致校验结果和实际请求目标不一致。典型场景是这样一个逻辑代码先从URL中提取主机名做白名单判断然后把这个URL直接扔给第三方类库去发起请求。攻击者可以利用URL中符号的特殊语义在后面写入真正的主机地址前面放一个白名单域名让校验逻辑看到的是合法域名而实际请求的目标是后面的地址。这类问题的根源是二次解析也就是同一个URL被不同解析器处理了两遍而且各自对特殊字符、协议格式的容忍度不同。修复思路其实也很简单让代码在拿到URL之后只解析一次然后让校验和请求共用同一个解析结果。很多框架漏洞的修复补丁都是这么做的值得在分析AllThingsSSRF里的框架漏洞章节时结合来看。3.4 重定向链校验了开头没校验结尾还有一类绕过方式利用的是重定向链。很多服务端请求库默认跟随重定向于是攻击者可以在自己控制的域名上放一条302跳转初始URL是一个看似合法的域名服务端校验通过后请求自动跳去了内网地址。我在实际分析中印象最深的一个案例发生在一次认证回调逻辑里。系统允许配置外部回调地址后端只校验了第一个跳转的域名攻击者在自己域名上配置了指向内网的302跳转成功访问了内网API。后来排查的时候发现这个跳转目标连基本的IP段限制都没有。这类问题在现代应用里仍然高发原因也很简单很多开发者只校验用户输入的原始URL完全忽略了重定向过程可能带来的二次跳转。做好防御的一种思路是在服务端禁用重定向跟随或者对每次跳转重新执行校验逻辑而不是只信任第一次的结果。4. 从赏金猎人视角看SSRF挖掘方法4.1 先确认授权再谈测试不管在哪个平台做安全测试授权边界都是第一优先级。漏洞赏金计划通常会明确列出资产范围、允许测试的功能点、禁止的行为类型读一遍规则不用花多少时间但它决定了整个测试过程的合法性和安全性。我发现一些研究员看到功能点就兴奋立刻开始深度利用完全忽略了平台关于禁止数据访问或禁止内网探测的条款。万一测出来的影响触碰到红线轻则报告被拒重则账号被拉黑甚至引起纠纷。正确的做法是在授权范围内做最小化验证确认SSRF存在、描述清楚影响链然后把深入利用交给厂商的安全团队去评估。4.2 功能入口排查清单聊到SSRF挖掘我习惯先列一个入口清单照着功能逐个过。常见的候选功能大致包括下面这些。图片裁剪、缩略图、远程素材下载网页截图、URL分享预览、短链接生成PDF导出、报告邮件中的远程资源引入Webhook、回调URL、订阅地址配置富文本编辑器的图片插入、文章采集导入第三方API调试器、网关代理接口客服系统里的链接提交字段这些入口都有一个共同特点用户输入最终被当作URL拼进服务端请求。确认入口之后下一步就是用自己控制的地址验证这个请求到底是不是目标服务器发出的。这一步非常关键它能过滤掉大量前端发起的假SSRF避免做无用功。4.3 三层验证回显、半盲、完全盲SSRF的验证难度按回显情况分成三类处理思路完全不同。第一类是回显型页面直接返回请求的响应内容。这种最省事使用file协议读一个常见本地文件或者请求自己控制的地址看返回内容即可。但要注意回显型SSRF往往最容易引起厂商警惕测试深度要控制好。第二类是半盲型不直接回显但可以通过状态码、响应时间、内容长度推断目标状态。比如请求一个内网地址如果端口开放响应时间会明显缩短这种细微差异值得反复测几次对比。第三类是完全盲型任何响应差异都看不出来只能靠让服务器对外发出请求来确认比如向自己完全可控的服务器提交请求然后从访问日志中确认收到。盲SSRF的确认耗时最长建议在所有其他验证手段都无效时再用。4.4 写一份让评审一次通过的漏洞报告见过很多测试能力很强但报告一塌糊涂的案例漏洞明明是真的评审却花很长时间才确认甚至产生误判。关于SSRF报告我的经验是包含下面这些内容。受影响功能点和触发URL精确到具体请求参数完整的请求包和响应包方便安全团队直接复现最小化复现步骤用最少的操作还原整个链路影响评估结合云环境或内网拓扑说明潜在危害修复建议从代码和网络两个层面给出方案重要提醒不要在报告里粘贴真实的凭证内容或者敏感数据样例打码和脱敏是基本素养。报告中只说明访问到了什么类型的数据就够了证明危害不需要泄露更多。5. 从漏洞案例反推SSRF该怎么修5.1 为什么黑名单思路治不了SSRF每次看到有人用IP黑名单防SSRF我都会替他们的业务捏一把汗。因为黑名单思路本质上是在和攻击者的创造力对抗而这个漏洞的绕过手段实在太多了进制混淆、DNS重绑定、协议利用、重定向跟随每条路都能绕过一份写好的黑名单。黑名单还有一个更大的问题它很难维护完整。不同云厂商的元数据地址、内网保留段、IPv6映射写法、各种特殊协议地址数量可观且持续变化。用一份静态列表去防护动态的攻击手法长期看注定会漏。5.2 服务端URL校验的正确姿势相比黑名单我更推荐从校验逻辑本身入手。正确的流程大致是四步先解析URL提取主机名然后把主机名解析成具体的IP地址接着判断这个IP是否属于内网、保留、链路本地等危险范围最后让实际请求的目标地址严格使用这个通过校验的IP而不是重新解析。这里有个细节值得强调校验和实际连接必须是同一个解析结果。很多修复方案犯的错误是校验域名时解析一次真正发起请求时又解析了一次这中间就给DNS重绑定留了时间窗口。让应用直接连接校验过的IP而不是再次按域名去解析是修复这类问题的关键。5.3 网络层防护让请求根本出不去代码层面的校验做得再好也难免百密一疏。真正可靠的兜底防护在网络层核心思路是限制应用服务器的出站流量。一种常用做法是把服务器的出站流量收敛到业务必需的第三方接口白名单其余访问一律阻断。这样即使代码存在SSRF漏洞攻击者能触达的也只是那少数几个经过审批的公网服务内网根本不可达。云环境里还可以通过安全组和NAT策略实现类似效果。云上的元数据接口防护尤其值得注意。裸奔状态下的元数据服务地址几乎是公开知识一个SSRF就能拿到实例身份。现在主流云厂商都提供了增强版元数据服务要求先通过PUT请求获取一个短暂的临时令牌再用令牌访问元信息。这个机制能有效拦截直接发起HTTP请求的SSRF利用链对运行在云上的业务来说应该是标配。5.4 协议、端口与响应控制除了网络层应用层还需要做一些收缩把攻击者可利用的空间压缩到最小。协议白名单是第一步绝大多数业务场景根本不需要file、dict、gopher这些非HTTP协议。只允许http和https可以直接砍掉一大类利用方式。端口限制同样能起作用不少内网服务和数据泄露都发生在非标准端口上比如只允许访问80和443会让一些内网服务的访问变得困难。响应内容控制容易被忽略。有些业务确实需要拉取远程内容无法彻底禁止出站请求这时可以对返回内容做过滤和脱敏把敏感的内部标识、报错堆栈、内部IP等信息从页面响应中剥离。在容器和微服务架构里还可以考虑把这类拉取功能单独拆出去通过代理网关统一编排让审计点单一化。6. 常见问题与实战排查记录6.1 容易误判为SSRF的场景做漏洞分析时间长了会发现有不少场景长得像SSRF但实际不属于这个范畴。一种常见情况是应用用JavaScript在前端浏览器里发起请求这种情况下服务端并没有发出请求真正的漏洞类型更接近XSS或CSRF不能按SSRF的思路去测。另一种情况是应用读取的是缓存内容根本不是实时请求这会让验证结果失真。还有的服务端请求由数据库代理或者消息队列异步触发日志位置和触发链路都比较隐蔽单纯看页面响应容易判断错误。最简单的判断标准就一条这个请求到底是不是服务端处理的网络栈发起的并且目标地址是否越过了攻击者原本的网络边界。明确了这一点很多误判都可以避免。6.2 DNS解析阶段的坑我在实际测试里踩过不少DNS相关的坑这里列几个典型。本地环境用hosts文件做过域名映射的话会让验证结果和真实环境不一致。内网DNS解析策略可能导致公网地址无法解析目标服务器访问自己控制的地址超时这并不代表漏洞不存在。还有一种更隐蔽的情况目标服务器具备DNS缓存第一次探测后会把结果缓存住后续修改解析记录再去验证看到的还是旧结果容易误判。处理思路是准备多个独立可控地址作为后备验证工具不要一棵树上吊死。如果外带请求无法到达你控制的服务器可以尝试在响应时间差异、报错内容差异这些半盲信息上找突破口。6.3 我踩过的坑与建议的排查顺序复盘自己处理过的SSRF相关报告踩坑最多的阶段居然是确认请求是否真的从服务端发出。有时候页面明明展示了请求结果但那个请求是前端直接发起的后端完全没有参与白高兴一场。建议的排查顺序是先用一个完全可控的地址验证外带请求确认请求来源是目标服务器再去探测内网敏感地址。先试明确的回显点比如本地文件读取接口确认漏洞类型后再逐步扩展攻击面。整个过程保持小步快跑每验证一步都停下来判断避免在错误方向上投入太多时间。6.4 学习路线建议把AllThingsSSRF变成你自己的武器库最后聊一下怎么把这个资料库真正用起来。我建议按三条线去读。第一条线是经典研究文章和框架漏洞披露这些内容讲清楚了SSRF的底层原理和后期的修复演进对理解为什么这么绕过帮助最大。第二条线是绕过技巧和payload集合重点不是背而是对照原理分类归纳把同一种校验缺陷的不同实现方式归并到一起。第三条线是真实漏洞公告从厂商视角看漏洞从发现、确权到修复的全过程。有条件的话本地搭一个最小化环境复现几种经典绕过比读十篇文章记得都牢。我个人在实际操作中的体会是很多漏洞在报告里看着精巧背后其实就是信任边界没有划清楚。每次看到新框架又踩中同一个老坑都会想起那句老话——信任不应该建立在用户输入之上。SSRF这个漏洞值得花时间吃透因为它的攻防演化远没有结束认真梳理一遍AllThingsSSRF你收获的不只是几个payload而是一整套关于边界、校验和信任的思考方式。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑