利用DOCX文档远程模板注入执行宏代码

简介

本地文件中在没有宏代码的情况下,攻击者可以尝试执行远程文件中宏代码。其中来自APT28的最新样本将此技术展现的淋漓尽致。该样本是docx文件,文件内没有任何宏相关信息,但是打开该文件后,却会弹出经典的“宏安全警告”。本实验将实现通过远程加载执行宏代码的攻击方式。

应用场景

该种攻击方式与传统的宏启用文档相比,这种攻击的好处是多方面的。在对目标执行网络钓鱼攻击时,您可以将.docx的文档直接附加到电子邮件中,并且您不太可能根据文件的拓展名去阻止它。

Word远程模板执行宏就是利用Word文档加载附加模板时的缺陷所发起的恶意请求而达到的攻击目的,所以当目标用户点开攻击者发给他的恶意word文档就可以通过向远程服务器发送恶意请求的方式,然后加载模板执行恶意模板的宏。

这种攻击更常见的原因是,发送的文档本身是不带恶意代码的,能过很多静态的检测。那么我们只需要在远程DOTM文档中编写宏病毒或者宏木马即可完成攻击

实际案例

最为著名的是APT28 使用 Zebrocy 攻击欧洲军事和外交机构。

APT28,又名 Sofacy、Sednit、FancyBear、TsarTeam、Group 74、Pawn Storm 和 Strontium,自 2007 年起就开始针对北约、东欧及高加索地区的政府等机构开展网络间谍活动,主要目的是收集国防和地缘政治相关情报,被指可能与俄罗斯情报机构 GRU 有关。情报显示,该组织于 2017 年下半年将目标范围扩大到包含中亚地区,且有东移趋势。
该组织自2018年10月下旬以来,针对白俄罗斯等欧洲目标发起了一波新的攻击。分析之后发现:

  • 这波攻击活动中,受害者主要为欧洲和北约相关的军事和外交机构,具体目标包含白俄罗斯国防部和波兰政府等等。
  • 攻击手法为鱼叉式网络钓鱼结合远程模板注入技术,攻击文档包含的恶意宏使用相对较为少见的AutoClose 函数触发执行,启用宏之后,在关闭
    Word 文档时才会执行恶意代码。

具体内容详见:【微步在线报告】APT28 使用 Zebrocy 攻击欧洲军事和外交机构

思路

  • 编写一个带有宏代码的DOTM文档,上传服务器
  • 编写一个能够远程连接的DOCX文档
  • 将该文档压缩找到并更改settings.xml.rels文件中的内容,将其中的target内容修改为服务器上DOTM文档的URL
  • 将DOCX解压后的内容再以存储模式压缩为ZIP
  • 修改后缀名为DOCX,打开后即可实现远程注入宏文档

难点

  • DOTM宏编写的位置需要在左侧导航栏中本DOTM文档中,不要在normal等位置编写
  • DOTM文档上传至服务器可以自己编写,也可以上传至GitHub,本实验是上传到自己服务器实现的
  • 编写一个能够远程连接的DOCX文档,不要编写纯文本的文档,以上两种文档解压后的目录结构不相同(卡在这里非常非常久,具体操作见下文)
  • 压缩解压后的DOCX文档目录,不要在父目录压缩,需要以存储模式压缩(卡在这里非常久,具体操作见下文)

实验环境

  • Windows10操作系统
  • Word 2016(据参考网站说,word 2013也可以)

具体步骤

DOTM文档编写

首先,打开一个word docx文档,点击开发工具->Visual Basic,打开宏代码编辑环境

我们打开宏代码编辑环境后,在本文档的ThisDocument下,编写如下宏代码,作用为:打开文档即可弹出对话框,显示“你好!这是远程加载注入宏!”

现在将该docx文档另存为dotm文档,并命名为:MacroTemplate.dotm,保存为启用宏的Word模板

最后将该dotm文件上传到后台服务器上

DOCX文档编写

新建一个docx文档,命名为RemoteMacroExecute.docx,其中,要注意的是,一定要通过网络来加载一个word模板,这样才能成功。

如下是反例,不可以只填写文本字符,可以尝试如下两种文档,并将其解压,可以看到两种文档解压后目录结构不相同(如下是反例,不要这么写,不要这么写,不要这么写)

现在将我们的docx文档压缩成zip格式

将该zip压缩包解压,其目录结构如下所示

现在找到word->_rels中的settings.xml.rels,右键打开编辑(如果没有,说明没有按照第一种方式创建docx文档,需要重新创建,以到文件解压后可以看到如下文件位置)

打开编辑settings.xml.rels后,可以看到如下所示内容,其中,Target所指的路径即我们要修改的位置

我们现在将其修改为我们dotm文件所在的URL位置,然后将其保存

现在在RemoteMacroExecute路径下,将其中所有目录及文件选中,点击右键压缩,选中压缩文件格式为zip,压缩方式为存储,然后对其进行压缩

然后将其后缀名修改为docx,再将其打开,可以看到我们成功加载了远程宏

代码地址

本文所有代码地址

参考网站

  • https://bbs.ichunqiu.com/thread-48712-1-1.html

  • https://ired.team/offensive-security/initial-access/phishing-with-ms-office/inject-macros-from-a-remote-dotm-template-docx-with-macros

  • http://blog.redxorblue.com/2018/07/executing-macros-from-docx-with-remote.html https://www.reddit.com/r/redteamsec/comments/900y6v/my_new_blog_post_executing_macros_from_a_docx/e2nql3i/?context=8&depth=9

  • https://blog.csdn.net/god_zzZ/article/details/102745794?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

  • https://x.threatbook.cn/nodev4/vb4/article?threatInfoID=958

利用DOCX文档远程模板注入执行宏代码相关推荐

  1. 选择WORD文档中的所有表格宏代码

    主要是把WORD文档中的所有表格选取上,以便单独对文档中的所有表格进行整体编辑,宏代码如下: '************************************** ' 函数名: Select ...

  2. 利用Freemarker模板生成doc或者docx文档(转载整理)

    可以直接看主要代码实现 doc作为模板文件生成指定格式的doc文件 实现逻辑 1.把作为模板的doc文件另存为xml文件 2.凡是需要填充的数据用${xxxx}替代 3.利用Template类将数据填 ...

  3. java利用Freemarker模板生成格式友好的doc或者docx文档

    之前写过一篇利用Freemarker模板生成doc的博客,不过那个博客有点缺陷,不支持生成docx格式的文档.所以,这里补充一篇,生成docx或doc格式的文档以具体的docx模板或者doc模板为主. ...

  4. pythondocx模板_python操作docx文档(转)

    关于python操作docx格式文档,我用到了两个python包,一个便是python-docx包,另一个便是python-docx-template;,同时我也用到了很出名的一个工具"pa ...

  5. 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

    我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的 ...

  6. html5多个图片位置_Python使用标准库zipfile提取docx文档中所有图片

    清华科技大讲堂免费直播课预告: 免费直播课|Python数据可视化与科学计算可视化案例分享,5月28日晚20:00-21:30============ 哔哩哔哩网站免费视频观看地址: 董老师在哔哩哔哩 ...

  7. Python使用标准库zipfile提取docx文档中所有图片

    清华科技大讲堂免费直播课预告: 免费直播课|Python数据可视化与科学计算可视化案例分享,5月28日晚20:00-21:30 ============ 哔哩哔哩网站免费视频观看地址: 董老师在哔哩哔 ...

  8. docx文档怎么排列图片_“胶水语言”办公自动化Word篇——使用Python编辑和读取Word文档

    python调用word接口主要用到的模板为python-docx,基本操作官方文档有说明. 使用python新建一个word文档,操作就像文档里介绍的那样: from docx import Doc ...

  9. Python使用标准库zipfile+re提取docx文档中超链接文本和链接地址

    推荐教材: <Python程序设计实用教程>,ISBN:978-7-5635-6065-3,董付国,北京邮电大学出版社 教材封面: 全国各地新华书店有售 京东购买链接: 配套资源:教学大纲 ...

最新文章

  1. WGS84经纬度坐标与WEB摩卡托坐标转换
  2. react中js文件中写html,javascript – 使用静态HTML与React
  3. Linux uart寄存器读写,Linux下读写UART串口的代码
  4. git reset --hanrd撤回_一篇文章,全面掌握Git
  5. redis linux无法启动服务,CentOS7 下redis不能开机启动,求解?
  6. mariadb mysql同步_MySQL(Mariadb)主从同步基础
  7. JSP:src路径里有中文,产生乱码问题
  8. openstack镜像制作详解
  9. 【真的很先进】阿里云在2018-KVM Forum上分享的动态迁移实践
  10. 图——基本的图算法(四)关键路径
  11. VMware ESXi 8.0 SLIC 2.6 macOS Unlocker (Oct 2022 GA)
  12. [渝粤教育] 广东-国家-开放大学 21秋期末考试土木工程施工10516k1
  13. fflush函数实例
  14. 群赛14----2017.9.24
  15. Java多线程学习(吐血超详细总结)【转】
  16. 华虹技通华为鸿蒙,浩丰科技(300419)个股分析_牛叉诊股_同花顺财经
  17. 《可解释机器学习公开课》来了!
  18. python爬虫登录微博_为爬虫获取登录cookies: 使用Charles和requests模拟微博登录
  19. 煤化工专用阀门有哪些?
  20. 【解决】nvm报错:exit status 1: ��û���㹻��Ȩ��ִ�д˲�����

热门文章

  1. 一个人的武林:渗透测试常规思路分析(一)
  2. Form表单校验_座机号、电话号码
  3. 独立看门狗与窗口看门狗
  4. Android 实现指南针效果
  5. 腾讯广告算法大赛2019
  6. UBOOT----基于itop4412开发板,从0开始,慢慢摸索UBOOT的启动流程和系统组织结构(一)
  7. iTop-4412精英版的u-boot-2017.11移植教程(三)
  8. 在纽约寻找童真——新泽西州乐高乐园探索中心的美好一天
  9. 如何用PS去掉照片中的路人
  10. java计算机毕业设计喜枫日料店自助点餐系统源代码+数据库+系统+lw文档