64位系统下的Office后门利用

本文讲的是64位系统下的Office后门利用


0x00 前言

在之前的文章《Office后门的实现思路》介绍了在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 FilesMicrosoft Office

1、Word WLL

32位dll,无法加载

64位dll,成功加载

2、Excel XLL

32位dll,无法加载

64位dll,成功加载

注:

添加导出函数xlAutoOpen的方法:

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

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

如下图

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

EXPORTSxlAutoOpen

如下图

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

显示正常

如下图

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

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

如下图

设置导出函数为xlAutoOpen

如下图

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

如下图

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

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

解决方法:

使用预处理指示符#pragma指定链接选项,修正导出函数名称

添加一行代码:

#pragma comment(linker, "/EXPORT:xlAutoOpen=?xlAutoOpen@@YAXXZ")

如下图

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

如下图

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_USERSoftwareMicrosoftOffice

并未被重定向至HKEY_CURRENT_USERSoftwareWow6432NodeMicrosoftOffice

更多关于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 FilesMicrosoft Office

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

如果包含,那么为64位office

powershell代码如下:

Try  {      dir C:Program FilesMicrosoft OfficeMEDIA    Write-Host "Microsoft Office: 64-bit"}Catch  {     Write-Host "Microsoft Office: 32-bit"}

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

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

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

此时,变量$OfficeMainPath代表路径C:Program FilesMicrosoft OfficeMEDIA

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的开发,便于测试。

原文发布时间为:2017年8月6日

本文作者:3gstudent

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-11-01 09:36:12

64位系统下的Office后门利用的相关文章

win2003 64位系统下ODBC连接使用

转自win2003 64位系统下ODBC连接使用 环境 一般系统部署的服务器若是windows系统,就会采用64位win2003的结构.可是我们编写的程序绝大多数都是在x86下32位cpu架构中 编译的,要正常移植到64位机器还真的是很麻烦,不仅要求应用程序是64位模式编译,还需要数据库也得是64位,iis64位,framework64 位,好在相应的厂商都提供这些支持组件.不知道有人遇到过像我这样的问题么,应用中有需要增加一个Access数据库导入功能,这就需要连接ODBC的 mdb驱动,可是

64位系统下 c#访问USB(HID)设备问题

问题描述 64位系统下,c#访问HID设备,发现SetupDiEnumDeviceInterfaces找不到设备,返回false,32位系统下是正常的 解决方案 解决方案二:已经解决了,调用了C++的setupapi.dll文件编译的时候选择x86就可以加载32位的库了解决方案三:真快,分享问题好.解决方案四:程序使用了DLL一定注意32位和64位解决方案五:楼主是开发的64位程序吗解决方案六:引用3楼Z65443344的回复: 程序使用了DLL一定注意32位和64位 能讲一下调用系统摄像头的方

64位系统下用vs2012 编译qt程序,请问怎么编译出在32位系统可以运行的程序

问题描述 64位系统下用vs2012 编译qt程序,请问怎么编译出在32位系统可以运行的程序 我现在想把写好的qt程序打包,但是在32位系统上跑不起来, 然后我编译时把平台改为win32,又提示无法编译,编译失败, 请问在64位windows系统怎么编译出可以在32位系统运行的程序 解决方案 需要在编译设置里面修改一些条件编译的参数. 解决方案二: 需要设置编译选项 或直接运行32位的gcc编译系统

64位系统下的tw2815采集卡驱动

问题描述 64位系统下的tw2815采集卡驱动 64位系统下的tw2815采集卡驱动用不了,那位大神能给解决了. 解决方案 64位啥系统? 建议去厂家官网看看吧,驱动不是容易开发的,一般由厂家提供.或厂家提供技术支持+手册来由第三方开发.

AntiVC.dll有没有64位系统下的版本?

问题描述 各位大侠,请问AntiVC.dll有没有64位系统下的版本? 解决方案 解决方案二:没有,你可以强制程序集以x86方式运行嘛.解决方案三:谢谢回复!问题在于只能加载,但是提示找不到入口点DllRegisterServer

64位系统下IFeature.Store异常问题

问题描述 32位操作系统下,Framework3.5,ArcGis10.1,应用VS2010开发winForm程序,测试正常.转到64位环境下,IFeature.Store操作异常,GeoDatabase接口"Interfacenotsupported".求教各位大神应该如何解!多谢!

MySQL学习第四天 Windows 64位系统下使用MySQL_Mysql

一.启动/关闭MySQL         (1)启动MySQL服务:net start mysql  (2)停止MySQL服务: net stop mysql 二.登录/退出MySQL 首先我们先来看看一些重要的mysql参数,下面表中列出了一些重要的mysql参数: (1)查看版本号:输入mysql -V或mysql --version,注意这里的-V是大写.  (2)登录MySQL mysql后面要加参数才行.格式是:mysql  -u root (用户)  -p -P 端口号  -h  m

Win7 32/64位系统下安装SQL2005和SP3补丁安装教程[图文]_mssql2005

先打开安装程序.     选择对应的系统版本,我是64位,所以选了X64.     然后选择安装--服务器组件.工具.联机丛书和示例     扫描你的系统,看看有没有问题.(下图)     输入你的信息     全选的说     功能选择.当然是全部装啦.按浏览更多设置,可以改变安装路径     实例名看你需要,无特殊需要的话,默认示例就行了.     这个使用内置系统账户即可,最下面的选项不重要.     这一步很重要,要选择混合模式!!!     这个默认就好了.     继续下一步.   

win7 64位系统下利用任务栏增强工具Bins快速释放任务栏空间

  1.首先到网上下载并安装Bins,完成后会自动运行,然后点击"下一步Next"就能看到如何使用它的动画演示; 2.只要Ghost win7系统用户看过软件自带操作演示,就会发现Bins的使用非常简单,只要把一个图标拖到另一个图标上,就会弹出一个小窗口,然后再将再它移上去就完成了. 3.这时候程序图标会缩小以平铺方式显示,每个分组存放图标的数量不受限制,分组后运行中的图标会在前段显示4个图标,同时所有程序窗口预览时会合并在一起. 4.如果用户想从分组中分离图标也是可以通过直接拖拽的方