web缓存欺骗

参考bobao.360.cn/learning/detail/4175.html

关于web缓存

一些静态文件,如jpg、js、css文件会被中间的代理服务器缓存下来,减少响应延迟。

服务器响应

web缓存欺骗以来于浏览器以及web服务器的响应。当请求home.php/x.css与请求home.php的响应内容相同时,缓存攻击才有效。

web缓存欺骗方法

1、攻击者诱使用户访问“https://www.bank.com/account.do/logo.png”。

2、受害者的浏览器会请求“https://www.bank.com/account.do/logo.png”。

3、请求到达代理服务器,代理服务器没有缓存过这个文件,因此会向web服务器发起请求。

4、Web服务器返回受害者的账户页面,响应代码为200 OK,表明该URL与已有页面一致。

5、代理机制收到文件内容,识别出该URL的结尾为静态文件扩展名(.png)。由于在代理服务器上已经设置了对所有静态文件进行缓存,并会忽略掉缓存头部,因此伪造的.png文件就会被缓存下来。与此同时,缓存目录中会创建名为“account.do”的一个新的目录,logo.png文件会缓存在这个目录中。

6、用户收到对应的账户页面。

7、攻击者访问“https://www.bank.com/account.do/logo.png”页面。请求到达代理服务器,代理服务器会将已缓存的受害者账户页面发给攻击者的浏览器。、

攻击条件

1、访问home.php/j.css与访问home.php的响应内容一致

2、Web应用启用了Web缓存功能,并且会根据文件的扩展名来缓存,同时会忽略掉任何缓存头部。

3、受害者在访问恶意URL地址时必须已经过认证。

现有的web框架

以下是几种有效的存在web缓存欺骗的web框架

1、PHP

创建不使用任何框架的PHP WEB应用,该应用汇忽略掉URL尾部的任何附加载荷,返回真实页面的内容。

2、Django

Django使用调度器(dispatcher)来处理Web请求,调度器使用urls文件来实现。在这些文件中,我们可以设置正则表达式来识别URI中具体请求的资源,然后返回对应的内容。

web缓存欺骗_第1张图片

因此,根据django这种常见配置,当客户端请求http://www.sampleapp.com/inbox/”时,服务器会返回Inbox页面的内容。如果将某个不存在的文件附加到该URL尾部(如“http://www.sampleapp.com/inbox/test.css”),这种正则表达式同样会匹配成功。如果正则表达式尾部使用了“$”符,那么就不会匹配这种恶意URL地址。

缓存机制

攻击的第2个条件是web应用启用了Web缓存功能,并且会根据文件的扩展名来缓存,同时会忽略掉任何缓存头部。

1、Cloudflare

不幸的是,当访问恶意URL地址时,web服务器会返回已有的动态页面的缓存头部,这意味着服务器很有可能会返回带有“no-cache”指令的文件。

幸运的是,Cloudflare存在一个名为“边缘缓存过期TTL(Edge

cache expire TTL)”的功能,这个功能可以用来覆盖任何已有的头部信息。将该功能设置为启用(on)状态时,服务器返回的带有“no-cache”指令的文件仍会被缓存下来。出于各种原因,在Cloudflare的建议下,该功能通常会处于启用状态。

2、IIS ARR

应用程序请求路由(Application Request Routing,ARR)模块可以为IIS带来负载均衡功能。

ARR模块提供的一个功能就是缓存功能。Web服务器可以通过负载均衡器设置缓存规则,以便将文件保存到缓存目录中。在创建新的缓存规则时,使用通配符和目标扩展名来定义待缓存的文件类型。当文件经过ARR处理时,ARR会根据文件对应的URL来匹配缓存规则。实际上,ARR会根据URL尾部的扩展名来识别文件类型。

此外,IIS ARR中还包含一个选项,可以忽略掉文件的缓存头部,导致该规则在任何情况下都适用。

如果客户端访问恶意URL(http://www.sampleapp.com/welcome.php/test.css),那么缓存目录中就会生成一个新的目录,目录名为welcome.php,在该目录中,会生成名为test.css的一个新的文件,该文件的内容为用户访问的welcome.php页面的内容

3、Nginx

作为负载均衡服务器,NGINX服务器也可以提供缓存功能,来缓存从web服务器返回的页面。

可以通过NGINX配置文件来配置缓存规则。如果使用下图所示的配置文件,那么NGINX就会缓存特定类型的静态文件,并且会忽略这些文件的缓存头部。

web缓存欺骗_第2张图片

当来自于web服务器的某个页面到达NGINX时,NGINX会搜索URL尾部的扩展名,根据扩展名识别文件的类型。

当经过认证的用户访问恶意URL时(http://www.sampleapp.com/app/welcome.php/test.css),用户的页面就会被缓存到缓存目录中。

缓解措施

1、配置缓存策略,只有文件的HTTP缓存头部允许缓存时,才会缓存文件

2、将所有的静态文件保存到某个指定目录,并且只缓存这个目录。

3、配置web服务器,使其在处理诸如“http://www.example.com/home.php/nonexistent.css”的页面时,不会返回home.php的内容,而会返回404或者302响应。

你可能感兴趣的:(web缓存欺骗)