导出excel的字段可能存在DDE注入问题

一、背景

在项目中进行导出excel文件的时候,如果不对用户输入的内容进行判断,则可能会有非法使用者通过DDE注入进行入侵:即用户写入特定内容会被excel解析成函数,当excel被打开时会触发公式解释执行。

例如:当用户某个字段输入的内容为:=cmd | '/ C calc' !A0  时,当该内容被导出至excel中后,会调用系统的计算器。

二、原理:

1、Excel的解释机制

在Excel任何以'='字符开头的单元格都将被电子表格软件解释为公式,如果我们在其中输入“=2+5”,则表格会显示为7。

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

  • 等于(“=”)

  • 加(“+”)

  • 减号(“ - ”)

  • 在 (”@”)

2、DDE注入

动态数据交换(DDE),全称DynamicData Exchange,是Windows下进程间通信协议,支持Microsoft Excel,LibreOffice和Apache OpenOffice。Excel、Word、Rtf、Outlook都可以使用这种机制,根据外部应用的处理结果来更新内容。

比如我们构造包含如下字符串的csv或xls文件:

=cmd | '/ C calc' !A0

Excel会尝试调用本机CMD命令,给出友好提示,若用户在无意识状态下点击“是”:

而后尝试接受更正拼写错误,不接受更正则会执行cmd命令,弹出计算器:

三、处理方法

1. 最好:根据业务需要,不允许用户输入特殊字符:@、=、+、- 等等。

2. 以任何危险符号开头的字段应该以单引号、撇号(')字符或空格作为前缀,确保单元格不被解释为公式,但存在可能被绕过的风险。

3. 黑名单过滤=或-号开头的单元格数据,过滤=(-)cmd或=(-)HYPERLINK或concat等。

参考:

1、 DDE注入(CSV)漏洞原理及实战案例全汇总 - 墨天轮

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值