在这篇文章中,我将讲述我如何喜欢拒绝服务攻击的故事,并向您展示如何使用Web缓存中毒以单个请求关闭网站,并同时获得漏洞赏金。
拒绝服务(DoS)攻击的声誉很差。从历史上看,DoS曾经是微不足道的-您可以使用脚本小子友好的工具(如slowloris.pl
)使大多数站点脱机。DoS攻击通常也与DDoS攻击混为一谈,而DDoS攻击几乎不可能真正修复。在被“黑客入侵”的站点与仅被(D)DoS攻击的站点之间划了界线。结果,包括我在内的许多黑客都将DoS漏洞视为la脚。当然,“可用性”位于CIA三合会中,因此位于CVSS中,但这只是CVSS失败的另一个原因,对吗?这是我的观点,直到一年来发生的一系列事件改变了它。
在研究Web缓存中毒时,我注意到您可以将其用于单请求持久性DoS攻击,但是直到我发现由于WAF返回可缓存的“您在请求中看到文本“ burpcollaborator.net”时被屏蔽。
1 | GET /en_GB/roadster?dontpoisoneveryone=1 HTTP/1.1 |
出于效率原因,缓存键仅包含突出显示的值,因此任何随后尝试访问该URL的人都将获得缓存命中并收到“拒绝访问”响应。dontpoisoneveryone
参数对于证明在没有实际造成站点停机的情况下进行攻击是至关重要的。有关此技术的深入说明,请参阅《实用Web缓存中毒》。
这是对基于标头的标准攻击的一个奇怪变体,将为我的演讲做一个很好的例子,因此我试探性地举报了此事,出乎意料地获得了300美元的奖励。
后来,在发现,报告并发布了Drupal的关键缓存中毒利用链之后,我意识到www.hackerone.com一直在使用Drupal,但他们已经应用了该补丁。在尝试绕过补丁程序时,我注意到该`X-Forwarded-Port`标头可用于永久性地[破坏](https://hackerone.com/reports/409370)具有无效端口的[重定向](https://hackerone.com/reports/409370),从而导致每个尝试访问其站点的人都超时:
1 | GET /index.php?dontpoisoneveryone=1 HTTP/1.1 |
我报告这主要是因为错过了应用Drupal漏洞的机会而烦恼,并获得了2500美元的赏金。
之后不久,学术研究人员Hoai Viet Nguyen和Luigi Lo Iacono与我联系,他们就如何使用Web缓存中毒进行DoS攻击时询问了我的建议。我提供了一些技术建议,然后礼貌地建议拒绝服务攻击不是值得认真研究的话题,但是他们明智地无视了我,并且继续前进。
然后,在圣诞节前夕,Deliveroo与我联系,因为有人因为缓存中毒而关闭了他们的网站,并且由于一些困惑,他们认为我有责任。
最后,在尝试对我无法命名的目标进行HTTP异步攻击时,我碰巧使用了Burp Repeater的“将URL粘贴为请求”功能,该功能从URL创建HTTP请求,并User-Agent
从古老的Internet Explorer 9中接收该请求。意外地用“请更新您的浏览器”响应覆盖缓存的页面。我报告了这个消息,并获得了令人eye目的$ 7,500,这实际上比我获得的异步攻击收益还多。
在这一点上,我偶然发现了DoS漏洞,已经赚了10,000多美元,并且再也不能忽略这个想法,即有些公司确实关心DoS。回想起来,这似乎是我如何成为网络安全研究员的提示摘要付诸实践的坚实例证。我清除了Param Miner灰尘,调整了缓存中毒检测功能,以使您在切换“棘手的缓存中毒”选项时更加敏感,并开始赚取一些赏金。以下是一些要点:
在https://bitbucket.org上,您可以使用`X-Forwarded-SSL`header覆盖某些页面,并显示"Contradictory scheme headers",同时还Transfer-Encoding
可以覆盖任意页面。这获得了$ 1,800的赏金:
在https://paypal.com/上,您可以通过使用无效的`Transfer-Encoding`标头将来自www.paypalobjects.com的重要JavaScript文件替换为消息"501未实现" 来破坏核心功能。他们对此进行了修补,并获得了9,700美元的顶级赏金。
我的同事Gareth Heyes发现,通过Accept_Encoding: br
强制使用brotli编码的响应,您可以为使用旧浏览器或代理的用户使用DOS Dos instagram 。Accept-Encoding
在缓存键中,但是使用下划线会使缓存错过它。这赚了500美元,捐赠后翻了一番,达到1,000美元。
最后,您可以使用标头Range: bytes=cow
引起400响应,从而拒绝访问从abs.twimg.com和ton.twimg.com加载的核心Twitter JavaScript文件。他们决定不为此打补丁或付款,因此您可以(认真地)将其用于练习。
其他成功的攻击中使用的Accept
,Upgrade
,Origin
,和Max-Forwards
头。
大多数漏洞悬赏政策的文字都禁止DoS攻击。但是,如果仔细观察,您会发现其中一些实际上禁止发动DoS攻击,而不是禁止报告DoS漏洞。Web缓存中毒具有一个罕见的属性,因为只要使用缓存破坏器,通常就可以在不实际发起攻击的情况下进行概念验证。
就是说,相当多的程序在报告DoS漏洞方面确实有全面的排除。我建议足够成熟的程序考虑其业务需求,并可能调整其措辞以仅排除"体积DoS"或"计算DoS"报告。
最后,前面提到的学术研究实际上已在本周早些时候发表-您可以在https://cpdos.org/上阅读。
payload
1 | X-Forwarded-Port: 123 |
转载:
https://portswigger.net/research/responsible-denial-of-service-with-web-cache-poisoning
https://portswigger.net/research/practical-web-cache-poisoning