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等。
本文来自博客园,作者:M0urn,转载请注明原文链接:https://www.cnblogs.com/M0urn/articles/17761207.html