技术解析 | 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 缓存类型

  1. 数据库缓存:如memcached,将查询结果缓存到内存中
  2. 浏览器缓存:浏览器将页面缓存到客户端
  3. 服务端缓存:如CDN、Squid、Nginx反向代理等

3. Web缓存欺骗攻击原理

3.1 攻击场景

假设一个网站使用Nginx反向代理作为缓存服务器:

  1. 用户成功登录后跳转到账户页面my.php
  2. 服务器会将css、js、jpg等静态资源缓存到设定目录
  3. 受害者访问类似http://victim.com/my.php/favicon.ico的URL
  4. favicon.ico不存在,但Nginx反向代理发现URL以静态文件扩展名(.ico)结尾
  5. 缓存机制将my.php内容缓存到目录中
  6. 攻击者访问相同URL,获取到之前缓存的账户页面

3.2 关键攻击流程

受害者访问: http://victim.com/my.php/favicon.ico
↓
服务器返回my.php内容(因为favicon.ico不存在)
↓
Nginx缓存机制根据扩展名(.ico)决定缓存
↓
攻击者访问相同URL获取缓存内容

4. 攻击利用条件

  1. 服务器响应条件:访问http://victim.com/my.php/favicon.ico时,Web服务器返回my.php的内容
  2. 缓存机制条件:服务器的缓存机制通过URL中的扩展名来判断是否进行缓存文件,并且忽略任何缓存头
  3. 用户行为条件:受害者必须访问过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 攻击演示步骤

  1. 管理员登录系统,访问my.php账户页面
  2. 通过社工手段诱使管理员访问my.php/静态资源形式的URL
  3. Nginx缓存目录中生成管理员my.php页面的缓存
  4. 攻击者使用不同浏览器访问相同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缓存欺骗攻击利用服务器和缓存机制的特定配置,结合社工手段,可导致敏感信息泄露。防御需要从服务器配置、缓存机制和用户教育三方面入手,确保至少一个攻击条件不满足即可有效预防此类攻击。

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 关键攻击流程 4. 攻击利用条件 服务器响应条件 :访问 http://victim.com/my.php/favicon.ico 时,Web服务器返回 my.php 的内容 缓存机制条件 :服务器的缓存机制通过URL中的扩展名来判断是否进行缓存文件,并且忽略任何缓存头 用户行为条件 :受害者必须访问过 http://victim.com/my.php/favicon.ico 这类页面 5. 技术细节与演示 5.1 服务器配置示例 test.php Login.php My.php 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缓存欺骗攻击利用服务器和缓存机制的特定配置,结合社工手段,可导致敏感信息泄露。防御需要从服务器配置、缓存机制和用户教育三方面入手,确保至少一个攻击条件不满足即可有效预防此类攻击。