包含研究笔记及武器化 .NET 的 DLR 的 PoC 代码的工具箱
包含研究笔记和PoC代码的工具箱,用于武器化.NET的DLR
| Script | 描述 |
|---|---|
Kukulkan | SILENTTRINITY的精简版本,C# DLL和EXE,嵌入IPY引擎。通信加密,可与CobaltStrike一起使用 |
Invoke-JumpScare.ps1 | 使用嵌入的Boolang编译器执行shellcode,不触碰磁盘(至少据我所知),且不调用csc.exe :) |
Invoke-IronPython.ps1 | 使用嵌入的IPY引擎执行IronPython代码。与Invoke-JumpScare概念相同,仅使用IronPython。 |
Invoke-ClearScript.ps1 | 使用嵌入的ClearScript引擎执行JScript(或VBScript) |
SharpSnek.cs | C#代码,嵌入IronPython引擎并执行嵌入的IPY代码。挂钩AppDomain.CurrentDomain.AssemblyResolve以在运行时解析所需的程序集。 |
runBoo.cs | 对应Invoke-JumpScare的C#版本。使用嵌入的Boolang编译器执行shellcode。 |
runBooAssemblyResolve.cs | C#代码,嵌入Boolang编译器并执行嵌入的Boolang代码。挂钩AppDomain.CurrentDomain.AssemblyResolve以在运行时解析所需的程序集。 |
minidump.boo | 原生Boolang脚本,使用MiniDumpWriteDump转储内存 |
shellcode.boo | 原生Boolang脚本,执行shellcode。目前包含3种不同技术(QueueUserAPC、CreateThread/WaitForSingleObject、WriteProcessMemory/CreateRemoteThread) |
Invoke-SSharp.ps1 | 从PowerShell中嵌入的编译器执行SSharp。编译不调用csc.exe |
Invoke-Boolang.ps1 | 从嵌入的编译器执行Boo代码。它还提供了我在Boolang编译器嵌入PowerShell时发现的一些bug的解决方法。 |
Invoke-NeoLua.ps1 | 从PowerShell中嵌入的编译器执行Lua代码。 |
.NET DLR简直太疯狂了,它允许你做疯狂的事情,比如将编译器/引擎嵌入到其他.NET语言(如PowerShell和C#)中,同时保持Opsec安全并驻留在内存中。 在IronPython的情况下,你甚至可以拥有我称之为“引擎盗梦空间”的东西:想在一个IPY引擎中嵌入另一个IPY引擎,再嵌入另一个IPY引擎?(yo dawg,我听说你喜欢IPY引擎……)
从业者角度来看,这具有极高的灵活性,并且有许多优势,列举几个:
开箱即用地访问.NET API,完全不需要通过PowerShell。本质上,使用DLR让你拥有PowerShell的全部能力,但无需PowerShell,而且使用(通常)更容易脚本化的语言(例如Python)
大量反射/嵌入始终在进行,意味着更多的规避。
使用DLR你总是绕过AMSI(如果正确执行你的payload),无需混淆、修补等。
你所有的‘邪恶’代码可以用你嵌入的引擎/编译器的语言编写。如果你通过PowerShell这样做,ScriptBlock日志记录看不到任何东西,因为所有魔法都在DLR中发生。
通常,所有DLR语言都有一种调用本地方法的方式,要么通过语言本身,要么通过动态编译C#(例如PowerShell的Add-Type)。
如果使用前者,不会调用csc.exe,通常不会写入磁盘,因为语言通过IL代码在内存中生成所有需要的东西。
我们可以“随心所欲地高低切换”(@Op_nomad),这允许我们做所有我们喜欢的好东西(注入shellcode、非托管DLL、加载PE等)
允许快速重新工具化和payload武器化。无需手动编译。
如果你对此感兴趣,这里还有一些其他尝试武器化DLR的工具:
公平警告,一旦开始阅读这些内容,你将陷入一个地狱般的兔子洞(里面有真正的恶魔兔子)。