
Injetar assemblies .NET em um processo existente
Esta ferramenta é uma alternativa à execução tradicional fork and run para o Cobalt Strike. O loader pode ser injetado em qualquer processo, incluindo o Beacon atual. Assemblies de longa duração continuarão a ser executados e enviarão a saída de volta ao Beacon, semelhante ao comportamento do execute-assembly.
Existem dois componentes do inject-assembly:
Inicializador BOF: Um pequeno programa responsável por injetar o carregador de assembly em um processo remoto com quaisquer argumentos passados. Ele usa BeaconInjectProcess para realizar a injeção, o que significa que esse comportamento pode ser personalizado em um perfil Malleable C2 ou com BOFs de injeção de processo (a partir da versão 4.5).
Carregador de assembly PIC: A maior parte do projeto. O carregador inicializará o runtime .NET, carregará o assembly fornecido e executará o assembly. O carregador criará um novo AppDomain no processo alvo para que o assembly carregado possa ser completamente descarregado quando a execução for concluída.
A comunicação entre o processo remoto e o Beacon ocorre através de um named pipe. O script Aggressor gera um nome de pipe e o passa para o inicializador BOF.
Baixe e carregue o script Aggressor inject-assembly.cna no Cobalt Strike. Você pode então executar assemblies usando o seguinte comando:
inject-assembly pid assembly [args...]
Especifique 0 como PID para executar no processo atual do Beacon.
É recomendado usar outra ferramenta, como FindObjects-BOF, para localizar um processo que já carrega o runtime .NET, mas isso não é um requisito para o funcionamento do inject-assembly.
jobkill.Este projeto não teria sido possível sem os seguintes projetos:
Outros recursos e inspiração foram retirados dos seguintes recursos: