该工具是 Cobalt Strike 传统 fork 和 run 执行方式的替代方案。加载器可注入任意进程,包括当前 Beacon。长时间运行的程序集将继续执行并将输出发送回 Beacon,类似于 execute-assembly 的行为。
inject-assembly 包含两个组件:
BOF 初始化器:一个小型程序,负责将程序集加载器注入远程进程并附带任意参数。它使用 BeaconInjectProcess 执行注入,这意味着此行为可通过 Malleable C2 配置文件或进程注入 BOF(从 4.5 版本开始)进行自定义。
PIC 程序集加载器:项目的主体部分。加载器会初始化 .NET 运行时、加载提供的程序集并执行该程序集。加载器会在目标进程中创建新的 AppDomain,以便执行完成后可以完全卸载已加载的程序集。
远程进程与 Beacon 之间的通信通过命名管道进行。Aggressor 脚本会生成一个管道名称,然后将其传递给 BOF 初始化器。
下载并将 inject-assembly.cna Aggressor 脚本加载到 Cobalt Strike 中。然后可以使用以下命令执行程序集:
inject-assembly pid assembly [args...]
指定 PID 为 0 可在当前 Beacon 进程中执行。
建议使用另一款工具(如 FindObjects-BOF)来定位已加载 .NET 运行时的进程,但这并非 inject-assembly 运行的强制要求。
jobkill 断开命名管道。如果没有以下项目,本项目将无法实现:
其他特性与灵感来自以下资源: