利用DOCX文档远程模板注入执行宏代码
利用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文档远程模板注入执行宏代码相关推荐
- 选择WORD文档中的所有表格宏代码
主要是把WORD文档中的所有表格选取上,以便单独对文档中的所有表格进行整体编辑,宏代码如下: '************************************** ' 函数名: Select ...
- 利用Freemarker模板生成doc或者docx文档(转载整理)
可以直接看主要代码实现 doc作为模板文件生成指定格式的doc文件 实现逻辑 1.把作为模板的doc文件另存为xml文件 2.凡是需要填充的数据用${xxxx}替代 3.利用Template类将数据填 ...
- java利用Freemarker模板生成格式友好的doc或者docx文档
之前写过一篇利用Freemarker模板生成doc的博客,不过那个博客有点缺陷,不支持生成docx格式的文档.所以,这里补充一篇,生成docx或doc格式的文档以具体的docx模板或者doc模板为主. ...
- pythondocx模板_python操作docx文档(转)
关于python操作docx格式文档,我用到了两个python包,一个便是python-docx包,另一个便是python-docx-template;,同时我也用到了很出名的一个工具"pa ...
- 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出
我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的 ...
- html5多个图片位置_Python使用标准库zipfile提取docx文档中所有图片
清华科技大讲堂免费直播课预告: 免费直播课|Python数据可视化与科学计算可视化案例分享,5月28日晚20:00-21:30============ 哔哩哔哩网站免费视频观看地址: 董老师在哔哩哔哩 ...
- Python使用标准库zipfile提取docx文档中所有图片
清华科技大讲堂免费直播课预告: 免费直播课|Python数据可视化与科学计算可视化案例分享,5月28日晚20:00-21:30 ============ 哔哩哔哩网站免费视频观看地址: 董老师在哔哩哔 ...
- docx文档怎么排列图片_“胶水语言”办公自动化Word篇——使用Python编辑和读取Word文档
python调用word接口主要用到的模板为python-docx,基本操作官方文档有说明. 使用python新建一个word文档,操作就像文档里介绍的那样: from docx import Doc ...
- Python使用标准库zipfile+re提取docx文档中超链接文本和链接地址
推荐教材: <Python程序设计实用教程>,ISBN:978-7-5635-6065-3,董付国,北京邮电大学出版社 教材封面: 全国各地新华书店有售 京东购买链接: 配套资源:教学大纲 ...
最新文章
- WGS84经纬度坐标与WEB摩卡托坐标转换
- react中js文件中写html,javascript – 使用静态HTML与React
- Linux uart寄存器读写,Linux下读写UART串口的代码
- git reset --hanrd撤回_一篇文章,全面掌握Git
- redis linux无法启动服务,CentOS7 下redis不能开机启动,求解?
- mariadb mysql同步_MySQL(Mariadb)主从同步基础
- JSP:src路径里有中文,产生乱码问题
- openstack镜像制作详解
- 【真的很先进】阿里云在2018-KVM Forum上分享的动态迁移实践
- 图——基本的图算法(四)关键路径
- VMware ESXi 8.0 SLIC 2.6 macOS Unlocker (Oct 2022 GA)
- [渝粤教育] 广东-国家-开放大学 21秋期末考试土木工程施工10516k1
- fflush函数实例
- 群赛14----2017.9.24
- Java多线程学习(吐血超详细总结)【转】
- 华虹技通华为鸿蒙,浩丰科技(300419)个股分析_牛叉诊股_同花顺财经
- 《可解释机器学习公开课》来了!
- python爬虫登录微博_为爬虫获取登录cookies: 使用Charles和requests模拟微博登录
- 煤化工专用阀门有哪些?
- 【解决】nvm报错:exit status 1: ��û���㹻��Ȩ��ִ�д˲�����