如何将.NET程序集注入至现有进程 如何将.NET程序集注入至现有进程

如何将.NET程序集注入至现有进程

关于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,即使程序集已加载至当前进程中;

工具使用

广大研究人员可以访问该项目的【Releases页面】下载最新版本的inject-assembly,并将inject-assembly.cna脚本加载进Cobalt Strike中。

接下来,就可以使用下列命令来执行程序集了:

inject-assembly pid assembly [args...]

如果PID设置为0的话,则会在当前Beacon进程中执行。

我们建议广大研究人员使用类似FindObjects-BOF之类的工具来定位已加载.NET运行时的进程。

工具使用演示

项目地址

inject-assembly:GitHub传送门

参考资料

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

评论 0

挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论
sitemap