关于inject-assembly
inject-assembly这款工具是Cobalt Strike的传统“fork-and-run”执行方式的替代方法。在该工具的帮助下,加载器可以注入到任何进程中,包括当前Beacon在内。长时间运行的程序集将继续运行并会将输出发送回Beacon,这种特性类似于execute-assembly的执行行为。
该工具主要由以下两个组件组成:
1、BOF初始化工具:一个实用工具,负责将程序集加载器注入至远程进程中,并携带任意参数。它可以使用BeaconInjectProcess来执行注入操作,这也就意味着,这种行为可以在可延展的C2配置文件或进程注入BOF中进行自定义。
2、PIC程序加载器:它也是该工具的主要部分,它负责初始化.NET运行时环境,然后加载并执行提供的程序集。加载程序将在目标进程中创建一个新的AppDomain,以便在执行完成时完全卸载调之前加载的程序集。
远程进程和Beacon之间的通信是通过一个命名管道进行,我们可以通过脚本来生成一个管道名称,然后通过参数将其传递给BOF初始化工具。
主要功能
1、修复了Environment.Exit()以防止远程进程退出运行;
2、.NET程序集Header Stomping(MZ直接、e_Ifanew、DOS Header、富文本、PE Header);
3、给予SourcePoint随机生成管道名称;
4、不屏蔽Beacon,即使程序集已加载至当前进程中;
工具使用
接下来,就可以使用下列命令来执行程序集了:
inject-assembly pid assembly [args...]
如果PID设置为0的话,则会在当前Beacon进程中执行。
我们建议广大研究人员使用类似FindObjects-BOF之类的工具来定位已加载.NET运行时的进程。
工具使用演示
项目地址
https://github.com/kyleavery/inject-assembly
参考来源
https://github.com/Tylous/SourcePoint
https://github.com/kyleavery/inject-assembly/releases
https://github.com/outflanknl/FindObjects-BOF
https://github.com/TheWover/donut
https://github.com/SolomonSklash/netntlm
https://github.com/med0x2e/ExecuteAssembly
https://github.com/anthemtotheego/InlineExecute-Assembly
https://www.mdsec.co.uk/2020/08/massaging-your-clr-preventing-environment-exit-in-in-process-net-assemblies
精彩推荐
原文始发于微信公众号(FreeBuf):如何将.NET程序集注入至现有进程
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论