从业者-缓存实现缺陷-无键查询字符串
# 实验室:通过无键查询字符串实现的 Web 缓存投毒
# 题目
此实验室容易受到 Web 缓存投毒的攻击,因为查询字符串没有键控。用户定期使用 Chrome 访问该网站的主页。
若要解决实验室问题,请毒害主页响应,并在受害者的浏览器中执行alert(1)
。
提示
- 如果你遇到困难,可以使用
Pragma: x-get-cache-key
标头在响应中显示缓存键。这也适用于其他一些实验室。 - 虽然不能将查询参数用作缓存破坏器,但有一个通用的请求标头可以被键控,如果该标头存在的话。你可以使用 Param Miner 扩展,自动将缓存破坏器标头添加到你的请求中。
- 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-query
bgColor: '#001350'
textColor: '#4cc1ff'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
一个博客站点。
捕获一个主页的请求数据包,发现具有缓存响应,缓存时效为 35 秒。
根据所学,添加一个任意查询字符串,例如id
参数。
发送请求,参数值被注入到了即时响应当中,而且生成了缓存。
注入点位于 HTML 标签之间,使用尝试注入以下查询字符串:
'><img src=1 onerror=alert(1)>//
对空格进行 URL 编码
'><img%20src=1%20onerror=alert(1)>//
1
2
3
4
2
3
4
发送请求,成功闭合原有标签,并产生了恶意img
标签。
将查询字符串删除,再次发送请求。成功命中有毒的缓存响应。
由于查询字符串是无键的(不是缓存键),所以不管请求/
还是/?id=xxx
都会命中同一个缓存响应。
投毒之后,此时如果你访问主页,将会执行载荷中的alert()
。
实验完成。
编辑 (opens new window)