从业者-缓存设计缺陷-使用未知标头的定向Web缓存投毒
# 实验室:使用未知标头的定向 Web 缓存投毒
# 题目
此实验室容易受到 Web 缓存投毒的攻击。受害用户将查看你发布的任何评论。要解决此实验,请毒害缓存响应,并在访问者的浏览器中执行alert(document.cookie)
。
但是,你还需要确保,将响应提供给预期受害者所属的特定用户子集。
- name: 实验室-从业者
desc: 使用未知标头的定向 Web 缓存投毒 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/web-cache-poisoning/exploiting-design-flaws/lab-web-cache-poisoning-targeted-using-an-unknown-header
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
一个博客站点。
# 猜测标头
随意捕获一个请求,可以是网站的任何路径。
由于我们不知道哪些标头是无键的,所以使用 BurpSuite 扩展 Param Miner 来辅助测试。
右击请求数据包,选择 Param Miner 扩展的 “Guess headers”(猜测标头)功能。
等待一会儿之后,即可在 “Target --> Site map” 选项卡中看到猜测出来的标头X-Host
。
将X-Host
标头添加到请求中,发现影响了某个script
标签所导入的资源域。
# 毒害响应
访问漏洞利用服务器,将路径修改为/resources/js/tracking.js
,将响应正文修改为题目要求的alert(document.cookie)
。
点击 “Store” 保存更改。
我毒害了对某一篇博客的缓存响应,使其从恶意与加载 js 资源。
当有人访问这篇博客时,就会命中有毒的缓存响应,加载恶意 js 资源并执行alert()
。
# 获取受害者的User-Agent
无键标头,引出有害响应,获取有害的缓存响应。这三者都有了,现在要怎么将其提供给受害者呢?
由于User-Agent
标头是缓存键,不同的User-Agent
标头会生成 / 命中不同的缓存响应。所以我们必须获取受害者的User-Agent
,对其User-Agent
投毒。
可是该怎么获取受害者的User-Agent
呢?
在博客评论功能中,我发现了一处 XSS 漏洞。但由于网站防护限制,该漏洞无法直接执行 js 代码。
但我们可以注入一个img
标签,将其src
设置为我们所控制的域。当受害者访问这篇博客时,他就会向我们的域发起图片资源请求,而请求中大概率会包含User-Agent
。
成功注入img
标签,现在就等受害者上钩。
查看访问记录,受害者发起了图片资源请求,请求中携带了其User-Agent
。
User-Agent: Mozilla/5.0 (Victim) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
# 携带受害者的User-Agent并毒害响应
回到之前的投毒请求,将我们自己的User-Agent
修改为受害者的,然后再次毒害缓存。
当受害者访问博客/post?postId=5
时,由于我们 和 受害者携带了一样的User-Agent
,所以受害者会命中有毒的响应,从恶意域加载 js 资源并执行alert()
。
实验完成。