在另一个站点上,非缓存键的输入专门影响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页面的人都会感到惊异:
改变页面的能力看上去更有趣些,但它大概能带来更大的利益。
英文原文:https://portswigger.net/blog/practical-web-cache-poisoning 译者:盈韬未完,接本日推送第五篇