挖洞经验 | 从谷歌防灾地图服务发现Google.org的XSS和Clickjacking漏洞
字数 1419 2025-08-18 11:38:53

谷歌防灾地图服务XSS与Clickjacking漏洞分析教学文档

1. 漏洞背景

1.1 谷歌防灾地图服务简介

  • 正式名称:Google Crisis Map
  • 创建时间:2012年
  • 托管域名:google.org
  • 功能:帮助用户发现和预警重要灾害活动
  • 特点:Web架构更新缓慢,访问量较少

1.2 服务访问方式

  • 主页面:https://google.org/crisismap
  • 创建地图URL:https://google.org/crisismap/.maps

2. 漏洞发现过程

2.1 服务功能分析

  1. 默认地图展示:任何用户可查看三幅默认地图
  2. 地图创建权限
    • Gmail账号无法创建地图
    • 需要GSuite账户或其他非gmail.com后缀邮箱登录
  3. 地图创建流程
    • 点击"Create Map"按钮
    • 添加图层(Add layer)功能

2.2 XSS漏洞发现

  1. 漏洞入口点:图层对话框中的"Source URL"字段

  2. 前端验证机制

    • 检查URL格式:必须包含http://或https://协议
    • 错误提示:"Invalid URL - please include a protocol (e.g. http:// or https://)"
  3. 绕过验证方法

    • 使用BurpSuite拦截POST请求
    • 修改请求中的Source URL值为javascript:alert(document.domain)
    • 请求成功提交到后端
  4. 触发条件

    • 用户点击"Download KML"按钮
    • 成功执行JavaScript代码

2.3 Clickjacking漏洞发现

  1. 漏洞表现:响应头中缺少X-Frame-Options设置
  2. 利用方式
    • 将漏洞页面嵌入iframe
    • 使用CSS技术伪装点击区域

3. 漏洞技术分析

3.1 XSS漏洞技术细节

  1. 漏洞类型:存储型XSS
  2. 根本原因
    • 前端验证不彻底
    • 后端缺乏对Source URL的二次验证
  3. 攻击流程
    1. 攻击者创建地图并添加恶意图层
    2. 拦截请求修改Source URL为JavaScript代码
    3. 发布地图获取公开URL
    4. 受害者访问地图并点击下载按钮
    5. XSS代码在google.org域下执行
    

3.2 Clickjacking漏洞技术细节

  1. 漏洞原理:页面可被嵌入第三方网站iframe
  2. 利用技术
    • 使用透明iframe覆盖诱骗点击区域
    • 结合XSS实现更复杂的攻击

4. 漏洞利用演示

4.1 XSS利用POC

<!-- 创建恶意地图 -->
POST https://google.org/crisismap/.api/maps/1234

<!-- 修改请求体中的Source URL为 -->
javascript:alert(document.domain)

4.2 Clickjacking利用POC

<style>
  iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 5000px;
    height: 5000px;
    opacity: 0.5;
    z-index: 2;
  }
  .click-me {
    position: absolute;
    top: 100px;
    left: 100px;
    z-index: 1;
    background: black;
    color: white;
    padding: 10px;
  }
</style>

<div class="click-me">点击我查看重要信息</div>
<iframe src="https://google.org/crisismap/example.com/test"></iframe>

5. 漏洞修复建议

5.1 XSS防御措施

  1. 前后端双重验证
    • 前端:严格验证URL格式
    • 后端:使用白名单验证协议和域名
  2. 输入过滤
    • 禁止javascript:等危险协议
    • 对特殊字符进行转义

5.2 Clickjacking防御措施

  1. HTTP头设置
    • X-Frame-Options: DENY
    • Content-Security-Policy: frame-ancestors 'none'
  2. Frame Busting代码
    if (top != self) top.location = self.location;
    

6. 漏洞挖掘经验总结

  1. 测试重点区域

    • 老旧系统(更新缓慢)
    • 低访问量服务
    • 用户输入点(特别是URL字段)
  2. 测试方法

    • 检查前端验证是否可绕过
    • 分析HTTP头安全性设置
    • 组合利用多个漏洞(XSS+Clickjacking)
  3. 漏洞危害最大化

    • 考虑漏洞的实际利用场景
    • 尝试将多个漏洞串联利用
    • 评估漏洞在目标域名下的影响范围

7. 漏洞上报时间线

  1. 漏洞发现与验证
  2. 编写详细报告
  3. 提交谷歌安全团队
  4. 漏洞修复与确认

注:具体上报进程未在原文中详细说明,实际测试应遵循各公司的漏洞披露政策

谷歌防灾地图服务XSS与Clickjacking漏洞分析教学文档 1. 漏洞背景 1.1 谷歌防灾地图服务简介 正式名称:Google Crisis Map 创建时间:2012年 托管域名:google.org 功能:帮助用户发现和预警重要灾害活动 特点:Web架构更新缓慢,访问量较少 1.2 服务访问方式 主页面:https://google.org/crisismap 创建地图URL:https://google.org/crisismap/.maps 2. 漏洞发现过程 2.1 服务功能分析 默认地图展示 :任何用户可查看三幅默认地图 地图创建权限 : Gmail账号无法创建地图 需要GSuite账户或其他非gmail.com后缀邮箱登录 地图创建流程 : 点击"Create Map"按钮 添加图层(Add layer)功能 2.2 XSS漏洞发现 漏洞入口点 :图层对话框中的"Source URL"字段 前端验证机制 : 检查URL格式:必须包含http://或https://协议 错误提示:"Invalid URL - please include a protocol (e.g. http:// or https://)" 绕过验证方法 : 使用BurpSuite拦截POST请求 修改请求中的Source URL值为javascript:alert(document.domain) 请求成功提交到后端 触发条件 : 用户点击"Download KML"按钮 成功执行JavaScript代码 2.3 Clickjacking漏洞发现 漏洞表现 :响应头中缺少X-Frame-Options设置 利用方式 : 将漏洞页面嵌入iframe 使用CSS技术伪装点击区域 3. 漏洞技术分析 3.1 XSS漏洞技术细节 漏洞类型 :存储型XSS 根本原因 : 前端验证不彻底 后端缺乏对Source URL的二次验证 攻击流程 : 3.2 Clickjacking漏洞技术细节 漏洞原理 :页面可被嵌入第三方网站iframe 利用技术 : 使用透明iframe覆盖诱骗点击区域 结合XSS实现更复杂的攻击 4. 漏洞利用演示 4.1 XSS利用POC 4.2 Clickjacking利用POC 5. 漏洞修复建议 5.1 XSS防御措施 前后端双重验证 : 前端:严格验证URL格式 后端:使用白名单验证协议和域名 输入过滤 : 禁止javascript:等危险协议 对特殊字符进行转义 5.2 Clickjacking防御措施 HTTP头设置 : X-Frame-Options: DENY Content-Security-Policy: frame-ancestors 'none' Frame Busting代码 : 6. 漏洞挖掘经验总结 测试重点区域 : 老旧系统(更新缓慢) 低访问量服务 用户输入点(特别是URL字段) 测试方法 : 检查前端验证是否可绕过 分析HTTP头安全性设置 组合利用多个漏洞(XSS+Clickjacking) 漏洞危害最大化 : 考虑漏洞的实际利用场景 尝试将多个漏洞串联利用 评估漏洞在目标域名下的影响范围 7. 漏洞上报时间线 漏洞发现与验证 编写详细报告 提交谷歌安全团队 漏洞修复与确认 注:具体上报进程未在原文中详细说明,实际测试应遵循各公司的漏洞披露政策