扫码领资料
获网安教程
来Track安全社区投稿~
赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)
简介
缓存欺骗是一种相对较新的网络安全攻击向量,通过诱骗网络服务器将私密内容存储在公共缓存中,从而导致敏感信息的泄露。如果该漏洞被利用,攻击者可以绕过身份验证机制,获取个人或机密数据。本文将深入探讨缓存欺骗的概念、工作原理、利用方法以及最重要的防护措施。
什么是缓存及其用途?
在深入探讨缓存欺骗之前,有必要了解缓存的概念以及它在 Web 开发和网络中的作用。
什么是缓存?
缓存是一种临时存储位置,用于保存数据或文件的副本,以便加快访问速度。在 Web 浏览的上下文中,缓存会存储网页、图片和其他 Web 资源,从而缩短加载时间,并减少对服务器的重复请求。缓存有以下几种类型:
浏览器缓存:在用户设备上本地存储网页和资源的副本。这样,当用户再次访问某个网站时,浏览器可以快速检索内容,而无需重新从服务器下载。
服务器缓存:在服务器端维护 Web 资源的缓存副本。这种方式可以降低服务器负载,并通过提供缓存内容而非每次动态生成响应来加快响应速度。
CDN(内容分发网络)缓存:分布式服务器网络缓存 Web 内容,将其存储在更接近用户的位置。这种方式通过从地理位置上更接近用户的服务器提供内容,减少了延迟并提升了性能。
什么是缓存欺骗?
现在我们已经了解了缓存的概念及其用途,可以进一步探讨缓存欺骗的概念。缓存欺骗是一种 Web 漏洞,攻击者通过欺骗 Web 服务器,将敏感内容缓存下来。Web 缓存旨在存储网页副本,以提高加载速度并减少服务器负载。然而,当缓存控制配置错误时,诸如用户详细信息或私有页面等敏感信息可能被存储,并可被未经授权的用户检索。
缓存欺骗的工作原理
缓存机制:Web 缓存通过存储客户端请求响应的副本来工作。当客户端请求某个网页时,服务器可以直接从服务器提供页面,或者如果缓存中存在最新副本,则直接从缓存提供。
缓存控制头(Cache-Control Headers):Web 服务器使用缓存控制头指示内容应如何缓存。这些头包括如 no-cache
、private
、public
和 max-age
等指令。不当的配置可能导致意外的缓存行为。
利用方式:在缓存欺骗攻击中,攻击者精心构造一个 URL,诱导服务器将敏感内容存储到缓存中。这种 URL 通常包含查询参数或路径,欺骗服务器将内容视为公共内容,即便该内容实际上包含私密信息。攻击者随后可以在无需身份验证的情况下访问这些缓存的内容。
如何利用缓存欺骗漏洞
利用缓存欺骗需要深入理解 Web 缓存机制和缓存控制头的工作原理。
信息收集(Reconnaissance)
测试缓存行为
.js
、.css
或 .ico
:示例:将 /api/profile
修改为 /api/profile.js
。;
、?
或 #
:示例:将 /profile
修改为 /profile;test.js
。/profile%00test.js
。/static/..%2fprofile
或 /assets/..%2fprofile
。通常形式为:/<static-directory-prefix>/..%2f<dynamic-path>
。构造欺骗性 URL
访问缓存的内容
如何防范缓存欺骗
使用适当的缓存控制头
Cache-Control: no-cache
或 Cache-Control: private
。Cache-Control: public
并设置适当的 max-age
。避免缓存动态内容
验证和清理 URL
利用安全工具
References
[1]
PortSwigger 缓存欺骗漏洞文档: https://portswigger.net/web-security/web-cache-deception声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。
原文始发于微信公众号(白帽子左一):关于缓存欺骗的小总结
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论