Office权限维持初探
简介
涉及office的内容多在宏上,关于宏的创建这里不多说,主要讲一下全局模版在权限维持中的作用。
全局宏
全局宏是对所有对应的文档都有效的,即使文档本身不含有宏,也是可以执行全局宏的,只要本地全局模版被替换成含有恶意宏的文档,就可以在任意对应文档打开时执行,且杀软不会主动查杀这个模板。
测试
测试版本2016。
首先,因为这个全局宏并没有一个固定的名称,只能通过文档去新建创建,word的名称是AutoOpen,excel的则是Auto_Open。
首先看看默认的宏设置,这个并不影响。
然后我创建一个全局的宏,弹个计算器作为测试,保存。
保存以后重新打开这个文档。
测试下360,看看是否被杀,这个360不知道怎么回事是什么都不杀?好像是的。
分析
这个全局模板生成以后默认路径是在,%APPDATA%\Microsoft\Templates下,里面生成了一个Nomal.dotm.
解压这个文档后,在word目录下存在一个vbaProject.bin文件,这个就是特征文件,一般杀软是不会查杀这个位置。
因为在注册表中,HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\PowerPoint\Security\Trusted Locations 设置了授信目录。
word下包含了三个默认的授信路径。可以算是天然的后门路径。
C:\Program Files (x86)\Microsoft Office\Root\Templates\
%APPDATA%\Microsoft\Word\Startup
%APPDATA%\Microsoft\Templates
这里包含了之前的全局模板路径。
加载项后门维持
Office 中支持不同类型的加载项,当在授信目录下放置库文件时,打开 Office,就会自动加载库文件。即使在Office的信任中心选择禁用加载项,事实上也是不会禁用WLL,更不会阻止VBA代码执行。
这里可以看到通常默认又三个加载项的授信路径。
对用户位置中的Startup而言,它是Word默认存放全局模板和加载项的文件夹,当启动Word时,程序会自动加载Startup文件夹中所有.dot、.dotx或.dotm格式的Word文件,也可以托管拓展名为 *.wll 的文件。而.wll文件本质上是一个带有额外特定于Office的扩展的DLL。这意味着.wll文件起码可以实现基本的DLL功能,我们只需要将.dll重命名为*.wll,放入此文件夹中,就会在执行word时以执行office用户的权限去加载wll。
这里因为一些原因,没有去写一个dll实际测试,贴出rcoil播种给出的一个demo。
int Run()
{
system("calc");
return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
Run();
// MessageBox(NULL, L"Hello World,I'm RcoIl", L"demo", MB_OK);
// WinExec("calc.exe", SW_SHOWNORMAL);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
同理excel在执行的时候也是可以有加载项的,只不过是*.xll的区别罢了。
总结
这里只是粗浅的讲了一些本地全局模板以及加载项在权限维持中的应用,实际上姿势还有很多,可以看下大佬们的原文,我就是个搬运工。
参考
https://www.mdsec.co.uk/2019/05/persistence-the-continued-or-prolonged-existence-of-something-part-1-microsoft-office/
https://labs.f-secure.com/archive/add-in-opportunities-for-office-persistence/
https://payloads.online/archivers/2019-05-16/1
https://rcoil.me/2019/05/Microsoft%20Office%20-%20%E6%9D%83%E9%99%90%E7%BB%B4%E6%8C%81%EF%BC%88%E4%B8%80%EF%BC%89/