赞
踩
最近在开发中,遇到CSV注入漏洞,特此研究一下。我们知道“对于网络安全来说,一切的外部输入都是不可信的”,但在我们大脑的第一印象中会把csv文件当做是普通的文件,未对其保持足够的警惕,从而引起安全漏洞问题。
攻击人员通过在CSV中构造恶意的命令或函数,当正常用户使用Excel打开这个CSV文件时,恶意的命令或函数被执行,从而导致攻击的行为。
1、CSV文件中的几个特殊字符+、-、@、=都可用于在Microsoft Excel中触发公式解释
例如:在CSV单元格中输入“=1+1”,回车后单元格的值变为2
2、DDE(Dynamic Data Exchange)
a.Windows下进程间通信协议,是一种动态数据交换机制,使用DDE通讯需要两个Windows应用程序,其中一个作为服务器处理信息,另一个作为客户机从服务器获得信息。DDE支持Microsoft Excel,LibreOffice和Apache OpenOffice。Excel、Word、Rtf、Outlook都可以使用这种机制,根据外部应用的处理结果来更新内容;
b.如果我们只做包含DDE公式的CSV文件,那么在打开该文件时,Excel就会尝试执行外部应用;
网站上提供CSV格式的导出文件,CSV文件的内容是用户可以控制的。
例如:攻击人员通过写入功能注入恶意命令,用户下载文件时,出现该攻击。
漏洞演示
1、输入校验保护
根据业务需求,控制用户输入为字母数字字符;或黑名单过滤(+、-、@、=)开头的单元格数据,过滤=(-)cmd或=(-)HYPERLINK或concat等;
2、导出文件时保护
a、只导出查看,没有导入的场景:
导出csv、excel文件时,在所有以特殊字符(+、-、@、=)开头的单元格里,在其前面加上tab键;
如果前后由双引号包围,且前引号后面跟着(+、-、@、=),要在前引号的左侧或右侧加上tab键;
b、导出后需要导入的场景
导出csv、excel文件时,对使用特殊字符(+、-、@、=)进行转义,(比如遇到+,= 就变成&+,&=,当然遇到转义符&,也要处理,变成&&),导入时再转义回来处理;
参考:
https://www.cnblogs.com/Eleven-Liu/p/12397857.html
https://www.cnblogs.com/nul1/p/12934636.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。