本文内容来自蚁景网安课程。
漏洞背景
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。