Office Persistence on x64 operating system

发布于 2024-11-01 18:29:53 字数 6043 浏览 5 评论 0

0x00 前言

在之前的文章 《Use Office to maintain persistence》 介绍了在 Office 软件中植入后门的常用方法,但并不全面,缺少 64 位系统的测试。而对于 64 位操作系统,支持 32 位和 64 位两个版本的 office 软件,不同 office 版本的利用方法是否不同呢?本文将要给出答案。

0x01 简介

本文将要介绍如下内容:

  • 64 位系统安装 64 位 Office 软件的利用方法
  • 64 位系统安装 32 位 Office 软件的利用方法
  • 根据测试结果优化 POC

0x02 64 位系统安装 64 位 Office 软件的利用方法

测试系统: Win8 x64

开发工具:vs2012

注:32 位系统下安装 vs2012 支持生成 64 位的 dll

默认主要文件安装目录: C:\Program Files\Microsoft Office

1、Word WLL

  • 32 位 dll,无法加载
  • 64 位 dll,成功加载

2、Excel XLL

  • 32 位 dll,无法加载
  • 64 位 dll,成功加载

注:添加导出函数 xlAutoOpen 的方法:

1、使用传统的模块定义文件 (.def)

新建 dll 工程,不选择导出符号

如下图

Alt text

添加同名文件.def,内容如下:

EXPORTS
xlAutoOpen

如下图

Alt text

编译成 dll,使用 IDA 查看导出函数

显示正常

如下图

Alt text

2、使用 vs2012 提供的便捷方法

新建 dll 工程,选择导出符号

如下图

Alt text

设置导出函数为 xlAutoOpen

如下图

Alt text

Alt text

编译成 dll,使用 IDA 查看导出函数

如下图

Alt text

导出函数名发生变化,改变为 ?xlAutoOpen@@YAXXZ

Excel 无法加载该 dll,原因是无法识别该导出函数(函数名发生变化)

解决方法:使用预处理指示符 #pragma 指定链接选项,修正导出函数名称,添加一行代码:#pragma comment(linker, "/EXPORT:xlAutoOpen=?xlAutoOpen@@YAXXZ")

如下图

Alt text

再次使用 IDA 查看导出函数,显示正常

如下图

Alt text

Excel 成功加载该 dll,修改成功

注:已将两种方法的 vs 工程上传至 github,地址如下:https://github.com/3gstudent/Add-Dll-Exports

  • 方法 1 对应 DllExport(Def)
  • 方法 2 对应 DllExport(declspec)

3、Excel VBA add-ins

使用 32 位的模板即可

4、PowerPoint VBA add-ins

使用 32 位的模板即可

结论:如果在 64 位系统安装了 64 位的 Office 软件,那么 Word WLL 需要使用 64 位的 calc.wll,Excel XLL 需要使用 64 位的 calc.xll

0x03 64 位系统安装 32 位 Office 软件的利用方法

默认主要文件安装目录: C:\Program Files (x86)\Microsoft Office ,存在重定向

注:在目录 C:\Program Files\ 也会创建 Office 目录,包含软件版本,也就是说,原 POC 中判断 Microsoft Office 版本的代码不需要更改

注册表位置 HKEY_CURRENT_USER\Software\Microsoft\Office\

并未被重定向至 HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Office\

更多关于 32 位程序在 64 位系统下的重定向细节可参考之前的文章《关于 32 位程序在 64 位系统下运行中需要注意的重定向问题》

1、Word WLL

  • 32 位 dll,成功加载
  • 64 位 dll,无法加载

同 64 位 office 的结果相反

2、Excel XLL

  • 32 位 dll,成功加载
  • 64 位 dll,无法加载

同 64 位 office 的结果相反

3、Excel VBA add-ins

使用 32 位的模板即可

4、PowerPoint VBA add-ins

使用 32 位的模板即可

结论:在 64 位系统安装 32 位 Office 软件,同 32 位系统测试结果相同,POC 无需修改

0x04 优化 POC

综合以上测试结论,为了使得 POC 支持 64 位系统,需要作如下修改:

判断操作系统位数,如果是 64 位,并且安装 64 位 office 软件,方法 Word WLL 和 Excel XLL 需要使用 64 位的 dll

代码开发注意的细节(powershell 代码):

1、判断操作系统位数

if ([Environment]::Is64BitOperatingSystem)
{
    '64-bit'
}
else
{
    '32-bit'
}

2、判断安装 office 软件版本

通过查看默认主要安装路径:

  • 32 位 office: C:\Program Files (x86)\Microsoft Office
  • 64 位 office: C:\Program Files\Microsoft Office

判断路径 C:\Program Files\Microsoft Office 是否包含文件夹 MEDIA

如果包含,那么为 64 位 office

powershell 代码如下:

Try  
{  
    dir C:\Program Files\Microsoft Office\MEDIA
    Write-Host "Microsoft Office: 64-bit"
}
Catch  
{ 
    Write-Host "Microsoft Office: 32-bit"
}

结合 POC 脚本,变量$OfficePath 表示设置的 office 安装路径,默认路径为 "C:\Program Files\Microsoft Office\"+"Office*"

为获取路径 C:\Program Files\Microsoft Office\MEDIA ,需要对变量$OfficePath 进行字符串截取和拼接,具体代码为:

$OfficeMainPath=$OfficePath.Substring(0,$OfficePath.LastIndexOf("\")+1)+"MEDIA"

此时,变量$OfficeMainPath 代表路径 C:\Program Files\Microsoft Office\MEDIA

3、判断 64 位系统+64 位 office,释放对应的 64 位 dll(wll 和 xll)

依旧是通过变量保存作 base64 编码后的 64 位 wll 和 xll

将 dll 文件作 base64 编码:

$fileContent = [System.IO.File]::ReadAllBytes('calcx64.wll')
$fileContentEncoded = [System.Convert]::ToBase64String($fileContent)| set-content ("calc_x64wllbase64.txt") 

$fileContent = [System.IO.File]::ReadAllBytes('calcx64.xll')
$fileContentEncoded = [System.Convert]::ToBase64String($fileContent)| set-content ("calc_x64xllbase64.txt")

释放时先做 base64 解密

$fileContentBytes = [System.Convert]::FromBase64String($fileContent)

最终 POC 已在 github 更新,该 POC 能够区分操作系统和 office 版本,当遇到 64 位系统安装 64 位 office 的情况时,自动释放 64 位的 dll

POC 地址如下:https://github.com/3gstudent/Office-Persistence

0x05 小结

本文介绍了 64 位系统安装不同版本 office 所对应的不同利用方法,分享了在优化 POC 时注意的细节,至此完成对该 POC 的开发,便于测试。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
23 人气
更多

推荐作者

lee_heart

文章 0 评论 0

往事如风

文章 0 评论 0

春风十里

文章 0 评论 0

纸短情长

文章 0 评论 0

qq_pdEUFz

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文