Web缓存投毒实战(四)

本文详细探讨了OpenGraph协议如何被用于劫持分享内容,并展示了如何利用Cloudflare缓存机制进行投毒攻击。攻击者通过设置特定的HTTP协议头,如X-Original-URL和X-Rewrite-URL,影响页面路径,从而实现缓存污染。实验结果显示,这种攻击可能导致用户在社交媒体上分享被篡改的内容。此外,文章还提到了WAF绕过和本地路由投毒等技术,揭示了网络安全的新挑战。
摘要由CSDN通过智能技术生成

  Open Graph的劫持

  在另一个站点上,非缓存键的输入专门影响Open Graph URL:

  

  Open Graph是一种由Facebook创建的协议,允许网站所有者控制他们在社交媒体上分享的内容。我们劫持的og:url参数有效地覆盖了分享的URL,因此任何分享被投毒的页面的人实际上最终都会分享我们指定的内容。

  您可能已经注意到,应用程序设置了"Cache-Control:private",而Cloudflare拒绝缓存此类响应。幸运的是,网站上的其他页面明确启用了缓存:

  

  这里的"CF-Cache-Status"协议头是Cloudflare正在考虑缓存此响应的指示,但尽管如此,响应从未实际缓存过。我推测Cloudflare拒绝缓存这个可能与session_id cookie有关,并且使用该cookie重试:

  

  最终我得到了缓存的响应,后来发现我可以跳过猜测并阅读Cloudflare的缓存文档。

  尽管缓存响应,但“分享”结果仍然没有投毒; Facebook显然没有达到我投毒特定Cloudflare缓存的要求。为了确定我需要投毒哪个缓存,我利用了所有Cloudflare站点上的一个有用的调试功能 —— /cdn-cgi/trace:

  

  在这里,colo=AMS行显示Facebook已经通过Amsterdam的缓存访问了waf.party。目标网站是通过 Atlanta访问的,所以我在那里租了2美元/月的VPS并再次尝试投毒:

  

  在此之后,任何试图在其网站上共享各种页面的人最终都会分享我选择的内容。这是一个经过修改的攻击视频。

  本地路由投毒

  到目前为止,我们已经看到基于cookie的语言劫持,并且使用各种协议头的攻击去覆盖主机。在这一点的研究上,我还发现了一些使用奇怪的非标准协议头的变体,例如"translate","bucket"和"path_info",并且我怀疑遗漏了许多其他协议头。在我通过下载并搜索GitHub上的前20,000个PHP项目以获取协议头名称来扩展协议头wordlist之后,我的下一个重大进展来了。

  这揭示了协议头X-Original-URL和X-Rewrite-URL,它覆盖了请求的路径。我首先注意到的是它们会影响目标运行Drupal,并且通过挖掘Drupal的代码发现,对此协议头的支持来自流行的PHP框架Symfony,它又是从Zend获取的代码。最终结果是大量的PHP应用程序无意中支持这些头文件。在我们尝试使用这些协议头进行缓存投毒之前,我应该指出它们也非常适合绕过WAF和安全规则:

  

  如果应用程序使用缓存,为把协议头混淆到错误的页面,就有可能滥用这些协议头。例如,此请求的缓存键为/education?x=y,但从/gambling?x=y检索内容:

  

  最终结果是,在发送此请求后,任何试图访问Unity for Education页面的人都会感到惊讶:

  

  改变页面的能力看上去更有趣些,但它也许能带来更大的利益。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值