技术解析 | Web缓存欺骗测试
字数 1590 2025-08-18 11:37:02
Web缓存欺骗攻击技术解析与防御指南
1. 概述
Web缓存欺骗(Web Cache Deception)是一种由Omer Gil在BlackHat USA 2017和BSides Tel-Aviv 2017上首次公开演示的攻击技术。该攻击利用Web缓存机制的特性,在特定条件下可导致攻击者获取受害者的敏感信息。
2. Web缓存基础
2.1 缓存定义与作用
Web缓存是指Web资源以副本的形式介于Web服务器和客户端之间,当下一个相同请求来到时,根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。
2.2 缓存优点
- 产生极小的网络流量
- 减少对源服务器的请求
- 降低服务器压力
- 明显加快页面打开速度
2.3 缓存类型
- 数据库缓存:如memcached,将查询结果缓存到内存中
- 浏览器缓存:浏览器将页面缓存到客户端
- 服务端缓存:如CDN、Squid、Nginx反向代理等
3. Web缓存欺骗攻击原理
3.1 攻击场景
假设一个网站使用Nginx反向代理作为缓存服务器:
- 用户成功登录后跳转到账户页面
my.php - 服务器会将css、js、jpg等静态资源缓存到设定目录
- 受害者访问类似
http://victim.com/my.php/favicon.ico的URL favicon.ico不存在,但Nginx反向代理发现URL以静态文件扩展名(.ico)结尾- 缓存机制将
my.php内容缓存到目录中 - 攻击者访问相同URL,获取到之前缓存的账户页面
3.2 关键攻击流程
受害者访问: http://victim.com/my.php/favicon.ico
↓
服务器返回my.php内容(因为favicon.ico不存在)
↓
Nginx缓存机制根据扩展名(.ico)决定缓存
↓
攻击者访问相同URL获取缓存内容
4. 攻击利用条件
- 服务器响应条件:访问
http://victim.com/my.php/favicon.ico时,Web服务器返回my.php的内容 - 缓存机制条件:服务器的缓存机制通过URL中的扩展名来判断是否进行缓存文件,并且忽略任何缓存头
- 用户行为条件:受害者必须访问过
http://victim.com/my.php/favicon.ico这类页面
5. 技术细节与演示
5.1 服务器配置示例
test.php
<?php echo "123"; ?>
Login.php
<html>
<head>
<title>login</title>
</head>
<body>
<form action="my.php" method="post">
<input name="name" type="text" value='<?php echo $_COOKIE["name"];?>'>
<input type="submit" name="submit" value="Login" />
</form>
</body>
</html>
My.php
<?php
$name = $_POST["name"];
$cookie = $_COOKIE["name"];
if($name=="admin"){
echo "Welcome ".$_POST['name'];
setcookie("name",$name,time()+600);
}
else{
if($cookie=='admin'){
echo "Welcome ".$_COOKIE['name'];
}else{
echo '<script>window.location.href = "./login.php";</script>';
}
}
?>
5.2 攻击演示步骤
- 管理员登录系统,访问
my.php账户页面 - 通过社工手段诱使管理员访问
my.php/静态资源形式的URL - Nginx缓存目录中生成管理员
my.php页面的缓存 - 攻击者使用不同浏览器访问相同URL,获取管理员账户信息
6. 攻击危害
- 获取受害者账户等敏感信息
- 可能获取高权限用户(如管理员)的凭证
- 结合社工手段可扩大攻击影响
7. 防御措施
7.1 Web服务器配置
- 配置服务器对于
http://victim.com/my.php/favicon.ico这类请求,不返回my.php页面内容 - 可返回404或302状态码
- 确保服务器不会将动态页面内容作为静态资源返回
7.2 缓存机制配置
- 将缓存文件的缓存机制配置为仅当缓存文件的HTTP缓存标头允许时才进行缓存
- 不要仅根据URL扩展名决定是否缓存
- 考虑缓存内容类型而非仅URL模式
7.3 用户安全意识
- 教育用户(特别是管理员)不要访问可疑链接
- 警告用户避免访问
http://victim.com/my.php/favicon.ico这类格式的URL - 实施安全培训提高整体安全意识
8. 技术限制
- 该攻击在Tomcat+Java环境下通常不可用,因为Tomcat服务器访问
http://victim.com/my.jsp/1.css不会返回my.jsp内容 - 需要特定服务器和缓存配置组合才能成功利用
9. 总结
Web缓存欺骗攻击利用服务器和缓存机制的特定配置,结合社工手段,可导致敏感信息泄露。防御需要从服务器配置、缓存机制和用户教育三方面入手,确保至少一个攻击条件不满足即可有效预防此类攻击。