Office宏的基本利用

君子藏器于身待时而动,安全不露圭角覆盂之安。

——AnonySec

https://payloads.cn

前言

Office宏,译自英文单词Macro。宏是Office自带的一种高级脚本特性,通过VBA代码,可以在Office中去完成某项特定的任务,而不必再重复相同的动作,目的是让用户文档中的一些任务自动化。而宏病毒是一种寄存在文档或模板的宏中的计算机病毒。一旦打开这样的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在Normal模板上。

Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件,也可说是一种应用程式视觉化的Basic 脚本。

环境准备

  • Windows 7 x64 旗舰版
  • Microsoft Office 2016
  • CobaltStrike 3.14

CobaltStrike生成宏

先利用CobaltStrike生成宏payload,接下来只要放入word、excel或ppt即可。

image-20191016222133610

创建宏Word

打开Word文档,点击 “Word 选项 — 自定义功能区 — 开发者工具(勾选) — 确定” 。

image-20191016215348926

编写主体内容后,点击 “开发工具 — Visual Basic” 。

image-20191016215645574

双击 “ThisDocument” ,将原有内容全部清空,然后将CobaltStrike生成宏payload全部粘贴进去,保存并关闭该 VBA 编辑器 。

image-20191016220549344

另存为的Word类型务必要选”Word 97-2003 文档 (*.doc)”,即 doc 文件,保证低版本可以打开。之后关闭,再打开即可执行宏代码。

image-20191016215855386

反弹Beacon shell

默认情况下,Office已经禁用所有宏,但仍会在打开Word文档的时候发出通知。

image-20191016221012732

诱导目标手动点击”启用内容”宏。

image-20191016221159875

目标一旦启用,CobaltStrike的Beacon就会上线,即成功接收到Shell。

image-20191016221405060

宏代码分析

CobaltStrike生成默认的VBA会导入四个Windows API函数,常见的ShellCode加载器代码:

image-20191016234635077

  • CreateRemoteThread 创建一个在其它进程地址空间中运行的线程(也称:创建远程线程).
  • VirtualAllocEx 指定进程的虚拟空间保留或提交内存区域
  • WriteProcessMemory 写入某一进程的内存区域
  • CreateProcess 创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件

其中Array(-4,-24,-119,0,0,0,96,-119,-27...就是ShellCode,混淆的办法有很多种。

ShellCode可以自己在VBA里解码或者比如每个元素自增1,运行的时候-1,达到免杀 ……