DDE注入漏洞(CSV注入)

本篇笔记参考文章如下:

花式注入那点事(中)--from 安全脉搏-酒仙桥六号部队
DDE注入(CSV)漏洞原理及实战案例全汇总 --from腾讯云开发者社区-Jayway
DDE注入(CSV)漏洞 --from菜心

感谢以上作者提供的优质文章,初学者的个人笔记总结难免会在某些地方存在理解错误或偏差,建议同时阅读一下以上我参考过的文章,以免被我的思路误导,如果有错误的地方还请师傅们多多指正。

0x01 前言

渗透测试进入后台后经常会遇到数据导出功能的功能点,那么在这种情况下如何进行测试呢?之前水群的时候听小火炬师傅提到过DDE注入,可以利用excel中表达式来调用cmd执行命令,今天便来一试。

0x02 什么是DDE

excel解析机制

了解DDE之前,首先我们需要知道,excel中任何以“=”字符开头的单元格都会被电子表格软件解释为公式,比如我们输入“=1+1”,则表格会显示为:

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

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

这个可以帮助我们在等号=被过滤时,使用其他运算符绕过。

关于DDE

DDE(DynamicDataExchange),又称为动态资料交换,是一种Windows操作系统中运作进程间通信的技术。
它可以用来协调操作系统的应用程序之间的数据交换及命令调用,这有点类似于RPC,其中DDE可以允许Windows应用程序共享数据,例如Excel中的单元格会在当加载的应用程序中的数值发生改变时,自动做出更新。

其实DDE的问题在office中都是可以利用的,不过相对来说数据导出这个功能点更常见一些,所以我们今天主要以excel来测试。

DDE表达式语法

一般而言,DDE表达式采用的形式是这样的:

command|'arguments'!cell

command名称不能超过8字节,一般我们常利用cmd。

arguments一般为我们所需要用cmd打开的应用程序或者外部链接等,cell为单元格,如A0,A1等。

例如简单弹个计算器的payload:

=cmd|'/Ccalc'!A0

0x03 漏洞利用

漏洞原理

原理其实是显而易见的,由于开发人员未对数据内容进行严格的校验和过滤,导致如下利用过程:

攻击者注入恶意excel表达式数据 -> 管理人员导出数据为excel表格 -> 保存并打开表格 -> 触发恶意表达式 -> 主机受控

利用过程

暂时还没有找到合适的素材,先在本地模拟一下触发的过程

首先我们需要开启这个选项:选项 -> 信任中心 -> 信任中心设置 -> 外部内容 -> 启用动态数据交换服务器启动

然后我们创建一个csv表格,在单元格中写入payload

点击是,直接触发恶意代码

弹窗不接受更正,接受更正的话会修改表达式。

目前遇到一点问题就是不修改表达式的话,到这一步会一直卡在excel里保存不了,不过能触发恶意代码我们的意图就已经达到了。

绕过方式

1、等于号或部分运算符被过滤

使用-, +等运算符进行绕过,如

-3+2+cmd|'/Ccalc'!A0

使用@绕过

@SUM(cmd|'/Ccalc'!A1)

2、系统在表达式前添加了单引号

使用;使单引号跟后面的payload分割为两个语句

'(系统防护措施添加);-3+1+cmd|'/Ccalc'!D3

使用%0A换行到下一行

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

0x04 防御和修复方案

1)一般的防御手段为,在生成电子表格时,以任何危险符号开头的字段应该以单引号、撇号(')字符或空格作为前缀,确保单元格不被解释为公式,但存在可能被绕过的风险。

2)更好的防御手段为,根据业务需求控制用户输入为字母数字字符;或黑名单过滤=或-号开头的单元格数据,过滤=(-)cmd或=(-)HYPERLINK或concat等。

posted @ 2023-10-13 13:44  M0urn  阅读(874)  评论(1编辑  收藏  举报