Bu1'Blog

如果能控制粗鄙的狂喜,就不会有深入骨髓的悲伤。

0%

WEB缓存欺骗攻击技术

最近了解到了 Omer Gil 在17年提出的一种新型WEB攻击技术,感觉这个攻击方法还是挺有趣的,因此写一篇博客记录一下。

缓存机制

为了提升网站的响应速度,一般会使用网页缓存机制,将用户频繁检索的文件存储在缓存服务器上。这样设置后,相当于在客户端与服务器之间加了一个WEB缓存服务器,每一次用户访问服务器时都会先向WEB缓存服务器发送请求,如果有缓存数据则直接向客户端返回,否则缓存服务器将向服务器请求数据,拿到数据后再返回给客户端。

常见的缓存机制:

  • CND(内容分发网络):这是一种代理的分布式网络,其目的是快速地提供内容。客户端将由一组离它最近的代理服务器提供服务。
  • 负载均衡:除了平衡多个服务器之间的通信量外,负载均衡还可以缓存内容,以减少服务器的延迟。
  • 反向代理:代理服务器代表客户端从web服务器检索资源,同时可以缓存web应用程序的一些内容。

漏洞成因

当缓存服务器配置不当时,客户端向缓存服务器发送GET请求,注意此请求为对静态文件的请求,如CSS、js、txt、png、ico、gif文件等。缓存服务器忽视了缓存头,而是从URL的尾端来获取文件的拓展名,然后根据该缓存机制的规则来决定是否缓存文件。假如这个文件未被缓存,则向服务器请求数据。

完整的流程:

  1. 浏览器请求http://www.example.com/home.php/non-existent.css。
  2. 服务器返回http://www.example.com/home.php的内容,很可能使用了标识不缓存此页面的HTTP缓存标头。(但是缓存服务器忽略了此HTTP缓存标头)
  3. 通过缓存服务器响应该请求。
  4. 缓存服务器发现该文件的扩展名是css。
  5. 在缓存目录下,缓存服务器会创建一个名为home.php的目录,并缓存冒名顶替的“CSS”文件(不存在的css文件)。

漏洞利用

这个漏洞用在社工方面还是比较多的。假如用户已经登录 www.demo.com/admin 这个网站的后台,攻击者只需要构造一个不存在文件的地址,如 www.demo.com/admin/text.ico 发送给用户。当用户点击这个链接时,缓存服务器响应了这个请求,向服务器请求这个页面的数据,得益于技术的发达,服务器接收到这个不存在页面请求时会自动将 www.demo.com/admin 页面的数据返回给缓存服务器。此时,在缓存服务器收到了 www.demo.com/admin 这个页面的缓存数据(用户已登录),并将它存为攻击者伪造页面 www.demo.com/admin/text.ico 的缓存数据一直保存到缓存数据存活的最大时间,此时攻击者只需要访问 www.demo.com/admin/text.ico 就可以登录到网站后台了

在测试时,我们可以通过构建假的静态资源URL请求发送到服务器,如果服务器响应了并返回了200,那么很肯能存在WEB缓存欺骗漏洞。

由上,要达成攻击必须满足两点要求:

  1. 缓存服务器忽视了HTTP中的缓存头标识,而是根据URL文件后缀名决定是否缓存,这时候就可以构建假的静态资源URL进行请求。
  2. 服务器会对构建的静态资源URL进行处理,如上面提到的,当请求的页面时不存在www.demo.com/admin/text.ico时,服务器会自动将其转为www.demo.com/admin/的内容。

漏洞防御

针对漏洞利用的两个点来进行防御:

  1. 正确配置缓存服务器,只有当HTTP缓存标头允许缓存时才对网页数据进行缓存,或者是正确设置缓存文件的类型。
  2. 正确配置服务器,对构建的虚假URL进行报错,返回302或404,而不是将页面重置为正确的URL。如上述的例子,服务对 www.demo.com/admin/text.ico 页面请求返回302或404而不是返回 www.demo.com/admin 的数据。