概述
最近,国外的安全研究员发现了一种在文档中使用DynamicData Exchange (DDE)协议发起渗透的方法。使用该方法可以绕过MSWord和MSExcel宏限制,不需要使用MSWord和MSExcel的漏洞就可以执行命令。腾讯反病毒实验室哈勃系统第一时间复现了该渗透方法,本文将详细介绍该渗透方法的构造过程。
背景
Windows提供了应用程序间数据传输的若干种方法。其中一种就是使用动态数据交换(DDE)协议。DDE协议是一套消息和指示的集合。通过发送消息以及共享内存实现应用程序的数据共享和交换。应用程序可以使用DDE协议实现一次性数据传输以及持续的数据交换(当新数据可用时,应用程序发送更新通知给另一个应用程序)[1]。
在MSWord和MSExcel里,可以使用DDE来执行命令。下面我们以MSWord为例进行说明。
方法
新建一个Word文档,通过Ctrl+F9添加一个域,然后修改域代码为:
{ DDEAUTOc://windows//system32//cmd.exe "/k notepad.exe" }
“DDEAUTO”关键字指示Word这是一个DDE域,并且在打开文档时自动执行域代码。在域代码中,紧跟“DDEAUTO”关键字后面的是要执行的可执行程序的路径,后面跟随的是可执行程序的参数。
此外,也可以修改关键字“DDEAUTO”为“DDE”,即修改域代码为:
{ DDEc://windows//system32//cmd.exe "/k notepad.exe" }
,并保存文档。
而此时,如果希望嵌入的DDE能够在打开文档时自动执行,需要在word/settings.xml嵌入以下代码:
<w:updateFieldsw:val="true"/>
此时,当我们打开包含DDE域代码的文档时,会有显示两次提示信息:
当均点击“是”,会执行DDE域代码,弹出记事本:
上述两个对话框风险提示属性较弱,不像是一个安全风险的提示,用户很容易忽视该类提示进而允许执行恶意的域代码。当然,也可以在正文中加入一些诱导性和迷惑性很强的文字,诱导用户点击以上两个对话框,从而使用户暴露在风险之中。
扩展
除了弹出记事本外,配合PowerShell或者各类脚本程序的强大能力,可以下载或者释放恶意payload,此类渗透方法的危害将显现无疑。
(执行PowerShell)
(执行bat脚本)
参考
[1] https://baike.baidu.com/item/Dynamic%20Data%20Exchange?fr=aladdin
[2] https://sensepost.com/blog/2017/macro-less-code-exec-in-msword
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/54748.html