跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

x64操作系统上的Office持久性


Xiao7

推荐的帖子

0x00 前言

在之前的文章《Use Office to maintain persistence》中,在Office中介绍过

常见的在软件中嵌入后门的方法,但不全面,缺乏64位系统的测试。至于64位操作系统,支持32位和64位版本的office软件。不同版本的office有不同的使用方法吗?本文将给出答案。

0x01 简介

本文将介绍以下内容:

如何在64位系统中安装64位办公软件

如何在64位系统中安装32位办公软件

根据测试结果优化概念验证

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项目。

如下图

2-1.png

添加一个同名文件。包含以下内容的def:

出口

xlAutoOpen

如下图

2-2.png

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

显示正常

如下图

2-3.png

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

创建一个新的dll项目并选择导出符号。

如下图

2-4.png

将导出功能设置为xlAutoOpen

如下图

2-5.png

2-6.png

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

如下图

2-7.png

导出函数的名称更改为?xlAutoOpen@@YAXXZ

Excel无法加载dll,因为导出的函数无法识别(函数名已更改)。

解决方法:

使用预处理指示符#pragma来指定链接选项并修复导出函数名称。

添加一行代码:

#pragma注释(链接器,'/EXPORT:xlAutoOpen=?xlAutoOpen @ @ YAXXZ’)

如下图

2-8.png

再次使用IDA查看导出功能,正常。

如下图

2-9.png

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位办公软件,Word WLL需要使用64位calc.wll,Excel XLL需要使用64位calc.xll

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

默认文件安装目录:C:\ Program Files(x86)\ Microsoft Office,有重定向。

注:

Office目录也将创建在目录C:\Program Files\,其中包含软件版本。

也就是说,原POC中判断Microsoft Office版本的代码不需要更改。

注册表位置HKEY _当前_用户\软件\微软\办公室\

尚未重定向到HKEY当前用户软件节点

有关64位系统下32位程序重定向的更多详细信息,请参考以前的文章《关于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位办公软件,测试结果与32位系统相同,所以不需要修改POC。

0x04 优化POC

基于上述测试结论,为了使POC支持64位系统,需要进行以下修改:

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

代码开发详情(powershell代码):

1、判断操作系统位数

if([环境]:Is64BitOperatingSystem)

{

' 64位'

}

其他

{

' 32位'

}

2、判断安装office软件版本

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

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

64位Office:C:\ Program Files \ Microsoft Office

确定路径C:\ Program Files \ Microsoft Office是否包含文件夹介质

如果是,那么64位office

Powershell代码如下:

尝试

{

目录C:\ Program Files \ Microsoft Office \ MEDIA

写入主机“Microsoft Office: 64位”

}

捕捉

{

写入主机“Microsoft Office: 32位”

}

结合无线一键通脚本,变量$OfficePath表示设置的办公室安装路径,默认路径为c:\ Program Files \ Microsoft Office ' ' Office * '

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

$OfficeMainPath=$OfficePath .子字符串(0,$OfficePath .LastIndexOf('') 1)"媒体"

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

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

依旧是通过变量保存作base64编码后的64位无线本地环路和xll

将动态链接库文件作base64编码:

$fileContent=[System .IO。File]:读取所有字节(' calcx 64。wll’)

$fileContentEncoded=[System .convert]:to base 64 string($ file content)| set-content(' calc _ x 64 wll base 64。txt’)

$fileContent=[System .IO。File]:读取所有字节(' calcx 64。xll’)

$fileContentEncoded=[System .convert]:to base 64 string($ file content)| set-content(' calc _ x 64 xll base 64。txt’)

释放时先做base64解密

$fileContentBytes=[System .convert]:从base64字符串(文件内容)

最终无线一键通已在开源代码库更新,该无线一键通能够区分操作系统和办公室版本,当遇到64位系统安装64位办公室的情况时,自动释放64位的动态链接库

无线一键通地址如下:

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

0x05 小结

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

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...