缓存欺骗漏洞

缓存欺骗漏洞

Web缓存

​ Web缓存是指Web资源以副本的形式介于Web服务器和客户端之间,当下一个相同请求来到的时候,会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。在实际应用中,web缓存十分常见,主要是Web缓存有着如下的优点:产生极小的网络流量,减少对源服务器的请求,降低服务器的压力, 同时能够明显加快页面打开速度。

缓存分为以下几种类型:

(1)数据库缓存,当web应用的数据库表繁多,为了提供查询的性能,会将查询后的数据放到内存中进行缓存,下次从内存缓存直接返回,比如memcached

(2)浏览器缓存,浏览器会将一些页面缓存到客户端 ,不同的浏览器有着自己的缓存机制。

(3) 服务端缓存:常见的服务端缓存比如:CND、Squid、Nginx反向代理等。

攻击原理概述

​ 假设我们要访问的某个网站使用了服务器缓存技术,架构如下:

image-20230403155100733

​ 当注册的用户成功登入了该网站,会跳转到自己的账户页面my.php,该Nginx反向代理服务器会将css、js、jpg等静态资源缓存到nginx设定的目录下。受害者不小心在浏览器中输入了如下的url:http://victim.com/my.php/favicon.ico , favicon.ico 并不存在,此时会发什么神奇的事情呢?

​ Nginx反向代理服务器发现url以静态文件的扩展名(.ico)结尾,由于favicon.ico 不存在,它的缓存机制会将 my.php 缓存到缓存目录中,这时攻击者访问了:http://victim.com/my.php/favicon.ico ,之前 缓存的帐户页面便成功返回给了攻击者。

利用条件

1.访问http://victim.com/my.php/favicon.ico 页面时, Web服务器返回了该my.php的内容

2.服务器的缓存机制通过url中的扩展名来判断是否进行缓存文件,并且忽略任何缓存头。

3.受害者必须访问过了http://victim.com/my.php/favicon.ico 这种页面,也就是说受害者已经将my.php的内容缓存到了缓存服务器上。

注:要想满足以上几个条件,需要考虑到不同的web服务器、代理机制以及浏览器着各自的特性。比如:我们在tomcat服务器上访问http://victim.com/my.jsp/1.css,服务器无法返回my.jsp的内容,因此这种攻击无法利用在tomcat+java上面。

预防措施

(1)合理配置web服务器,通过配置服务器对于http://www.example.com/home.php/1.css这类的请求页面,不返回home.php页面的内容,返回404或302.
(2)合理设置缓存机制,将缓存文件的缓存机制配置为仅当缓存文件的HTTP缓存标头允许时才进行缓存。
(3)提高管理员等的安全意识

原文链接

https://www.freebuf.com/articles/web/161670.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值