
Execute executáveis Windows não gerenciados em Beacons do CobaltStrike
Inline-Execute-PE é um conjunto de Beacon Object Files (BOFs) e um script Aggressor para CobaltStrike que permite aos Operadores carregar executáveis Windows não gerenciados na memória do Beacon e executá-los, recuperando a saída e exibindo-a no console do Beacon.
Isso permite que os Operadores utilizem muitas ferramentas de terceiros (Mimikatz, Dsquery, ferramentas Sysinternals, etc.) sem precisar gravá-las em disco, reformatá-las para código independente de posição usando uma ferramenta como Donut, ou criar um novo processo para executá-las.
Esses executáveis são mapeados na memória do Beacon para que possam ser executados repetidamente sem precisar enviá-los pela rede, alocar nova memória e criar um novo processo conhost.exe a cada vez.
Os executáveis carregados nos Beacons são acessíveis e podem ser executados por todos os Clientes CobaltStrike conectados ao Servidor de Equipe CobaltStrike.
O Inline-Execute-PE foi projetado para Beacons x64 e executáveis Windows x64 em C ou C++ compilados com Mingw ou Visual Studio. Este projeto não suporta executáveis x86 ou executáveis x64 escritos em outra linguagem ou compilados com outro compilador.

Clone o repositório e opcionalmente execute make para recompilar os BOFs.
Carregue o Inline-Execute-PE.cna no cliente CobaltStrike. Certifique-se de que o diretório de onde o CobaltStrike está sendo executado seja gravável pelo seu utilizador; o Inline-Execute-PE cria um ficheiro de texto lá (petable.txt) para garantir a disponibilidade dos dados necessários para o funcionamento do Inline-Execute-PE.
O Inline-Execute-PE compreende 3 comandos voltados para o alvo que executam BOFs e 3 comandos internos que manipulam a estrutura de dados do projeto:
Voltados para o alvo:
Estrutura de dados interna:
peload é o início do Inline-Execute-PE. Este comando é utilizado para carregar um PE na memória do Beacon. Ele realiza as seguintes ações principais:
perun é o segundo passo no Inline-Execute-PE. Ele realiza as seguintes ações principais:
peunload é chamado para remover o PE da memória do Beacon quando um Operador terminar com ele ou desejar carregar um PE diferente. Ele realiza as seguintes ações principais:
petable é usado para exibir informações sobre todos os PEs atualmente carregados nos Beacons.
Cada Cliente CobaltStrike tem seu próprio petable; o Inline-Execute-PE se esforça ao máximo para garantir a sincronicidade dos seus dados entre todos os Clientes CobaltStrike conectados, para que os PEs possam ser usados por todos os Operadores. Para mais informações, veja "Considerações de Design e Comentários".

peconfig é usado para configurar opções relacionadas ao funcionamento do Inline-Execute-PE. As duas opções atuais que podem ser alteradas são:
pebroadcast pode ser usado para transmitir manualmente o conteúdo do petable de um Cliente para todos os outros Clientes CobaltStrike conectados.
Cada outro Cliente CobaltStrike atualizará seu petable com os dados transmitidos. Isso nunca deve ser realmente necessário, mas a funcionalidade existe apenas por precaução.
Use peload para carregar um PE na memória do Beacon

Alternativamente, se houver um PE na máquina alvo que deseje usar sem criar um novo processo, forneça o caminho e a opção --local

Chame perun, passando quaisquer argumentos para o PE carregado

Aspas duplas em argumentos devem ser escapadas com barras invertidas

Se identificou que um PE causa problemas ao tentar libertar DLLs durante o descarregamento, use peconfig para definir unloadlibraries como falso

Depois de terminar de usar um PE, chame peunload para limpá-lo do Beacon

Agora, um PE diferente pode ser carregado no Beacon
