Microsoft Office可以说是使用最广泛的办公软件。然而就是因为这样,也使它成为了黑客的主要攻击目标之一,例如在网络安全对抗赛中红队会用它来窃取域哈希,甚至执行任意代码。
从以往的攻击手法上看,在Microsoft Office中执行任意代码往往是通过宏来实现的。那么,有没有其它方法可以实现任意代码执行呢?答案是肯定的。SensePost就发现了一种利用DDE(动态数据交换)协议,来执行任意代码的方法。办公产品内有许多可通过DDE接收代码并执行的地方,本文我将为大家演示一些这类攻击的常用手法。此外,关于本文的payload可以结合DDE Payloads作为参考。
Word
在Microsoft Word中,最简单的方法是插入一个字段代码,如SensePost文中所述,并在formula中嵌入payload。
在括号内添加以下payload内容,将会在下次打开文件时弹出一个对话框。如果用户选择“Yes”选项,则payload将被执行。
或者,我们也可以像Paul Ritchie在其博客中描述的那样,使用宏将payload插入字段代码。
以上示例中的payload只是打开了计算器,但我们也可以将其修改为其它任意代码(甚至恶意的)。
Mike Czumaky在他的博客中也为我们提供了一种很好的思路,从外部托管的另一个Word文档加载恶意的DDE。 INCLUDE字段代码可被用来与该攻击向量结合外部URL使用。
Excel
在Microsoft Excel DDE有效载荷可以通过formula的使用来利用。以下两个formula将执行代码(本例中为计算器),第二个formula将使警告消息框看上去更合理,以更好的欺骗用户。
当用户打开恶意Excel电子表格时,将出现以下对话框。
第二个formula仍将执行代码,但对话框中的消息内容将被修改,此时我们可以看到不再是要求用户启动CMD.EXE,而是要求启动MSEXCEL.exe。
Outlook
在Outlook中也有许多可执行DDE payload的地方。例如,你已经获取到了域凭据,则可以更好的伪装电子邮件发送给其他用户,以获取更多内部的shell。
Message
发送包含DDE的Outlook消息也可以自动执行代码。这同样适用于以附件形式发送的电子邮件。
但需要注意的是,因为某些电子邮件服务器会将所有电子邮件转换为HTML,为了避免我们的DDE payload失效,我们需要将电子邮件以RTF格式发送。
当用户打开我们发送的邮件后,DDE payload将会被执行。
Contact
创建新的联系人或修改现有的联系人,并将DDE payload放入Notes区域可导致执行代码。
联系人需要发送给目标用户。
当用户打开联系人时,将执行嵌入的DDE payload。
Calendar Invite
同样,该方法也适用与calendar invitation功能。例如,发送一个添加了DDE paylaod的会议邀请,一旦目标用户与其进行了交互(打开或取消),则DDE paylaod就将被执行。
参考
https://medium.com/red-team/dde-payloads-16629f4a2fcd
http://staaldraad.github.io/2017/10/23/msword-field-codes/
http://willgenovese.com/office-ddeauto-attacks/
https://www.secarma.co.uk/labs/is-dynamic-data-exchange-dde-injection-a-thing/
文章转自FreeBuf.COM
领取专属 10元无门槛券
私享最新 技术干货