白帽故事 · 2023年2月10日 0

利用Param Miner挖掘基于缓存中毒的XSS漏洞

背景介绍:

你肯定听说过缓存中毒(Cache Poisoning),这个漏洞存在的时间相当久远,本篇文章并不是要追溯缓存中毒的历史,而是通过案例对你有更多的启发。

Param Miner:

Param Miner是Burp Pro的一款扩展插件(虽然它也适用于Burp社区版,但会有很多限制),它除了测试隐藏参数之外,还能够测试缓存中毒,配合Burp Pro的Scanner来检测XSS,有时能获得一些意想不到的收获。

看到上图,有点小兴奋。经过确认排除误报后,Param Miner 发现了一个隐藏的Header参数,该参数在网站主页的正文中反映了它的值。

在最初的审查中,使用repeater反复进行验证是一个漫长的过程。在试图复制结果然后使用火狐浏览器打开时却无法复现,通过检查源代码,并未发现该参数的痕迹,因此也就无法触发xss,那么究竟是怎么回事呢?

Poc:

使用 curl 命令的 bash 脚本来尝试攻击:

Curl 配合 Grep 来检查响应:

https://website.com | grep "</script>testing"

事实证明,缓存被清除得相当快,但还是不够快!

让 Burp Intruder 持续运行,并且 curl 响应包含隐藏参数,但 Firefox 和 Chrome 会渲染没有隐藏参数的网站,在经历了无数次尝试和失败中,最终考虑换用 MS Edge 来打开了目标网站,最终 curl 的 bash 脚本如下👇

curl -H “User-Agent: tester” -H “hidden-header: </script><h2>TESTERING2333<img src=x onerror=alert(document.domain)>” https://website.com/

几次网页刷新后,弹窗终于出现:

希望本文可以启发你一些新想法,或是重燃某些旧想法,此外有一个重要提醒‼️:当Chrome和FireFox浏览器失败时,不如尝试一下 MS Edge,它可能正是你的‘救星’。