1. 漏洞核心原理
Web缓存欺骗(Web Cache Deception) 是一种通过操纵缓存机制,诱使服务器将敏感内容缓存到公开URL的攻击技术。当满足以下条件时可能发生:
-
网站使用CDN/反向代理缓存(如Cloudflare、Varnish)
-
动态内容返回时未正确设置
Cache-Control
头 -
URL路径可被攻击者预测或构造
经典攻击链:
2. 攻击类型与复现
(1) 基础路径欺骗
目标URL:https://victim.com/profile.php/nonexistent.css
攻击过程:
-
用户登录后访问上述链接
-
服务器返回
profile.php
的内容(因.css
不存在) -
CDN缓存
profile.php
的内容到nonexistent.css
路径 -
攻击者访问
nonexistent.css
获取缓存数据
(2) 参数混淆攻击
https://victim.com/search?q=hello/../profile.css
利用条件:
-
服务器规范化路径时保留缓存键
-
CDN忽略
?
后的参数差异
(3) 浏览器缓存投毒
<!-- 恶意页面代码 -->
<img src="https://victim.com/account-settings/dummy.jpg">
效果: 用户浏览器缓存敏感页面到图片URL
3. 敏感数据泄露案例
实际漏洞案例:
-
PayPal(2017):
https://www.paypal.com/myaccount/home/attack.css
缓存用户账单信息 -
Facebook(2019):
通过/.well-known/change-password
路径缓存CSRF令牌
自动化工具检测:
# 使用Param Miner扫描(Burp插件)
java -jar burp_suite.jar --scan-cache-deception
4. 企业级防御方案
(1) 缓存层防护
方案 | 配置示例 | 作用 | |
---|---|---|---|
路径白名单 | Nginx `location ~* .(css | js)$` | 仅缓存静态资源 |
用户隔离 | Cache-Control: private |
禁用共享缓存 | |
内容校验 | Vary: Cookie, Authorization |
区分用户身份 |
(2) 代码层修复
// 强制敏感页面不缓存
header("Cache-Control: no-store");
header("Pragma: no-cache");
// 检查文件扩展名合法性
if (preg_match('/\.(css|js|png)$/', $_SERVER['REQUEST_URI'])) {
http_response_code(404);
die();
}
(3) 云服务配置
-
AWS CloudFront:
-
{ "CachePolicy": { "DefaultTTL": 0, "HeaderBehavior": "whitelist", "Headers": ["Authorization"] } }
Cloudflare规则:
if (http.request.uri contains "/account") { set Cache-Control "private, max-age=0" }
5. 渗透测试方法论
-
识别缓存层:
-
检查
X-Cache: HIT
响应头 -
使用
curl -I https://target.com/resource
观察Age
头
-
-
构造恶意请求:
GET /settings/../style.css HTTP/1.1
Host: victim.com
-
验证缓存泄露:
-
不同设备/IP访问目标URL
-
检查是否返回其他用户数据
-
6. 历史漏洞与修复
厂商 | 漏洞路径 | 修复方案 |
---|---|---|
GitHub | /settings/profile.css |
强制no-cache |
Shopify | /admin/theme.css |
启用路径校验 |
WordPress | /wp-admin/install.php/..css |
更新缓存插件 |
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容