从业者-缓存实现缺陷-URL规范化
# 实验室:URL规范化
# 题目
此实验室包含一个 XSS 漏洞,由于浏览器的自动 URL 编码,该漏洞无法被直接利用。
若要解决实验室问题,请利用缓存的规范化过程来利用此漏洞。找到 XSS 漏洞并注入一个有效载荷,该载荷将在受害者的浏览器中执行alert(1)
。然后,将恶意 URL 传递给受害者。
- name: 实验室-从业者
desc: URL规范化 >>
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-normalization
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
一个博客站点。
根据题目中的提示,我们需要先找到 XSS 漏洞,然后再投毒。
# 找XSS漏洞-1(失败)
我瞄准了评论区,发布了一个评论,发现有过滤。
但转念一想,既然是投毒,那肯定是反射型 XSS。
然后发现了一个隐藏的input
标签,对应 GET 参数postId
。
修改 GET 参数postId
,失败,无法造成 XSS。
# 找XSS漏洞-2(失败)
提交评论之后,会跳转至一个 “确认” 页面。
这个确认页面也有一个postId
参数,而且参数值会反馈在即时响应当中。
尝试注入 XSS 载荷,依然被过滤......
# 找XSS漏洞-3(成功)
然后我用 Burp Scanner 扫描器对站点进行了扫描,虽然没有扫描出 XSS 漏洞,但是当扫描器访问一个不存在的路径时,我发现了疑点。
如果访问一个不存在的路径,例如/abc
,则响应内容会提示 “Not Found /abc” 没有找到该路径。
而且最重要的是,这个 404 页面有缓存!
如果直接通过浏览器访问这类 404 页面,则 XSS 载荷会被自动 URL 编码。
但如果直接在 Burp 中发送未编码的请求,则 XSS 载荷会被正常注入。
看看看!有害的响应被缓存了!
/abc</p><script>alert(1)</script>
再次通过浏览器访问相同的路径,这一次,命中了有害的响应,成功执行了alert()
。
# 完成实验
接着在 Burp 中右键刚刚的请求数据包,然后选择 “Copy URL” 复制未编码过的 URL。
回到主页,点击上方的 “Deliver link to victim”(向受害者提供链接) 打开提交输入框,然后粘贴刚刚复制的 URL。
先不要提交。先不要提交。先不要提交。
因为我们刚刚缓存的有害响应已经过期了,需要重新投毒。
这次实验的缓存时效只有 10 秒,有点短,不过够用了。
在 Burp 中发送投毒请求,确保产生了新缓存。
在 10 秒钟内回到主页,点击 “确定” 将刚刚的链接提供给受害者。
- 如果提供的 URL 无法完成实验,则会提示你 “重新来过”
- 如果提供的 URL 能够完成实验,则会提示 “URL 已经提供给受害者”
关闭提示框之后,实验完成。