CSV注入漏洞基本原理
CSV注入的原理是当excel或者CSV格式文件中的单元格存在formula时,excel会进行计算,可能导致数据和代码的混淆。
什么时候单元格的内容会被计算呢?目前看到的是以下几种情况
我们在网上见得最多的PoC应该是来自 The Absurdly Underestimated Dangers of CSV Injection 一文:
|
|
但其实参考 What does the formula =cmd|’/C calc’!A0 do in Excel and why? 结合实验,我们发现 A0
是不必要的,起作用的是感叹号。所以以下PoC都是可用的
弹不出框需要开启DDE
在文件->选项->信任中心->信任中心设置->外部内容
中开启DDE(Dynamic Data Exchange)
CSV注入漏洞最短PoC
|
|
修复建议
参考 https://owasp.org/www-community/attacks/CSV_Injection 对每个cell进行包裹和转义,即 xxx"s => "'xxx""s"
。
- 每个cell用双引号包裹
- cell开头加单引号
- cell中的双引号使用两个双引号转义
例如
Input | Escaped Output |
---|---|
=1+2";=1+2 | "'=1+2"";=1+2" |
=1+2'" ;,=1+2 | "'=1+2'"" ;,=1+2" |
失败的防御方法:如果只是检测不以 -+@=
开头是不行的,可以在前面加上 ,;
产生新的单元格来绕过,如
|
|
不求甚解
其实还是没有完全理解 |
和 !
是怎么起作用的,是否有相关的specification,是否有其他的特殊语法,是否有什么函数可以利用。但是先这样吧,用到再研究。
参考链接
- csv注入利用和绕过总结:https://www.cnblogs.com/nul1/p/14017249.html
- The Absurdly Underestimated Dangers of CSV Injection: http://georgemauer.net/2017/10/07/csv-injection.html
- https://owasp.org/www-community/attacks/CSV_Injection
- https://superuser.com/questions/1149383/what-does-the-formula-cmd-c-calca0-do-in-excel-and-why
- CSV注入漏洞原理及利用教程:https://blog.csdn.net/weixin_41924764/article/details/108665746