
Inyectar ensamblados de .NET en un proceso existente
Esta herramienta es una alternativa a la ejecución tradicional fork and run para Cobalt Strike. El cargador puede ser inyectado en cualquier proceso, incluido el Beacon actual. Los ensamblados de larga duración continuarán ejecutándose y enviando la salida de vuelta al Beacon, de manera similar al comportamiento de execute-assembly.
Hay dos componentes de inject-assembly:
Inicializador BOF: Un programa pequeño encargado de inyectar el cargador de ensamblados en un proceso remoto con los argumentos proporcionados. Utiliza BeaconInjectProcess para realizar la inyección, lo que significa que este comportamiento puede personalizarse en un perfil Malleable C2 o con BOFs de inyección de procesos (a partir de la versión 4.5).
Cargador de ensamblados PIC: La mayor parte del proyecto. El cargador inicializará el runtime de .NET, cargará el ensamblado proporcionado y lo ejecutará. El cargador creará un nuevo AppDomain en el proceso destino para que el ensamblado cargado pueda descargarse por completo cuando la ejecución termine.
La comunicación entre el proceso remoto y el Beacon ocurre a través de una tubería con nombre (named pipe). El script Aggressor genera un nombre de tubería y lo pasa al inicializador BOF.
Descargue y cargue el script Aggressor inject-assembly.cna en Cobalt Strike. Luego puede ejecutar ensamblados usando el siguiente comando:
inject-assembly pid assembly [args...]
Especifique 0 como PID para ejecutar en el proceso Beacon actual.
Se recomienda usar otra herramienta, como FindObjects-BOF, para localizar un proceso que ya cargue el runtime de .NET, aunque esto no es un requisito para que inject-assembly funcione.
jobkill.Este proyecto no habría sido posible sin los siguientes proyectos:
Otras características e inspiración se tomaron de los siguientes recursos: