背景:在做甲方的渗透测试的时候发现的一种漏洞:很多开发在做类似文件下载或导出的功能时没有控制用户的权限,也没有考虑到表格的输入需要进行过滤。因此导致了此类漏洞的产生
CSV简介
CSV(Comma Separated Values)是一种常见的文件格式,用于存储表格数据。它采用文本形式,将数据以逗号作为分隔符进行排列,通常每行表示一个数据记录,而逗号则用于分隔每个字段。
CSV文件通常由以下要素组成:
- 行(Rows):每行代表一个数据记录
- 列(Columns):每列代表数据记录中的一个字段
- 字段(Fields):数据记录中的单个数据项
- 分隔符(Delimiter):用于分隔字段的字符,通常是逗号(,),但也可以是其他字符,如制表符(tab)或分号(;)
- 引号(Quotes):可选,用于包裹字段
CSV文件的简单格式示例:
Name, Age, Gender
John, 25, Male
Alice, 30, Female
Bob, 28, Male
CSV注入原理
CSV注入是一种包含恶意命令的excel公式插入到可以导出csv或xls等格式的文本中,当在excel中打开csv文件时,文件会转换为excel格式并提供excel公式的执行功能,会造成命令执行问题。
在excel中,如果单元格第一个字符是“+、-、@、=”这类的符号时,excel会将其作为一个表达式执行,如:
而“=”不止可以当作数据计算的符号,在DDE中也可执行外部应用
DDE
DDE(Dynamic Data Exchange)是一种在Microsoft Windows操作系统中用于应用程序间通信的机制。它允许应用程序之间在运行时共享数据,并通过发送和接收消息来实现交互。这意味着一个应用程序可以向另一个应用程序发送数据,然后后者可以动态地接收并使用这些数据,而且数据的变化会立即反映在接收方。这种特性为命令注入提供了可行性。
漏洞复现
创建一个excel表格,直接在单元格中输入payload:
=1 +cmd|'C calc'!A0
将其保存,注意:Excel现在的版本需要启用动态数据交换服务器启动
在【文件】->【选项】->【信任中心】->【信任中心设置】->【外部消息】
完成后,再次打开,计算器会自动跳出来
总结
这个漏洞其实影响非常大,在之前的案例中可以直接配合Flash的漏洞进行getshell,因此在实际开发过程中,表格内容不应该由用户控制,同时要对表格的输入内容做严格过滤,禁止首字母出现“+”,“-”,“=”,“@”。