Web缓存欺骗攻击漏洞

本文内容来自蚁景网安课程。

漏洞背景

Web缓存功能可以避免重复处理用户的请求,较少响应延迟。

被缓存的文件一般是静态文件或公共文件,如样式表(css)、脚本(js)、文本文件(txt)、图片(png、bmp、gif)等等。这些文件通常情况下不会包含敏感信息。

服务器缓存

CDN(Content Delivery Network,内容分发网络)。CDN是一种分布式代理网络,目的是快速响应内容请求。每个客户端都有一组代理服务器为其服务,缓存机制会选择离客户端最近的一个节点来提供服务。

负载均衡(Loader balancer)能够通过多台服务器平衡网络流量,也能减少服务器延迟。

反向代理(Reverse Proxy)。反向代理服务器会代替用户向Web服务器请求资源,然后缓存某些数据。

工作过程

flowchart LR id1[客户端] id2[Nginx代理] id3[Apache+PHP] id1 <--> id2 id2 <--> id3

利用条件

信息

1、缓存服务器根据后缀进行缓存。

2、访问xx.php/1.js等不存在的静态文件,返回对应的xx.php内容。

3、受害者必须登录了网站。

利用流程

1、攻击者诱使受害者访问xx.php/1.css

2、受害者访问了xx.php/1.css,因为第一次请求还没有缓存,所有请求会直接到达源服务器。

3、服务器接收到请求后会返回xx.php/1.css的内容给代理服务器,实际上这个1.css的内容是xx.php的内容。

4、代理服务器识别到css后缀,认为它是静态文件,将其缓存。

5、受害者接收到第2步发出请求的响应内容。

6、攻击者访问xx.php/1.css。