当前位置: 首页 > news >正文

点击劫持概述

目录

介绍

构建基础攻击

预填表单输入的攻击

Frame Busting 脚本与绕过

点击劫持与DOM XSS攻击结合

多步点击劫持

防御

介绍

点击劫持是一种基于界面的攻击手段。攻击者通过诱导用户点击虚假网站上的内容,从而欺骗用户触发另一个隐藏网站上的功能。

例:用户访问了一个虚假网站(可能来自邮件链接),并点击了一个“领取奖品”的按钮。然而,用户在不知情的情况下,实际上被诱导点击了一个隐藏的替代按钮,导致在另一个网站上完成了账户付款。

这种技术依赖于在页面中嵌入一个不可见但可操作的网页(通常使用iframe标签)。这个 iframe 被叠加在用户能看到的虚假网页内容之上。

其不同于CSRF,点击劫持需要用户执行某个具体操作(如点击按钮),而 CSRF 则是在用户完全不知情或没有交互的情况下,伪造并发送整个请求。

维度说明
攻击本质视觉欺骗。用户看到的(Decoy UI)和实际点击的(Target UI)不是同一个东西。
核心手段利用iframe将透明的恶意页面覆盖在正常页面之上。
用户行为必须由用户主动点击才能触发。
防御思路防止网页被非法嵌套(如使用X-Frame-Options响应头或 CSP 指令)。

构建基础攻击

点击劫持攻击使用 CSS 来创建和作图层。

<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"> ...这里放置诱饵内容,比如“点击领取 iPhone”... </div> <iframe id="target_website" src="https://vulnerable-website.com"> </iframe> </body>
  • 精确对齐。攻击者不仅要让两个页面重叠,还要确保目标网站的关键按钮(如“确认支付”)与诱饵页面的虚假按钮(如“领取奖品”)在坐标上完美契合。

    • 响应式布局对齐:通过使用 CSS 的absolute(绝对定位)和relative(相对定位)属性,攻击者可以确保无论用户使用什么屏幕尺寸、浏览器类型或操作系统,目标 iframe 都能精准地覆盖在诱饵内容之上。

    • 坐标计算:攻击者会精确计算width(宽度)、height(高度)以及top/left偏移量。

  • 视觉伪装。将透明度设为 0 或接近 0(如0.00001),使目标 iframe 对用户完全不可见。

  • 堆叠顺序。目标 iframe 的z-index会被设得比诱饵页面高,确保用户的点击动作首先被顶层的隐藏 iframe 捕获。

  • 现代浏览器都有针对的防御,例如阈值检测,某些浏览器(如Chrome 76+)具有“透明 iframe 检测”机制。如果一个 iframe 的透明度低于某个特定阈值且用户尝试点击,浏览器可能会拦截该操作或发出警告。

  • 手动编写 CSS 和 HTML 来对齐iframe太过繁琐,可以利用 bp 提供的 Clickbandit 工具。

对应实验:通过手动创建诱导界面和隐藏界面,诱导用户点击“删除账户”,从而实现攻击。

预填表单输入的攻击

某些网站在要求用户完成并提交表单时,允许在提交前通过GET 参数预先填充表单输入项。

在基础点击劫持中,攻击者只能诱导用户点击一个现有的按钮。但在“预填表单”攻击中,攻击者实现了对数据流的控制。

1.寻找切入点。寻找那些通过 URL 接收数据的表单。

  • 普通 URL:https://vulnerable-website.com/transfer-money

  • 含预填参数的 URL:https://vulnerable-website.com/transfer-money?to=attacker_account&amount=1000

2.构造恶意iframe。攻击者将上述包含恶意参数的 URL 嵌入到透明的iframe中。此时,受害者访问诱饵页面时,后台加载的目标网页表单已经自动填好了:

  • 收款人:黑客

  • 金额:1000元

3.诱导提交

攻击者在诱饵页面上设置一个诱人的按钮(如“领取您的免费咖啡”),其位置精准覆盖在隐藏表单的“确认提交”按钮之上。用户点击后,浏览器实际执行:在vulnerable-website.com上提交了一份已经填好恶意数据的表单。

Frame Busting 脚本与绕过

网站开发者意识到页面可能被劫持,于是写了一段 JavaScript 放在网页里。其通常会执行以下部分或全部行为:

  • 检查并强制当前应用窗口为“主窗口”或“顶层窗口”(Top Window)。

  • 强制使所有框架可见(消除透明度伪装)。

  • 防止点击不可见的框架。

  • 拦截潜在的点击劫持攻击并向用户发出警报。

攻击者绕过:

  • HTML5 的sandbox属性是浏览器原生支持的,优先级高于页面内的脚本。

  • 攻击者在诱饵页面的iframe标签里加上sandbox="allow-forms",但不给allow-top-navigation权限。

  • 由于没有allow-top-navigation权限,网站自带的 Frame Busting 脚本想执行“强制跳转自救”时,会被浏览器拦截并报错。

  • 由于设置了allow-forms,用户在透明层点击“提交”的操作依然能成功发给服务器。

点击劫持与DOM XSS攻击结合

通常情况下,DOM XSS 需要诱导用户点击一个长得很可疑的链接。而点击劫持完美解决了伪装问题:

  • 传统 XSS:用户可能会对https://victim.com/#alert(1)产生警觉。

  • 组合攻击:用户看到的只是一个干净的诱饵网页(如“点击观看最新电影”),但他们点击的瞬间,隐藏在透明 iframe 里的 XSS 载荷(Payload)就被激活了。

<style> iframe { position:relative; width:500px; height:700px; opacity: 0.001; z-index: 2; } div { position:absolute; top:610; left:80; z-index: 1; } </style> <div>click me</div> <iframe src="https://0aac009c03d9d2ea8605bc65008f0090.web-security-academy.net/feedback?name=<img src=1 οnerrοr=print()>&email=hacker@attacker-website.com&subject=test&message=test#feedbackResult"></iframe> #其中的print()就是实现的攻击,在实际应用中可以改成别的操作

多步点击劫持

(Multistep Clickjacking)

在基础攻击中,攻击者只需要对齐一个按钮。但在多步攻击中,攻击者需要引导用户完成一个“流程”。

分层引导:诱饵页面可能会设计成一个小游戏或多步问卷。

动态位置调整:攻击者可能会使用 JavaScript 动态改变iframe的位置,或者在用户完成第一次点击后,自动切换显示的div层,确保每一步的诱饵按钮都精准覆盖在目标站点的下一个操作点上。

<style> iframe { position:relative; width:500px; height: 700px; opacity: 0.001; z-index: 2; } .firstClick, .secondClick { position:absolute; top:500px; left:50px; z-index: 1; } .secondClick { top:295px; left:225px; } </style> #底层(诱饵层): 两个 div(firstClick 和 secondClick),分别被赋予了不同的位置参数 <div class="firstClick">click me first</div> <div class="secondClick">click me next</div> <iframe src="https://0a8c00f804e35e7f80b8d56700af00c6.web-security-academy.net/my-account"></iframe> #位于顶层的真实页面(透明)

防御

客户端的脚本防御(Frame Busting)非常脆弱,因此真正的防御必须由服务器驱动,通过向浏览器发出明确的指令,限制网页被嵌套的方式。

  • X-Frame-Options (XFO)

    这是最早出现的、专门针对点击劫持的 HTTP 响应头。虽然它比较老,但在现代浏览器中依然得到广泛支持。

    它有三个可选值:

    • DENY:最严厉的指令。完全禁止任何网页(包括同源的页面)将此页面嵌套在iframe中。

    • SAMEORIGIN:允许同源(同一个域名、协议和端口)的页面嵌套此页面。这在需要实现站内功能嵌套时非常有用。

    • ALLOW-FROM uri:只允许特定的来源嵌套。(注:现代浏览器对其支持有限,不建议在新项目中使用,应优先考虑 CSP)。

  • Content Security Policy (CSP) —— 现代防御首选

    CSP 是一种功能极其强大的安全框架,其中的frame-ancestors指令是目前防御点击劫持的行业标准

    相比 XFO,CSP 更加灵活且难以绕过:

    • frame-ancestors 'none':等同于X-Frame-Options: DENY

    • frame-ancestors 'self':等同于X-Frame-Options: SAMEORIGIN

    • frame-ancestors https://trusted-site.com:允许指定的受信任域名嵌套此页面。

  • 辅助防御手段:SameSite Cookie 策略

    虽然它不直接阻止iframe嵌套,但SameSite属性可以防止浏览器在跨站嵌套时发送 Cookie。

    • 如果设置Set-Cookie: session=xyz; SameSite=LaxStrict,当你的网站被嵌套在攻击者的诱饵网站中时,浏览器不会发送登录凭证

    • 结果:即使攻击者成功劫持了点击,由于没有 Cookie,用户在隐藏页面里处于“未登录”状态,敏感操作(如转账)也就无法执行。

http://www.jsqmd.com/news/436860/

相关文章:

  • 程序员如何选公司,这八个要素一定要记牢了!
  • 2026年3月粮食提升机械厂家推荐,行业权威盘点与品质红榜发布 - 品牌鉴赏师
  • 市场橡胶木生产厂家推荐排行榜 - 品牌推荐(官方)
  • 2026年3月水平输送机厂家最新推荐,水平长距离输送专用 - 品牌鉴赏师
  • Java小白面试:从Spring Boot到分布式缓存的深入探讨
  • 基于SSM+VUE的智能租房网站[SSM]-计算机毕业设计源码+LW文档
  • 前端老鸟的血泪史:CSS优先级权重总打架?这套“土味“心法让你彻底躺平
  • 2026年参考:如何根据市场口碑挑选合适的软化水箱,污水提升设备/稳压泵/消防水箱/软化水箱,软化水箱制造商推荐排行 - 品牌推荐师
  • 基于SSM+VUE的重霄疾病诊断专家辅助系统[SSM]-计算机毕业设计源码+LW文档
  • 深入解析:ClaudeCode权限管理实战:让 AI 既安全又高效
  • 2026哈尔滨汽车音响改装市场店家排名 汽车音响改装、汽车隔音降噪哪家技术好,哪家更专业?浅谈哈尔滨汽车音响改装一套需要多少钱,多少费用? - 木火炎
  • 港科大团队如何让AI训练变得更聪明
  • 正规的橡胶木工厂推荐排行榜 - 品牌推荐(官方)
  • 微信小程序制作平台有哪些?小程序制作平台评测推荐 - 码云数智
  • 小程序开发需要多少钱 - 码云数智
  • Maven手册
  • 什么是OSGB文件,如何怎么免费打开OSGB文件
  • Qt 历险记 面试总结经验
  • PyTorch新手必看!轻松掌握TensorBoard可视化技巧,让你的模型调试不再头疼!
  • AI模型训练的步骤与最佳实践
  • 小程序商城哪个平台好一点 - 码云数智
  • 2026年3月市面直纹铝管实力厂家排行,附铜排相关推荐,铝角/合金铝排/超宽铝板/1060无缝铝管,铜排源头厂家哪个好 - 品牌推荐师
  • 微信小程序开发需要多少钱? - 码云数智
  • Adipotide (FTPP);CKGGRAKDC-GG-D (KLAKLAK) 2
  • 需求低保真原型
  • DeepSeek V4 Sealion-lite惊爆:百万token超长上下文+原生多模态,华为优先适配国产芯片,英伟达垄断神话被撕开!
  • 类与对象(中) - 指南
  • Spring事务传播机制7大类型详解
  • TKG-Thinker:AI大突破!强化学习赋能时序知识图谱,复杂问答秒杀现有方法!
  • B7-33;VIKLSGRELVRAQIAISGMSTWSKRSL