“缓存欺骗第三章第二节”为什么修改了路径,服务器还返回相同数据?这可能是赏金漏洞的信号

admin 2025-12-22 04:04:45 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细介绍了Web缓存欺骗漏洞的原理与测试方法,重点分析了源服务器与缓存系统对URL路径处理的差异。通过添加任意路径段测试源服务器是否忽略多余路径,再利用静态扩展名修改路径以匹配缓存规则,攻击者可将动态敏感数据骗入缓存中。文章提供了餐厅比喻帮助理解,并推荐使用BurpScanner和WebCacheDeceptionScanner进行检测。 综合评分: 87 文章分类: WEB安全,漏洞分析,渗透测试,安全工具


cover_image

“缓存欺骗第三章第二节”为什么修改了路径,服务器还返回相同数据?这可能是赏金漏洞的信号

原创

升斗安全XiuXiu

升斗安全

2025年12月17日 18:50 广东

【文章说明】

  • 目的:本文内容仅为网络安全技术研究与教育目的而创作。
  • 红线:严禁将本文知识用于任何未授权的非法活动。使用者必须遵守《网络安全法》等相关法律。
  • 责任:任何对本文技术的滥用所引发的后果自负,与本公众号及作者无关。
  • 免责:内容仅供参考,作者不对其准确性、完整性作任何担保。

阅读即代表您同意以上条款。

要测试源服务器如何将URL路径映射到资源,可在目标端点的URL中添加任意路径段。若响应仍包含与基准响应相同的敏感数据,则表明源服务器对URL路径进行了抽象处理并忽略了添加的路径段。例如:将/api/orders/123修改为/api/orders/123/foo后,若仍返回订单信息,即属于此类情况。

要测试缓存如何将URL路径映射到资源,需要通过添加静态扩展名来修改路径以匹配缓存规则。例如:将/api/orders/123/foo更改为/api/orders/123/foo.js。若响应被缓存,则表明:

  • 缓存将带静态扩展名的完整URL路径作为解析依据
  • 存在针对以.js结尾请求的缓存存储规则

缓存可能设有基于特定静态扩展名的规则。建议尝试多种扩展名,包括.css、.ico和.exe等。

随后可构造能够返回动态响应的URL,该响应将被存储于缓存中。需注意,由于源服务器通常对不同端点采用不同的抽象规则,此类攻击仅适用于已测试的特定端点。

注意:Burp Scanner在审计期间会自动检测因路径映射差异导致的Web缓存欺骗漏洞。您也可使用Web Cache Deception Scanner 来检测配置错误的Web缓存。(直接在burpsuite的BAPP中搜索并安装即可)

其实以上内容,就是要我们找到系统中返回动态资源的内容,以及如何将动态资源进行缓存的方式。

如果以上内容不是很好理解,那么我们抛开技术术语,用一个生活中的比喻来理解这个原理。

核心比喻:餐厅点餐(获取动态资源) vs. 取餐柜(缓存动态资源)

想象一个由 后厨(源服务器) 和 前台取餐柜(缓存) 组成的餐厅。

后厨(源服务器):真正做菜的地方。它理解客人的点餐意图。

前台取餐柜(缓存):存放做好的菜,方便快速取餐。它通常只认取餐号(完整的URL)。

第一部分:测试后厨(源服务器)的“理解”方式

正常情况:你点“宫保鸡丁套餐”,后厨就给你做一份宫保鸡丁。

GET /menu/宫保鸡丁

测试:你点“宫保鸡丁套餐/随便加个词”,比如“宫保鸡丁套餐/加杯可乐”。

GET /menu/宫保鸡丁/随便加个词

关键发现:如果后厨仍然只给你上了“宫保鸡丁套餐”,而完全无视了“/加杯可乐”这个部分,说明后厨很聪明,它只看核心菜名。它把路径进行了“抽象处理”,只认/menu/宫保鸡丁这部分。

安全风险:这意味着攻击者可以在核心URL后面添加任意路径,后厨都会返回同样的核心数据(你的敏感订单信息)。

总结原理一:源服务器可能忽略URL中多余的路径段,只根据核心路径来返回资源。这为后续的“欺骗”创造了条件。

第二部分:测试前台取餐柜(缓存)的“识别”方式

现在我们知道后厨会无视多余路径。但取餐柜是怎么工作的呢?

取餐柜为了效率,可能会有一些特殊规则。比如:“所有以 ‘.外卖盒’ 结尾的取餐号,做好的菜都放在这个保温柜里。”

攻击步骤:

构造一个符合规则的取餐号:利用后厨会忽略多余路径的特性,我们把一个本应是动态的、敏感的请求,伪装成符合缓存规则的样子。

正常动态请求(不应被缓存):/api/我的订单/123

我们改成:/api/我的订单/123/攻击者加的后缀**.js**

发送请求:

后厨看到这个请求,它忽略/攻击者加的后缀.js,仍然理解为/api/我的订单/123,于是返回了你的敏感订单数据。

取餐柜看到这个请求,它发现取餐号以 .js 结尾!根据规则,它认为这是一份“JavaScript外卖”,于是把后厨返回的这份“订单数据” 放进了 “为.js文件准备的缓存柜” 里。

结果:现在,任何一个其他客人(攻击者),只要来取餐柜请求同一个取餐号(/api/我的订单/123/攻击者加的后缀.js),取餐柜都会直接把缓存柜里那份本属于你的订单数据交给他,而不用再问后厨。你的敏感信息泄露了!

总结原理二:缓存的匹配规则(如根据文件扩展名.js, .css)和源服务器的路径解析规则(忽略多余路径)存在差异。攻击者正是利用这个“理解偏差”,把动态的、敏感的数据“骗”进了静态文件的缓存中,从而实现未授权访问。

当你找到了存在动态获取系统敏感资源的路径,且会存在忽略后面添加的其他路径,进行数据返回的话。结合缓存规则,你就很有可能可以实现缓存欺骗,欺骗服务器将不该被缓存的东西,放进你构造的“缓存盒子里”。

合集《缓存欺骗漏洞的原理及相关利用手法》系列内容持续更新中,感兴趣的小伙伴们,别忘了收藏、点赞、分享、关注


查看原文:《“缓存欺骗第三章第二节”为什么修改了路径,服务器还返回相同数据?这可能是赏金漏洞的信号》

评论:0   参与:  3