声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 |
博客新域名:https://gugesay.com
不想错过任何消息?设置星标↓ ↓ ↓
目录
背景介绍
今天分享国外白帽在渗透过程中发现缓存欺骗漏洞的一个独特案例,为什么说它独特,是因为该漏洞的利用无需利用路径混淆。
基本知识了解
路径混淆
当应用程序未正确配置以区分不同路径时,就会发生路径混淆。简而言之,就是应用程序将两个不同的路径解释为同一路径,类似于哈希冲突中发生的情况。举个例子。假设请求以下 URL:
https://target.com/account/billing
一切正常,你将会进入account的billing页面,那么接下来访问第二个 URL:
https://target.com/account/billing/nonexistent.js
正常情况下,访问上面的 URL 会发生 404 Not Found
,因为我们请求的 JS 文件在 Web 服务器上并不存在。
但是,由于应用程序处理路径/路由的方式配置错误,应用程序则可能会转到account的billing页面。这是路径混淆!通过两条不同的路径,但被解释为了相同的路径。
Web缓存
处理网页内容是一项资源密集型任务,例如,当你向运行 PHP 的服务器发送请求时,服务器会将运行 PHP 的代码提供响应。当你处理用户个人资料信息或财务信息等动态数据时,这非常有用。但是,你肯定不希望服务器处理对主页、页眉/页脚或静态文件的请求,毕竟在一项资源密集型任务中,资源消耗是必须要考虑的。
与应用程序代码相比,静态文件可能不会占用那么多资源,但服务器仍然需要一一处理这些请求,那么这个问题就可以通过Web缓存来解决。
Web 缓存是指前端服务器缓存响应并将其提供给网站访问者,而无需依赖于后端服务器,可以用下图来解释:
当从缓存提供响应时,你可能会看到以下响应标头:
X-Cache: HIT
X-CDN-Cache: HIT
HIT 意味着响应是从缓存中提供的,否则,你将看到MISS
而不是 HIT
。(注意,响应标头名称可能会有所不同)
那么前端服务器如何知道何时缓存请求呢?答案是利用缓存键(cache keys)
Cache Keys
缓存键用于决定是否缓存请求,通常,缓存键包含 URL、User Agent和用户区域,可以根据具体情况自定义缓存键进行缓存。
虽然不同的前端服务器有不同的缓存键配置机制,但基本概念都会保持不变,正所谓“万变不离其宗”。
Web 缓存欺骗
Web缓存欺骗(Web Cache Deception),在Web缓存部分,我们看到前端服务器可以配置为缓存特定的响应,这就提出了一个问题——如果缓存了不应该缓存的响应会怎样?
通常,服务器仅缓存静态资源,但是,如果我们能够以某种方式缓存敏感数据(如 Cookie、Session、JSON Web Token或其它 PII)的响应,那么这将是非常可怕的!当攻击者强制前端服务器缓存敏感数据,然后从缓存中检索数据时,就会发生 Web 缓存欺骗攻击(Web Cache Deception attacks)
加入星球,随时交流、全年畅享完整阅读:
(前50位成员):99元/年
(前100位成员):128元/年
(100位+成员):199元/年
感谢阅读,如果觉得还不错的话,欢迎分享给更多喜爱的朋友~
====正文结束====
原文始发于微信公众号(骨哥说事):无需路径混淆的缓存欺骗攻击【部分】
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论