电银付使用教程(dianyinzhifu.com):Web缓存行使剖析(一)

前言

最近看到一些Web Cache方面的攻击,于是总结了一下,内容如下。

靠山知识

Cache是一种经典的用空间换时间的做法,其应用场景异常普遍,而本篇文章的聚焦点仅在于Web领域上,对于DNS等基础设施的相关cache攻击,也不在此讨论。

那么我们可以大致将Web Cache攻击分为2类:

· User Browser Cache

· Web Server Cache

对于浏览器,我们知道在请求网站时,会遇到js,css,图片等等的加载,若是每次请求都加载一次,那么可能会消耗许多时间,因此浏览器中可引入Cache机制,用以缓存这些静态资源,以加速接见速率。

对于服务器,可能某个网站页面天天要被数以万计的人接见,那么若是每次都处置一次同样的请求,则会消耗大量服务器的资源,因此服务器缓存也显得尤为重要,其中CDN就是Web Server Cache的一个典例:

例如接见链接:

http://example.com/index.html

在第一小我私家接见后,其页面response将会被CDN缓存,下一个请求者则会直接从CDN获取response,以此减轻服务器处置请求的压力,同时到达了防止Dos攻击的目的。如下图示例:

CDN不仅能起到防止Dos的作用,还能加速我们的请求速率,例如我们接见服务器,请求首先会被CDN处置,计算出response给我们的最优ip地址。举一个简朴的例子,就好比原来只有北京一个车站卖票,南京的想要买票就要千里迢迢前往北京,而现在有了CDN就好比在南京也有卖票点,如此一来,省时省力,不仅减轻了北京卖票点的压力,也方便了主顾。

但通常皆有利有弊,若是Cache被攻击者行使,也可以发生一些严重的攻击,本篇文章中,我们则聚焦于以下3种攻击:

· User Browser Cache Poisoning

· Server Cache Poisoning

· Web Cache Deception

User Browser Cache Poisoning

对于浏览器缓存投毒,那么很好明白,其应该是影响浏览器缓存的文件,将其污染以到达攻击目的。那么可能被污染的文件有哪些呢?我们之条件过,浏览器一样平常缓存静态资源,那么攻击者的攻击目的也就是诸如JS、CSS的静态资源了。

这种攻击会发生什么样的危害呢?

我们可以看到,一旦我们的浏览器缓存资源被污染,当我们请求网站时,应用了污染的静态资源,则会发生xss一类的攻击。但这种攻击持久性会随缓存时间的到期而终止,又或者用户勤清缓存而排除。

但这样一种攻击是若何实现的呢?我们可以看下图:

当攻击者和受害者处于统一WiFi下,攻击者可以行使一些攻击手段,让自己成为受害者的署理,而当受害者请求目的网站资源时,攻击者可在中心修改。当目的网站response需要缓存的资源时,攻击者可将其替换为自己窜改的同名文件,以到达污染浏览器缓存的目的。

但考虑到缓存存在时效性,若是目的网站以为缓存过时,则污染缓存就会失效,因此若何最大化污染缓存时间成为一个新的问题,但这里我们可以接纳如下做法:

我们可以首先对一些着名网站举行剖析,查看他们缓存时间最长的文件,以决议我们污染文件的文件名。那么若何知道缓存时间呢?我们可行使Http Header的如下属性来查看:

Cache-Control : max-age=1000

如此一来即可水到渠成,举行用户浏览器污染。工具如下:

https://github.com/EtherDream/mitm-http-cache-poisoning.git

Server Cache Poisoning

在先容完用户浏览器投毒后,我们再来看一下服务器缓存投毒。之前我们有说过,服务器会缓存某个链接的第一个接见者的response内容,那么若是第一小我私家是攻击者,就很有可能让CDN错误的缓存污染内容,杀青攻击:

然则服务器是若何判断2个请求者请求的是不是统一个页面呢?这里就要引入Cache Key的观点:

如上请求,服务器会判断橙色字部门,看其是否相同,若相同则对应统一个cache,但我们不难发现蓝色字体部门,此时2个接见者的response理应差别,由于他们对应的差别语言,但由于缓存机制的问题,导致第2个请求者看到了错误语言的页面。

,

Allbet注册_ALLbet6.com

欢迎进入Allbet注册(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

,

再同理,我们看如下请求:

我们发现response页面中会拼接X-Forwarded-Host,那么假设我们是第一个请求者,此response将会被缓存,那么当下一个请求者再次接见如下链接:

很显然其将受到xss的攻击。

然则此类攻击有一个条件,即我们需要是第一个请求某个页面的人,那么若何做到这一点呢?

我们可以行使response里的Age和max-age,Age代表当前response的时间,而max-age代表该页面缓存何时会过时,以此我们即可计算出投毒时机。

那么若何珍爱网站免收此类攻击呢?这就要和我们之条件到的cache key有关,我们看如下请求:

若是我们行使Vary指定Cache Key为User-Agent,那么不仅需要2个接见者请求域名和url相同,同时需要2人拥有同样的User-Agent,才会掷中统一块cache。

Web Cache Deception

在说完Web Server缓存投毒后,我们再来看一下Web缓存诱骗。相较于前两种攻击,该攻击更为普遍,行使也相对容易。不乏其在CTF中泛起的一再身影。

我们看如上案例,我们可以诱导管理员接见链接:

http://10.2.122.1/secret.php/test.css

而服务器在处置该链接时,由于test.css不存在,其会向前剖析,如下:

http://10.2.122.1/secret.php

此时response页面即为secret.php的页面内容,而CDN对此不知,其以为当请求链接为:

http://10.2.122.1/secret.php/test.css

response应为管理员的secret.php页面内容。

尔后攻击者再次请求:

http://10.2.122.1/secret.php/test.css

CDN将作出响应,将管理员的secret.php页面内容返回,造成信息泄露。

那么此种攻击在2019 CyBRICS CTF Quals或2019 XCTF Final都有泛起,我们以2019 CyBRICS CTF Quals的一道题为例:

问题预设了request功效,同时注意到其http header:

同时连系问题提醒:cache is vulnerabilities,那么可以判断此处应该为Web缓存诱骗的情形。

我们需要行使request功效,让其去请求flag页面,再行使缓存信息将内容带出。

因此我们首先可以读取主页内容,这里组织:

http://95.179.190.31/index.php/skyiscool.js

此时缓存将会将此url纪录,对应内容则为index.php的内容。

然后我们再次接见该链接,即可获取index.php内容:

那么再让问题携带csrf-token去请求flag即可:

http://95.179.190.31/index.php/skyiscool.js?csrf-token=b04d2bc2f3d3654947ba82d59a2b367630743d3447dbc0af46182359f166c4bd&flag=1

此时再请求缓存页面,即可获取flag:

cybrics{Bu9s_C4N_83_uN1N73Nd3D!}

参考链接

http://drops.xmd5.com/static/drops/tips-9947.html

https://skysec.top/2019/07/22/CyBRICS-CTF-Quals-2019-Web-Writeup/#Fixaref

https://www.blackhat.com/docs/us-17/wednesday/us-17-Gil-Web-Cache-Deception-Attack-wp.pdf

https://i.blackhat.com/us-18/Thu-August-9/us-18-Kettle-Practical-Web-Cache-Poisoning-Redefining-Unexploitable.pdf

本文为 一叶漂荡 原创稿件,授权嘶吼独家公布,如若转载,请注明原文地址
发表评论
商标网声明:该文看法仅代表作者自己,与本平台无关。请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

您可能还会对下面的文章感兴趣: