CSV注入

背景:在做甲方的渗透测试的时候发现的一种漏洞:很多开发在做类似文件下载或导出的功能时没有控制用户的权限,也没有考虑到表格的输入需要进行过滤。因此导致了此类漏洞的产生

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,因此在实际开发过程中,表格内容不应该由用户控制,同时要对表格的输入内容做严格过滤,禁止首字母出现“+”,“-”,“=”,“@”。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Java中,可以通过以下方式来对CSV注入进行输入验证、输出过滤以及使用安全CSV解析库: 1. 输入验证 在读取CSV数据之前,应该对用户输入进行验证,主要包括以下方面: - 数据类型:验证输入数据的类型是否正确,例如字符串、整数、浮点数等。 - 数据长度:验证输入数据的长度是否在合法范围内,例如限制字符串长度。 - 数据格式:验证输入数据的格式是否符合要求,例如日期格式、邮箱格式等。 - 特殊字符:验证输入数据中是否包含特殊字符,例如单引号、双引号、分号等。 可以使用Java自带的正则表达式库或者第三方库进行输入验证。 2. 输出过滤 在输出CSV数据之前,应该对数据进行过滤和转义,主要包括以下方面: - 特殊字符:对输出数据中的特殊字符进行转义,例如单引号、双引号、分号等。 - HTML标签:对输出数据中的HTML标签进行转义,以防止攻击者注入恶意代码。 - 敏感数据:对输出敏感数据进行模糊处理或者隐藏,以保障用户的隐私。 可以使用Java自带的字符串处理函数或者第三方库进行输出过滤和转义。 3. 使用安全CSV解析库 在Java中,可以使用一些开源的CSV解析库,例如Apache Commons CSV、OpenCSV等,这些库提供了安全可靠的CSV解析功能,并且自动进行输入验证和输出过滤,避免了手动处理数据带来的不安全因素。 使用这些库时,应该注意版本更新,及时更新到最新版本,以保障系统的安全性。 综上所述,对CSV注入进行输入验证、输出过滤以及使用安全CSV解析库是保障系统安全的重要措施,开发人员应该注重安全性,保障用户数据的安全

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

muzzert

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值