#翻译文章# 原文:
https://galnagli.com/Cache_Poisoning/有删减
我受邀参加了一个私密项目,一顿扫描之后,给我返回了如下结果。

我检查了指纹特征,发现目标在CloudFlare上运行,并且确实以CF-Cache-Status:HIT响应返回了我的请求,这意味着对页面的响应将从缓存。
为什么我们会收到“缓存投毒”得告警?
这是由于CloudFlare在其请求中支持X-Forwarded-For标头的缘故,它将把插入参数中的输入附加到客户端的现有IP地址上。
扫描器确定缓存正在通过HIT响应进行判断是否被缓存,并且我们拥有可用于在请求之间进行区分的非关键参数,我们可以让受害者访问具有特定内容的页面。
利用:
第一步我能想到是在XFF头插入"><script>alert("nagli")</script>看看网站如何处理。

如上图所示,已经被插入到页面里,而且触发了CF-Cache-Status:HIT被缓存了。为了验证是否被缓存了,我们再发一个不带XFF头的请求。

成功了。我已经成功,目前我已经可以投毒同WAN下的所有用户。但是有一点需要注意的是,不是所有的后缀文件都会缓存。
我的利用点是一个html文件,
https://subdomains.example.com/somefolder/someendpoint.html
所以没有人会来访问他,更不会提供服务。
所以我准备缓存一个会用得到的文件,
https://subdomains.example.com/somefolder/someendpoint/nagli.css
CloudFlare成功的缓存了这个css文件,我的payload完美运行。

最终,我成功制造了一个储存型xss,可以窃取主站的cookie。
总结一下所有步骤:
1.使用burpsuite或任何其他工具将请求拦截到以下页面https://subdomain.example.com/somefolder/someendpoint/nagli.css。
2.添加X-Forwarded-For标头:“> <script> alert(1)</ script>
3.将请求发送到Burp repeater并发送请求,直到从服务器获取“ CF-Cache-Status:HIT”
4.删除X-Forwarded-For标头,然后再次发送请求,请注意,仍然从缓存中提供XSS有效负载
5.使用不同浏览器访问,都弹框框。
时间线
2021/01/29 提交了Web缓存中毒问题-
2021/02/06 Triager无法重现该问题
2021/02/07 提交了更清晰的复制步骤
2021/02/09 设置为P2级别
2021/02/09 奖励$1000
译者按:
利用CF的缓存,作者成功将xss payload嵌入到页面里。我们形而上学的分析一下,第一,输入没有过滤。第二,差异性没有处理。最终造成这个漏洞的产生。
本文迁移自知识星球“火线Zone”