挖洞经验 | 用多态图片实现谷歌学术网站(Google Scholar)XSS漏洞触发
字数 1520 2025-08-15 21:30:57

利用多态图片实现XSS漏洞攻击:以Google Scholar为例

1. 多态图片基础概念

多态图片(Polymorphic Image)是指包含或被嵌入代码的图片,这些代码可以位于:

  • 图片文件头部
  • 图片文件尾部
  • 元数据区域(如EXIF)
  • 熵编码数据段(ECS)等区域

2. Google Scholar漏洞背景

2.1 漏洞发现点

Google Scholar存在一个设计缺陷:

  • 使用location.hash参数和XHR请求方式呈现Web界面
  • 在模板片段显示时,会提取URI并以未转义方式加载到网页中
  • 允许用户上传图片并能以同源方式渲染加载

2.2 漏洞利用难点

虽然看起来简单,但Google Scholar后端对上传图片进行了多种处理:

  • 元数据剥离
  • 图片重新处理
  • 图片格式转换

3. 多态图片嵌入XSS Payload的技术

3.1 隐藏在EXIF中的Payload

JPEG/JFIF图片

  • 元数据存储在特定应用标记(APPX)中
  • 大多数图片处理库未充分考虑这些标记的安全性

测试方法

  1. 创建包含1.2k通用EXIF标记的测试图片
  2. 在每个通用元数据区域嵌入alert() XSS Payload
  3. 使用Exiftool或手动插入Payload

局限性

  • 某些EXIF字段会被Web平台过滤
  • PNG转JPG时元数据会丢失

3.2 Payload嵌入到图片末尾

技术实现

  • JPG:嵌入到0xFFD9后
  • PNG:嵌入到IEND后

适用场景

  • 上传图片不做转化的Web平台
  • Google Scholar不适用此方法

3.3 Payload嵌入到PNG的iDAT区域

  • iDAT块存储pixel像素信息
  • 可尝试绕过调整大小或重新采样操作
  • Google Scholar仅生成JPG图片,此技术不适用

3.4 Payload嵌入到JPG的ECS区域

技术细节

  • ECS(熵编码数据段)包含霍夫曼压缩位流
  • 代表图像数据的最小编码单位(MCU)

成功方法

  1. 创建与转化后图片质量相同的原始JPG
  2. 使用0长度字符可更改EXIF信息的图片
  3. 发现用0x00和0x14字节分隔ECS可保留前几个字节
  4. 找到正确的Payload安置点

最终效果

  • 上传后Payload不被图片转化机制破坏
  • 成功触发XSS弹窗(alert(1))

4. 漏洞利用工具

Standardized Image Processing Test Suite

  • 测试图片处理库(Imagemagick, GraphicsMagick, Libvips)的安全性
  • 可发现隐藏webshell或绕过CSP的漏洞
  • 开源地址:Github上的StandardizedImageProcessingTest

5. 漏洞上报与奖励

时间线

  • 2019-09-28:上报给Google安全团队
  • 2019-09-30:要求提供PoC
  • 2019-10-04:提供PoC #1
  • 2019-10-10:要求提供其他PoC
  • 2019-10-11:提供PoC #2
  • 2019-11-05:确认漏洞,奖励$6267.40
  • 2019-11-19:发现同类漏洞,追加奖励$3133.70

总奖励:$9400.10

6. 防御建议

  1. 对所有用户上传内容进行严格过滤和转义
  2. 实现内容安全策略(CSP)
  3. 图片处理时彻底清除所有元数据
  4. 对图片内容进行完整性验证
  5. 使用沙箱环境渲染用户上传内容

7. 总结

该案例展示了如何利用多态图片的高级技术绕过现代Web应用的安全防护,特别强调了在图片处理过程中容易被忽视的安全盲点。通过深入研究图片文件格式和Web应用处理逻辑,安全研究人员可以发现并利用这类隐蔽的漏洞。

利用多态图片实现XSS漏洞攻击:以Google Scholar为例 1. 多态图片基础概念 多态图片(Polymorphic Image)是指包含或被嵌入代码的图片,这些代码可以位于: 图片文件头部 图片文件尾部 元数据区域(如EXIF) 熵编码数据段(ECS)等区域 2. Google Scholar漏洞背景 2.1 漏洞发现点 Google Scholar存在一个设计缺陷: 使用location.hash参数和XHR请求方式呈现Web界面 在模板片段显示时,会提取URI并以未转义方式加载到网页中 允许用户上传图片并能以同源方式渲染加载 2.2 漏洞利用难点 虽然看起来简单,但Google Scholar后端对上传图片进行了多种处理: 元数据剥离 图片重新处理 图片格式转换 3. 多态图片嵌入XSS Payload的技术 3.1 隐藏在EXIF中的Payload JPEG/JFIF图片 : 元数据存储在特定应用标记(APPX)中 大多数图片处理库未充分考虑这些标记的安全性 测试方法 : 创建包含1.2k通用EXIF标记的测试图片 在每个通用元数据区域嵌入alert() XSS Payload 使用Exiftool或手动插入Payload 局限性 : 某些EXIF字段会被Web平台过滤 PNG转JPG时元数据会丢失 3.2 Payload嵌入到图片末尾 技术实现 : JPG:嵌入到0xFFD9后 PNG:嵌入到IEND后 适用场景 : 上传图片不做转化的Web平台 Google Scholar不适用此方法 3.3 Payload嵌入到PNG的iDAT区域 iDAT块存储pixel像素信息 可尝试绕过调整大小或重新采样操作 Google Scholar仅生成JPG图片,此技术不适用 3.4 Payload嵌入到JPG的ECS区域 技术细节 : ECS(熵编码数据段)包含霍夫曼压缩位流 代表图像数据的最小编码单位(MCU) 成功方法 : 创建与转化后图片质量相同的原始JPG 使用0长度字符可更改EXIF信息的图片 发现用0x00和0x14字节分隔ECS可保留前几个字节 找到正确的Payload安置点 最终效果 : 上传后Payload不被图片转化机制破坏 成功触发XSS弹窗(alert(1)) 4. 漏洞利用工具 Standardized Image Processing Test Suite : 测试图片处理库(Imagemagick, GraphicsMagick, Libvips)的安全性 可发现隐藏webshell或绕过CSP的漏洞 开源地址:Github上的StandardizedImageProcessingTest 5. 漏洞上报与奖励 时间线 : 2019-09-28:上报给Google安全团队 2019-09-30:要求提供PoC 2019-10-04:提供PoC #1 2019-10-10:要求提供其他PoC 2019-10-11:提供PoC #2 2019-11-05:确认漏洞,奖励$6267.40 2019-11-19:发现同类漏洞,追加奖励$3133.70 总奖励 :$9400.10 6. 防御建议 对所有用户上传内容进行严格过滤和转义 实现内容安全策略(CSP) 图片处理时彻底清除所有元数据 对图片内容进行完整性验证 使用沙箱环境渲染用户上传内容 7. 总结 该案例展示了如何利用多态图片的高级技术绕过现代Web应用的安全防护,特别强调了在图片处理过程中容易被忽视的安全盲点。通过深入研究图片文件格式和Web应用处理逻辑,安全研究人员可以发现并利用这类隐蔽的漏洞。