利用docx文档特性的远程注入

利用docx文档特性的远程注入

docx文件的本质是压缩文件,其中除了文档本身的文字内容以外,还包括了样式、模板等内容。而样式、模板等内容本质上是通过xml的方式去引用。由于我们平时安装office后,样式、模板等内容都已经存放在本地,因此我们平时打开docx文档时引用的也是本地的资源。然而office套件中,除了可以引用本地资源以外,外部资源也是可以的。其中最典型的例子就是在文档中插入外部链接。因此可以充分利用office这一特性进行外部引用,从而达到一些除正常使用office以外的其他效果。如通过钓鱼发信、xxe注入等。前段时间我在刷CTF的时候遇到一道关于利用docx特性进行隐写的题,因此想由此展开写一点除隐写以外的东西。同时我也尝试过通过这一特性并结合钉钉、网易邮箱、阿里邮箱、腾讯邮箱等系统的预览功能进行XXE的注入,看能不能执行命令。然而这一特性早已被各大厂商给封杀了,当然这也是意料之中的事情。由于没有较好的环境进行试验,因此我从钓鱼发信入手进行了一些记录。废话不多说,以下是我的记录过程。

1.创建一个新的空白文档,并显示开发工具;

2.在visual basic中创建宏;

3.可使用Cobalt Strike生成payload,也可以使用PowerShell Empire

4.将payload复制粘贴到编辑器中;

5.另存为模板,其格式为dotm。这里多说一点,dotm和doctx格式的文档均为word中的模板文档;

6.将模板上传到中转服务器上,我这里使用的是GitHub;

7.使用office自带模板功能创建一个新的文档,并进行相应的迷惑性的编辑;

8.保存文档后,将后缀名改为zip。然后在.\word\_rels\文件夹中打开settings.xml.rels文件并编辑。其中包含带有attachmentTemplate的Type的Relationship标记,是告诉Word打开该.docx时从哪里加载模板的设置。当前,这是从本地文件系统加载模板。因此这里将加载的文件位置修改为自己刚刚准备好的模板位置。

9.最后重新压缩后,将后缀名改回为docx就可以了。这时候当受害者打开该文档时会提示开启宏。如果受害者的office是已经启用了宏或者点击了启用宏都将收到会话。

 

10.这个方法和传统的直接宏doc文档相比有什么好处呢?对比一下就知道了。上图是通过远程注入宏的方式做的docx,下图是本地宏的doc。

 

最后做个小结。利用docx文档特性的一些小技巧其实技术上并不难,包括免杀也可以对VB代码本身进行一些处理。但是利用docx文档特性除了XXE和远程注入宏以外,还是可以做其他事情的,思路并不局限于一处。