从业者-web消息-实现DOM型XSS
# 实验室:使用Web消息的DOM型XSS
# 题目
此实验室包含一个简单的 Web 消息漏洞。若要解决实验室问题,请使用漏洞利用服务器 向 目标站点发布一条消息,并导致调用print()
函数。
- name: 实验室-从业者
desc: 使用Web消息的DOM型XSS >>
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/dom-based/controlling-the-web-message-source/lab-dom-xss-using-web-messages
bgColor: '#001350'
textColor: '#4cc1ff'
1
2
3
4
5
6
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
一个购物站点。
通过开发者工具查看网页源代码,可以看到一段 JavaScript:
window.addEventListener('message', function(e) {
document.getElementById('ads').innerHTML = e.data;
})
1
2
3
2
3
这将会获取 web 消息,然后寻找id
属性为ads
的元素,并将元素的 HTML 设置为 web 消息的内容。
而在这段代码的上方,刚好就有一个id=ads
的 div 标签。
访问漏洞利用服务器,构造一个载荷:
<iframe src="//<目标站点>" onload="this.contentWindow.postMessage('xyz123','*')">
1
通过iframe
标签框柱目标网页,然后向网页发送一条 web 消息,内容为xyz123
。
访问漏洞利用 URL,正确地框柱了目标网页,并且成功将 div 元素的值设置为了xyz123
。
将 web 消息的内容xyz123
修改为 XSS 载荷:
<iframe src="//<目标站点>" onload="this.contentWindow.postMessage('<img src=1 onerror=print()>','*')">
1
再次访问漏洞利用 URL,成功执行print()
函数。
如图所示,成功地将 div 元素的 HTML 内容设置为了 XSS 载荷,并且载荷被正常解析。
将以上载荷发送给受害用户。
实验完成。
编辑 (opens new window)