导语:前一篇文章介绍了Server Cache Poisoning在实际应用场景下,产生DOS攻击的利用方式。本篇文章则介绍Web Cache Deception在真实场景下的应用方式和测试情况。
前言
前一篇文章介绍了Server Cache Poisoning在实际应用场景下,产生DOS攻击的利用方式。本篇文章则介绍Web Cache Deception在真实场景下的应用方式和测试情况。
本篇文章介绍的是发表在网络安全顶会2020 USENIX Security上的一篇文章:《Cached and Confused: Web Cache Deception in the Wild 》。
背景知识
我们已经在之前的文章中介绍过Web Cache欺骗的问题,其在CTF场景下有比较多的应用,而本篇文章主要聚焦于其在真实世界场景下的利用与一些bypass方式。关于其简单原理的一些CTF应用,可以参见我们的第一篇文章:
如上图所示,攻击者诱导受害者点击如下路由:
/account.php/nonexistent.jpg
由于是第一次访问,Web Cache将其转发给源服务器,源服务器在解析时,由于中间件或者后端配置问题,将其解析为访问/account.php路由,并进行response,而此时Web Cache将其对应记录。当攻击者再次请求如下链接:
/account.php/nonexistent.jpg
那么将会得到受害者account.php页面的内容,从而导致信息泄露,达成攻击。
工具设计
对于这样一个问题,本文作者设计了一套工具,并测试其在真实世界下的效果如何:
首先作者表明,利用该攻击的场景为:网站有一些私有信息,只能由用户访问,但因为Web Cache欺骗,致使其他用户可以访问到这些数据。这就是一次WCD(Web Cache Deception)攻击。
首先作者进行了网站搜集,其建立一个种子池,然后使用启发式工具,发现池中网站的子域名,以此扩充数据集。然后对每个网站进行账户创建,此时分别创立2个用户:攻击者用户与受害者用户。此举旨在后期利用攻击者用户获取受害者用户数据。同时还会使用爬虫搜集攻击者与受害者的cookies信息,以判断WCD攻击是否需要依赖于Cookies。
值得注意的是,在搜集网站的时候,由于是利用种子池中的域名,进行启发式搜集,那么可能会存在如下情况,即爬虫可能遇到大量相似的url:
http://example.com/?lang=en
http://example.com/?lang=fr
http://example.com/?lang=cn
亦或是如下:
http://example.com/028
http://example.com/142
http://example.com/359
这样的遍历和循环非常的浪费时间,于是作者设置了上限,诸如此类的url,每个域名只随机挑选500个。
在上述准备工作完毕后,则使用工具以此测试每个url是否存在WCD攻击隐患。攻击做法如下:
1.对于指定url:
http://example.com/028
首先在其路径后拼接随机数.css文件:
http://example.com/028/.css
-
使用受害者账户点击上述网址
-
使用攻击者账户点击上述网址,并记录回显
-
再次点击上述网址,但此时不带任何cookie,并记录回显
然后对搜集到的response进行提取,查看里面是否有受害者账户的关键信息,同时判断response中是否带出安全相关属性,例如 : csrf、xsrf、token、state、client-id
实验评估
作者首先在Alexa Top 5K网站中,选取了295个支持Google OAuth的网站,选取分布如下:
然后将其作为种子池,进行爬取并测试,结果发现如下:
在1470410个网页中,有17293个页面存在WCD攻击,同时发现对于使用Cloudflare和Akamai CDN的网站可能更容易受到威胁:
同时在受到WCD的网页中,其可以泄露的私密数据分布如下:
可以看到不仅用户名泄露较为严重,Sess ID、Auth Code等安全相关的信息泄露也存在一定比例。
并且通过对照观察,在使用cookie和不使用cookie时,攻击结果一致,这也说明WCD攻击不依赖于授权用户或带有cookie的访问者。这进一步提升了该攻击的危害性,降低了其攻击成本。
同时,作者还提出了相应的bypass方式,其发现不仅诸如如下请求方式可以进行WCD攻击:
/account.php/nonexistent.jpg
使用其他一些手段也可以达成相应的目的:
/account.php%0Anonexistent.jpg /account.php%3Bnonexistent.jpg
/account.php%23nonexistent.jpg
/account.php%3Fnonexistent.jpg
同时作者进一步加大了数据集,用于测试新的payload方式,同时发现其分布如下:
可见这些bypass方式可以有效的进行WCD攻击。
同时这些攻击也可以并存,例如既可以使用%0A进行WCD攻击,也可以使用%3F进行WCD攻击:
总结
本篇文章作者分析探索了真实世界中WCD攻击的应用和分布比例,同时提出了一些新型的WCD攻击绕过方式,对于之后的测试或者做题中具有一定指导意义。