当前位置:首页 > 网络安全 > web渗透 > 正文内容

web缓存欺骗和web缓存投毒攻击方式

6个月前 (01-02)963

 首先我们先来了解一下什么是缓存,缓存在什么地方

关于缓存

由于现在网站应用的复杂性,通常一个首页就会进行大量资源的加载,为了使用户更快的加载网页,几乎都会使用缓存,即将一些常用的静态文件,存储起来,当之后再需要这些静态资源的时候,直接就可以拿出来使用。浏览器缓存就是将缓存文件存储在本地,从而减少重复的请求,服务端缓存就是将缓存文件存储在客户端与服务端之间的CDN或者一些代理服务器中。

目前针对Web缓存的攻击方式有很多,以CDN为例,通俗来说,如果CDN会将一些攻击者构造的有害数据或者这些有害数据造成的Web应用异常的响应缓存起来,然后其他用户可以获取,那么将造成用户被攻击,即缓存投毒,如果CDN会将用户的敏感信息缓存起来,然后攻击者可以获取,那么将造成用户数据泄露,即Web缓存欺骗

Web缓存欺骗

  1. 环境搭建

    以CDN为例,为了更好的搞清楚这种攻击方式的原理,简单地使用Apache2+php搭建了一个网站应用,功能十分简单,index.php可以输入用户名用于登录

    gaitubao_0.png

    info.php可以获取用户名并展示

    gaitubao_1.png

       接着将网站接入了CloudFlare CDN。而最终目的就是攻击者获取正常用户的用户名,真实环境中可以获取更多敏感信息。

  1. 攻击方法
    1. 用户正常访问网站并登录获取info.php

    2. 攻击者构造http://donky.cn/test/info.php/cache-attack.css链接并诱导用户访问

    3. 用户访问http://donky.cn/test/info.php/cache-attack.css,请求到达CDN,CDN第一次接收到此请求,直接转发到源站

    4. 源站返回带有usernmae的info.php的内容

    5. CDN获取到info.php的内容并转发给用户,此时CDN缓存机制发现此请求路径文件拓展名为css,缓存此文件

    6. 攻击者访问http://donky.cn/test/info.php/cache-attack.css,CDN发现此请求可以命中缓存,返回info.php内容给攻击者

    7. 攻击者获取用户的info.php内容

  2. 攻击分析

    上述是一个理想的攻击链,但是实际情况并不如此

    当访问用户http://donky.cn/test/info.php/cache-attack.css

    gaitubao_2.png

       由于环境是一个简单的php程序,并没有使用任何框架,没有进行相关路由配置,php忽略了url中info.php后面的cache-attack.css直接返回了info.php的内容,这是攻击成功的第一个条件

       接着我们用攻击者的角度去访问这个url

        gaitubao_3.png

        发现并没有获取到用户的username

        gaitubao_4.png        从响应可以看到,CF-Cache-Status: BYPASS;Cache-Control: no-store, no-cache, mustrevalidate, CF-Cache-Status是CloudFlare对与此请求缓存的状态记录,可以在CloudFlare-Doc查询

          gaitubao_5.png        对于源站来说,很明显http://donky.cn/test/info.php/cache-attack.css这个请求返回的并不是静态资是不允许缓存的,所以在返回包内设置了Cache-Control: no-store, no-cache, must-revalidate,当CloudFlare获取到这种no-store时,自然不会进行缓存

        gaitubao_6.png        所以要想Web缓存欺骗攻击成功,必须保证缓存服务器会把info.php/cache-attack.css的内容当作css静态资源来进行缓存,这是攻击成功最重要的条件,想到达到这条件有两种方法,源站返回可以进行缓存的Cache-Control或者缓存服务器忽略源站返回的Cache-Control从而进行缓存。显然第一种方式很难出现,但是对于第二种方式却在很多情况下都可以进行配置,由于网站的复杂性,很多缓存服务器可以自定义缓存策略,以测试的CloudFlare为例,可以通过Page Rule来进行配置,

        下图可以通过正则的方式实现在test目录下的所有css文件都可以进行缓存

        gaitubao_7.png        因为http://donky.cn/test/info.php/cache-attack.css正好匹配中http://donky.cn/test/*.css,所以CloudFlare会直接将info.php的内容缓存起来再次测试上述攻击利用链,当用户访问http://donky.cn/test/info.php/cache-attack.css时,响应包中出现Cache-Control: max-age=14400, must-revalidate; CF-Cache-Status: MISS,此时源站返回的Cache-Control已经被CloudFlare忽略,并设置了缓存信息,由于第一次请求这个url,所以在缓存中是MISS状态,当攻击者再次访问时,会返回缓存的info.php内容,响应包中含有Cache-Control: max-age=14400, must-revalidate; CF-Cache-Status: HIT; Age: 281,命中缓存,达到攻击效果。

        gaitubao_8.png

Web缓存欺骗总结

  1. 攻击条件
    • 源站应用能够忽略url中正常请求路径后面的静态文件名

    • 缓存服务器能够忽略源站返回的Cache-Control,并把请求获取的内容当作静态文件一样缓存

  2. 对应防御措施
    • 源站对于http://donky.cn/test/info.php/cache-attack.css这种请求,应该做相应的正确处理,而不是仅仅忽略后面的静态文件名

    • 缓存服务器对于源站返回的含有不能进行缓存指令的HTTP头的数据不进行缓存

Web缓存投毒

  1. 缓存

    由于缓存服务器会缓存一些请求返回的内容,然后当再次接收到相同的请求时,便可以直接取出缓存中的内容返回给客户端。但是如何辨别一个请求是否和缓存中的请求等效,是一件复杂的事情。http头部字段冗杂,通过设置某些字段为缓存键,当缓存键相同时,就认为可以从缓存中取文件资源。

  2. 攻击场景

    请求中一些非缓存键,会影响Web应用返回的响应内容(如把值拼接到返回内容中),并且如果这种请求获取的响应可以被缓存,那么之后的正常用户就会受到攻击。

    unity3d.com 就出现过这种问题

    GET / HTTP/1.1
    Host: unity3d.com
    X-Host: portswigger-labs.net

    HTTP/1.1 200 OK
    Via: 1.1 varnish-v4
    Age: 174
    Cache-Control: public, max-age=1800

    \<script src=”https://portswigger-labs.net/sites/files/foo.js”>\</script>


       Web应用把X-Host的值拼接到了返回内容的script标签中,这样可以直接造成XSS,Age: 174和Cache-Control: public, max-age=1800可以确认这个请求的响应是会进行缓存的,下一次更新缓存的时间可以通过Age和max-age来确定,这样就能将自己的XSS payload精准地注入到缓存中,达到攻击其他用户的效果。在很多场景下,当我们获取到非缓存键影响的响应内容时,应该搞清楚输入的非缓存键到底影响了什么内容,我们能控制哪些内容,这样才能为之后的攻击创造条件

扫描二维码推送至手机访问。

版权声明:本文由零零博客发布,如需转载请注明出处。

分享给朋友:

相关文章

netcat命令及解释

netcat命令及解释

作为web渗透中的扛把子工具,我们必须掌握灵活使用它,下面我们来了解一下它的命令吧!netcat-d表示脱离命令窗口,在后台运行,常用于后门建立过程假设监听了一个端口,但是关闭了那个cmd窗口那么nc...

文件读取漏洞总结

文件读取漏洞总结

1、一般我拿到一个任意文件读取得先判断权限大不大,如果权限够大的话可以直接先把/etc/sadow读下来,权限不够就读/etc/passwd,先把用户确定下来,方便后续操作2、读取各个用户的.bash...

后台getshell常用技巧总结

后台getshell常用技巧总结

1.利用文件上传漏洞,找文件上传处想办法上传php文件。一些网站在设置可以允许修改上传的文件类型则直接添加php有时候会还有检测是否为php文件,可以通过文件名变形,大小写,双写等形式绕过,只要是黑名...

漏洞挖掘 | 记一次越权登录

漏洞挖掘 | 记一次越权登录

http://xxxxx/index.html?userNo=xxxx可以直接登录学生用户(女朋友给的)fofa收集了一波4个站点。。。,由于没扫到备份,只能黑盒测了然后发现一处接口 杂七杂八测试了下...

优秀渗透工具资源整理

优秀渗透工具资源整理

在进行渗透测试的过程中,会用到大量的开源工具,每次在各种网站、论坛看到很多很好的工具,所以使用该文章将每次碰到的优秀工具记录下来,然后在后期在进行归纳整理,既方便他人,也方便自己。好用工具1、B-XS...

找网站后台的全部方法

找网站后台的全部方法

首先我们如果想要找到它的后台我们就要明确它的后台是否在当前网站目录下一:在当前网站目录下 1:尝试常见后台地址   在根目录下的例如:/admin.php,/manage...