从业者-缓存实现缺陷-无键查询参数
# 实验室:通过无键查询参数实现的 Web 缓存投毒
# 题目
此实验室容易受到 Web 缓存投毒的攻击,因为它从缓存键中排除了某些参数。用户定期使用 Chrome 访问该网站的主页。
若要解决实验室问题,请毒害缓存响应,并在受害者的浏览器中执行alert(1)
。
提示
网站通常会从缓存键中排除某些 UTM 分析参数。
- 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-implementation-flaws/lab-web-cache-poisoning-unkeyed-param
bgColor: '#001350'
textColor: '#4cc1ff'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
一个博客站点。
捕获一个主页的请求数据包,发现具有缓存响应,缓存时效为 35 秒。
添加任意一个查询参数,例如id
,发送请求。
并没有命中前一个请求的缓存响应,而是生成了一个新的缓存。说明查询参数id
是一个缓存键(有键),会产生独立的缓存响应。
请求根目录/
和请求/?id=xxx
会分别命中不同的缓存响应。
将id
参数修改为utm_content
参数,发送请求。
并没有产生额外的新缓存,而是命中了前一个缓存响应。说明查询参数utm_content
不是缓存键(无键)。
请求根目录/
和请求/?utm_content=xxx
会命中同一个响应。
虽然查询参数utm_content
不是缓存键,但其依然可以注入即时响应当中。
删除查询参数utm_content
,请求根目录/
。
命中了带有utm_content
参数的缓存响应。
根据注入的上下文,通过查询参数utm_content
注入以下 XSS 载荷:
'><img src=1 onerror=alert(1)>//
对空格进行 URL 编码
'><img%20src=1%20onerror=alert(1)>//
1
2
3
4
2
3
4
?utm_content='><img%20src=1%20onerror=alert(1)>//
1
成功闭合原有标签并生成恶意img
标签,同时引出有害的缓存响应。
去掉utm_content
参数,请求根目录/
。成功命中了有害的缓存响应。
此时如果你访问网站主页,则会执行alert()
。
实验完成。
以下是额外内容。
我在网上查找,发现了五个常用的 UTM 查询参数:
utm_source
utm_medium
utm_campaign
utm_term
utm_content
1
2
3
4
5
2
3
4
5
其中一个便是本次实验用到的utm_content
参数。
我又尝试了另外四个 UTM 参数,都是有键的,都会产生独立的缓存响应。无法用于完成实验。
编辑 (opens new window)