暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

权限维持之Microsoft Office

横戈安全团队 2021-01-13
755

前言

在红队渗透中,我们可能通过web,钓鱼等姿势拿到了入口点,做的第一件事便是在入口点做好权限维持,本系列文章讲的都是我在渗透测试中常用的权限维持的姿势,当然很多都是老姿势了,希望各位大牛们不要嫌弃。

简介

Microsoft Office算是最常用的权限维持的手法之一了,这种手法在VDI环境或者我们钓鱼钓上来的目标上使用有奇效。
基本上,Microsoft Office都有可信任的位置,我们可以在这种位置放置库文件,这个位置允许用户在打开office时执行代码,打开word -> 信任中心 -> 受信任位置,如下图:

这种手法在VDI环境下尤为有效,原因是因为这种环境为了使同一个域内不同机器保持相同的配置,允许用户将配置文件存储在网络共享上,所以用户的%APPDATA%文件夹经常会在配置文件中被重定向,意味着无论用户在哪里登录,都能被持久化控住。

注册表查询信任位置

注册表中可以列出office里相关工具的受信任位置,比如word在以下位置:

HKEY_CURRENT_USER/Software/Microsoft/Office/16.0/Word/Security/Trusted Locations/keys

ps: 16.0 意味着office2016,具体环境具体修改

我们在Cobalt Strike下执行reg query结果如下所示,至于为什么不用reg.exe去查找,是因为reg.exe很敏感,而Cobalt Strike下的reg的好处在于他调用的Win32 API去读取注册表,命令,结果如下
reg query x64 HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Word\Security\Trusted Locations\

然后我们可以查找各个路径所在的位置

reg query x64 HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Word\Security\Trusted Locations\Location1\

接下来就介绍下最常用的 “Office Templates” 与 “Word Library Add-Ins”的利用方法

Office Templates

我们可以通过模板宏在Office中持久化存在,下面以word的模板为例。
模板用于自定义Word文档,默认情况下,Word的基础模板存在于%APPDATA%\Microsoft\Templates\Normal.dotm
,如下图所示

在模板中插入宏代码,会导致在word打开时被执行,当然取决于安全设置,有可能会在没有任何提示的情况下执行,因为该目录默认是受信任的位置。
我们打开Normal.dotm并编写宏,就不写攻击代码了,里面的内容可以根据需求自行更改

保存完后,新打开一个word文档

可以看到测试成功,excel同样也有
各种模板的路径一般在安装目录的\Templates\2052下面

经测试,无法往样本模板插入宏,因为样本模板的后缀是xltx,是不带宏的模板。如果想要启动宏,必须是xltm,而一旦改为xltm,则无法打开样本模板!
此时往注册表里修改值,可以绕过。

然后往模板里插入宏代码

并保存到Templates当初的位置,并修改类型为xltm

这时候新建一个账单(billingStatement)的模板,可以看到已经执行了我们的宏代码了。

当然这只是测试VBA脚本,里面可以根据需要自己添加,比如VBA stomping,注入等等手法。常用的利用脚本见文章最后的Reference里。

Office Library Add-Ins

我们先来看一下Word Library Add-Ins制作

首先我们制作一个dll,dll代码如下

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
// exploit();
WinExec("calc.exe", SW_HIDE);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
编译好dll后,重命名为dll1.wll,“.wll”文件的本质其实就是个dll文件,只不过是带有额外Office扩展名的dll文件,将其放入%appdata%\Microsoft\Word\Startup

当我们将.wll文件放入受信任的启动位置时,word的加载项会自动执行,将你的代码放入DllMain
入口点的DLL_PROCESS_ATTACH
即可,如上面代码的exploit()的位置,就可以利用成功了。

启动word即可,可以看到有calc.exe的子进程

我们再看看Excel的,Excel也有和word类似的方法,不过后缀是".xll",而且他需要向注册表添加一个键值才能调用我们的"*.xll"文件,这个注册表键值在

HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Options

同理,16.0是版本号,不同版本号数字不同,在下面新建一个键值:

OPEN /R test.xll

/R后是你自己的xll文件,此处不需要添加绝对路径,因为Excel默认在%appdata%/Microsoft/AddIns下查找加载项文件,我们只需要将我们的xll文件放入这个目录即可。
Excel使用XLL加载项的方式也与Word使用WLL加载项的方式不同。对于每个配置的XLL加载项,Excel将在DLL中查找导出的函数,并根据情况调用它们。
例如,当进程第一次加载时,Excel会寻找并调用一个名称为 xlAutoOpen 的函数。这个函数就好像是VBA的 Auto_Open() 一样。所以我们编写一个demo
void xlAutoOpen()
{
WinExec("calc.exe",SW_SHOWNORMAL);
}


BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
// exploit();
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
添加导出函数xlAutoOpen,并编译成dll,然后修改后缀名为xll,放入
%appdata%/Microsoft/AddIns下,然后启动Excel即可成功

总结

Microsoft Office的持久化利用只是简单描述了两个我最常用的方法,还有其他的方法,我将资料放入Reference里,各位有兴趣可以去深入研究一下。

权限维持系列会慢慢更新,欢迎大家关注,希望大家能喜欢。

本篇文章如有错误,欢迎后台留言纠正,谢谢。

Reference:

https://www.mdsec.co.uk/2019/05/persistence-the-continued-or-prolonged-existence-of-something-part-1-microsoft-office/

https://labs.mwrinfosecurity.com/blog/add-in-opportunities-for-office-persistence/

https://3gstudent.github.io/3gstudent.github.io/Use-Office-to-maintain-persistence/

https://3gstudent.github.io/3gstudent.github.io/Office-Persistence-on-x64-operating-system/

https://github.com/outflanknl/EvilClippy

文章转载自横戈安全团队,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论