在某些情况下,在应用程序的一个 HTTP 标头中传递的信息未正确清理,并在请求页面的某处或另一端输出,从而导致 XSS 情况。
但不幸的是,一旦攻击者无法让受害者在实际的 XSS 攻击中编辑他/她自己的 HTTP 标头,那么只有在攻击者有效负载以某种方式存储时才能利用这些场景。
我们可能想到的第一种情况是典型的情况:我们可以控制的 HTTP 标头中的一些信息存储在数据库中,稍后在同一页面、应用程序的其他任何地方甚至是另一个不可访问的系统中检索攻击者(盲 XSS)。
但是,由于 CDN 和 WAF,现在还有另一种非常常见的情况,这使得我们可以在不需要数据库步骤的情况下持续攻击:Web 缓存中毒。这就是我们将在这篇文章中看到的内容。
进行以下练习:
https://brutelogic.com.br/lab/header.php
我们所有的请求标头都以 JSON 格式显示在那里。这是一个推断,在现实世界的场景中,它可能只出现其中的一两个。这只是为了使它更容易,因为代码是单行(PHP),可以很容易地重现:
<?=json_encode(getallheaders()).”\n”;
正如我们在下面看到的,在带有 -i 标志的命令行中使用 curl,它会向我们显示响应的 HTTP 标头以及包含我们的请求标头的 JSON。
由于我们在这篇博客中使用的 WAF 提供的最后一个标头“x-sucuri-cache”,我们需要在 URL 中添加一些内容以避免缓存,因为该标头的值是“HIT”,这意味着它即将到来来自 WAF 的缓存。
因此,通过添加“lololol”,我们能够检索页面的非缓存版本,由 x-sucuri-cache 标头值“MISS”指示。现在我们将注入我们自己的标头(带有 -H 标志)以检查它是否在响应中出现。
成功,我们的虚拟标头对“Test:myValue”在响应中得到反映。让我们更改我们的“缓存避免字符串”以再发出一个请求,否则下一个请求将返回最后一个带有“lololol”字符串的缓存响应。
我们在 URL 中使用“kkkkk”作为字符串再次开始缓存处理。如上所示,我们还注入了 XSS 向量。但仅对我们而言,因为我们通过终端发送该标头。它不会出现在浏览器、其他人甚至我们自己的请求中。
发出了另一个请求(在“日期”标头检查时间),但似乎没有什么区别。这是因为缓存基于 MISS-MISS-HIT 方案,因此下一个将起作用。
宾果游戏,我们已将其缓存。我们现在打开我们的Brave浏览器,使用我们煮熟的 URL 并且:
该 URL 将一直处于中毒状态,直到缓存过期。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有