Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/med0x2e/executeassembly
权限提升持久化机制漏洞利用IDS/IPS规避横向移动Shellcode后渗透利用命令与控制红队Shellcode 生成Payload 开发
GitHub
5971135年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
med0x2e/executeassembly

ExecuteAssembly

通过重用宿主(spawnto)进程加载的CLR AppDomainManager来加载/注入.NET程序集,踩踏加载器/.NET程序集PE DOS头部,解除链接.NET相关模块,绕过ETW+AMSI,通过NT静态系统调用(x64)规避EDR钩子,并通过动态解析API(哈希)隐藏导入。

查看仓库

描述:

ExecuteAssembly 是 Cobalt Strike execute-assembly 的一个替代方案,使用 C/C++ 构建。它可以通过以下方式加载/注入 .NET 程序集:重用宿主(spawnto)进程已加载的 CLR 模块/AppDomainManager、覆盖加载器/.NET 程序集 PE DOS 头部、解除 .NET 相关模块的链接、绕过 ETW+AMSI、通过 NT 静态系统调用(x64)规避 EDR 钩子,以及通过 SuperFastHash 哈希算法动态解析 API 来隐藏导入。

简要(特性):

  • 从 PEB 数据结构中解除 CLR 相关模块的链接(使用微软的 "ListDLLs" 工具而非 Process Hacker 进行确认)。
  • .NET 程序集和反射 DLL 头部覆盖(MZ 字节、e_lfanew、DOS 头部、Rich 文本、PE 头部)。
  • 使用静态硬编码系统调用以绕过 EDR 钩子(目前仅支持 x64,从 WinXP 到 Win10 19042)。
  • CLR "AppDomain/AppDomainManager" 枚举与重用(ICLRMetaHost->EnumerateLoadedRuntimes),只需将 spawnto/宿主进程设置为已知的 Windows .NET 进程。
  • 使用对应哈希值(SuperFastHash)动态解析 WIN32 API(PEB)。
  • 在加载 .NET 程序集之前对 AMSI 和 ETW 进行修补。
  • 解析 .NET 程序集字节并扫描以确定要加载/使用的 CLR 版本。
  • 不使用 GetProcAddress/LoadLibrary/GetModuleHandle 来绕过 ETW。
  • 使用 v4 COM API 托管 CLR 和反射 DLL 注入。

用法:

  • x64(系统调用):此版本主要依赖静态系统调用来绕过 EDR 钩子,你可以使用此版本仅构建 DLL 的 x64 版本(目前仅支持 x64)。

  • x86|x64(PEB):通过遍历 PEB 模块的 EAP 表并利用 SuperFastHash 哈希来动态解析 API 地址。但是,此版本无法处理 kernel32.dll 或 ntdll.dll 上设置的 EDR 钩子。你可以使用此版本构建 x86 和 x64 DLL,或者仅构建 x86 DLL,并使用 x64(系统调用)版本来构建 x64 DLL,以应对常见的 EDR 钩子。

  • 使用 VS2017 和/或 Windows SDK 10.0.17134.0(或兼容的 SDK 版本)构建所需的 DLL。

  • 确保已安装 gzip,并将以下文件放置在同一文件夹中,然后直接加载 aggressor 脚本 "ExecuteAssembly.cna":

    • ExecuteAssembly.cna

    • ExecuteAssembly-x64.dll

    • ExecuteAssembly-x86.dll

    • CLI 选项:

      --dotnetassembly: 要加载/注入的 .NET 程序集。

      --assemblyargs: .NET 程序集参数。

      --unlink-modules: 从 PEB 数据结构中解除 .NET 相关模块(如 CLR/MsCoree 相关的 DLL)的链接。

      --stomp-headers: 覆盖 .NET 程序集和反射 DLL 的 PE DOS 头部。

      --etw: 绕过 Windows 事件跟踪(ETW)。

      --amsi: 绕过 AMSI。

      --spawnto: 选择 spawnto 进程,执行时默认加载 CLR 的 .NET 二进制文件列表:
            - PresentationHost.exe
            - stordiag.exe
            - ScriptRunner.exe
            - caitstatic.exe
            - Microsoft.Uev.SyncController.exe
            - TsWpfWrp.exe
            - UevAgentPolicyGenerator.exe
            - UevAppMonitor.exe
            - FileHistory.exe
            - UevTemplateBaselineGenerator.exe
            - UevTemplateConfigItemGenerator.exe

  • 查看 spawnto-list.txt 以获取更多默认加载 CLR 且适合设置为 spawnto 的 MS 二进制文件(建议避免使用已知的 LOLBins,除非目标是开发人员的机器)。

示例:

  • ExecuteAssembly --dotnetassembly /tmp/Seatbelt.exe --assemblyargs LogonSessions --unlink-modules --stomp-headers --amsi --etw --spawnto PresentationHost.exe

  • ExecuteAssembly --amsi --etw --unlink-modules --stomp-headers --dotnetassembly /tmp/ghostpack/SharPersist.exe --assemblyargs -t reg -c "C:\Windows\SysWow64\mshta.exe C:\Users\admin\Downloads\Test2.hta" -k logonscript -m add --spawnto FileHistory.exe

  • ExecuteAssembly --unlink-modules --stomp-headers --dotnetassembly /tmp/ghostpack/SharPersist.exe --assemblyargs -t reg -k "logonscript" -v "C:\Windows\SysWow64\mshta.exe C:\Users\admin\Downloads\Test.hta" -m remove --spawnto FileHistory.exe

  • ExecuteAssembly --unlink-modules --amsi --dotnetassembly /tmp/ghostpack/SharpWMI.exe --assemblyargs action=query computername=localhost query="select * from win32_service" --spawnto FileHistory.exe

  • ExecuteAssembly --amsi --etw --dotnetassembly /tmp/ghostpack/SharpWMI.exe --assemblyargs action=query query="select * from win32_process" --spawnto PresentationHost.exe

C2 支持:

该工具主要基于 Cobalt Strike 创建和测试,但也可以与其他 C2 框架(MSF 等)一起使用。需要注意的是,反射 DLL 的 DLLMAIN 期望以如下格式(不带分号)接收单行有效载荷作为参数(lpReserved):

  • AMSI_FLAG|ETW_FLAG|STOMPHEADERS_FLAG|UNLINKMODULES_FLAG|LL_FLAG.LENGTH_FLAG.B64_ENCODED_COMPRESSED_PAYLOAD [SPACE SEPARATED ARGUMENTS]
    • AMSI_FLAG: 0|1(0 或 1)
    • ETW_FLAG: 0|1
    • STOMPHEADERS_FLAG: 0|1
    • UNLINKMODULES_FLAG: 0|1
    • LENGTH_FLAG: .NET 程序集的大小(以字节为单位)
    • LL_FLAG: length_of(LENGTH_FLAG)(请忍耐一下,或者假装没看到这句)
    • B64_ENCODED_COMPRESSED_PAYLOAD: 经 Gzip 压缩并 Base64 编码的 .NET 程序集。
    • [SPACE SEPARATED ARGUMENTS]: .NET 程序集参数

测试说明:

  • 在 Cobalt Strike 4.x 上使用无 malleable 配置文件进行测试。
  • 在 Cobalt Strike 4.x 上使用以下 malleable 配置文件进行测试(启用了多种内存规避选项,如 userwx、startrwx 等);
    • https://github.com/threatexpress/malleable-c2/blob/master/jquery-c2.4.0.profile

待办:

  • 替代 RFLL 的方案,可能是 BOF + 命名管道(不确定对长时间运行的任务是否有效)
  • 对静态系统调用添加 x86 支持。
  • 修复漏洞并清理可能遗漏的悬空指针或内存泄漏。

已知问题:

  • 对 SharpHound v2 和 v3 的支持(v2 以前可以正常工作,需要找出变化之处)。
  • .NET 程序集大小限制(< 1MB)。

鸣谢/参考:

  • https://github.com/stephenfewer/ReflectiveDLLInjection
  • https://github.com/jthuraisamy/SysWhispers
  • https://github.com/etormadiv/HostingCLR
  • https://github.com/outflanknl/TamperETW/
  • https://github.com/LloydLabs/Windows-API-Hashing
  • http://www.rohitab.com/discuss/topic/42077-module-pebldr-hiding-all-4-methods-x64/
  • https://gist.github.com/christophetd/37141ba273b447ff885c323c0a7aff93
下载工具