学徒-DOM型XSS-jQuery选择接收器-hashchange事件
# 实验室:DOM型XSS-jQuery选择接收器-hashchange事件
# 题目
此实验室在 主页 上包含一个基于 DOM 的跨站脚本漏洞。它使用 jQuery 库的$()
选择器函数自动滚动到给定的帖子,其标题通过location.hash
属性传递。
若要解决实验室问题,请向受害者发送一个漏洞利用,在其浏览器中调用print()
函数。
- name: 实验室-学徒
desc: DOM型XSS-jQuery选择接收器-hashchange事件 >>
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/cross-site-scripting/dom-based/lab-jquery-selector-hash-change-event
bgColor: '#001350'
textColor: '#39d50c'
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
启用浏览器的开发者工具,查看网页源代码时发现一处 JavaScript:
$(window).on('hashchange', function(){
var post = $('section.blog-list h2:contains(' + decodeURIComponent(window.location.hash.slice(1)) + ')');
if (post) post.get(0).scrollIntoView();
});
2
3
4
以上代码会获取 URL 中的 hash,然后根据 hash 的值将网页滚动到指定的位置。
在 URL 中添加 hash 符号#
,并在符号的后方添加任意一篇博客文章的标题,例如 “Cell Phone Free Zones”。
添加完成之后,访问该 URL。
访问之后,网页自行滚动到了对应的博客文章处。
确认 hash 的作用之后,点击上方的 “Go to exploit server” 进入漏洞利用服务器。
这是漏洞利用服务器中的默认内容:
访问漏洞利用 URL 后,网页会在响应中返回设置好的内容:
回到漏洞利用服务器的设置界面,将 “Body” 的内容修改为攻击载荷。
再次访问 URL,网页返回了刚刚设置的新内容,并正常解析和执行了 alert 函数。
可以使用iframe
标签以及onload
事件,来利用刚刚的 hash 滚动功能:
<iframe src="https://0a2800e004b5f84c802c35d200ac00a2.web-security-academy.net/#" onload="this.src+='<img src=1 onerror=print()>'">
以上代码定义了一个iframe
标签,其src
属性值是受害网页的 URL 以及一个 hash 符号#
。
在标签内定义一个onload
事件,当该标签被加载时,攻击载荷将会被拼接到 URL 的 hash 符号之后,受害网页会解析并执行其中的载荷。
将 “Body” 设置为上述载荷之后,访问漏洞利用 URL,成功调用 print 函数。
刚刚是我们自己访问并调用了 print 函数,所以并不能完成实验室。
在漏洞利用服务器中有一段提示,你需要将攻击载荷发送给受害者,并且你的载荷必须兼容 Chrome 浏览器。
点击下方的 “Deliver exploit to victim” 将设置好的攻击载荷发送给受害者。
发送之后,实验完成。
实验完成。