Donut是一个shellcode生成工具,它可以从.NET程序集中创建与位置无关的shellcode
payloads。此shellcode可用于将程序集注入任意Windows进程。给定一个任意.NET程序集,参数和入口点(如Program.Main),Donut就可为我们生成一个与位置无关的shellcode,并从内存加载它。.NET程序集可以通过直接嵌入shellcode从URL或Stageless进行分阶段。无论哪种方式,.NET程序集都将使用Chaskey
block
cipher和128-bit随机生成的密钥进行加密。通过CLR加载程序集后,原始引用将从内存中删除以躲避内存扫描程序检测。程序集将被加载到一个新的应用程序域(AppDomain)
中,以允许在可释放的AppDomain中运行程序集。它可以以多种方式使用。
作为独立工具使用
Donut可用于从任意.NET程序集生成shellcode。同时提供了Windows EXE和Python script(计划用于v1.0版的python)的payload生成。命令行语法如下。
usage: donut [options] -f <.NET assembly>
-f <path> .NET assembly to embed in PIC and DLL.
-u <URL> HTTP server that will host the .NET assembly.
-c <namespace.class> Optional class name. (required for DLL)
-m <method> Optional method name. (required for DLL)
-p <arg1,arg2...> Optional parameters or command line, separated by comma or semi-colon.
-a <arch> Target architecture : 1=x86, 2=amd64, 3=amd64+x86(default).
-r <version> CLR runtime version. MetaHeader used by default or v4.0.30319 if none available.
-d <name> AppDomain name to create for assembly. Randoml