
Execute Beacon Object Files (BOFs) fora do Cobalt Strike por meio da análise de arquivos de objeto COFF de 64 bits, com geração de argumentos compatível com Beacon e scripts auxiliares para testes de red team.
Este é um carregador COFF rápido e sujo (também conhecido como Beacon Object Files). Atualmente pode executar BOFs não modificados, para que possa ser usado para testes sem um agente CS em execução. A única exceção é que as funções de compatibilidade do beacon relacionadas à injeção estão vazias.
O principal objetivo é fornecer um exemplo funcional e talvez ser útil para alguém.
Existem algumas partes, listadas abaixo.
Isto é usado para gerar argumentos para o código COFFLoader. Se o BOF aceitar argumentos, basta adicioná-los com o tipo esperado por ele e gerar a string hexadecimal para uso.
Exemplo de uso aqui:
COFFLoader % python3 beacon_generate.py
Beacon Argument Generator
Beacon>help
Documented commands (type help <topic>):
========================================
addString addWString addint addshort exit generate help reset
Beacon>addWString test
Beacon>addint 4
Beacon>generate
b'120000000a0000007400650073007400000004000000'
Beacon>reset
Beacon>addint 5
Beacon>generate
b'0400000005000000'
Beacon>exit
Você pode descobrir quais argumentos são necessários para cada BOF visualizando o código-fonte. Usando o BOF Net User como exemplo, você deve visualizar o arquivo src/SA/netuser/entry.c encontrado no Github CS-Situational-Awareness-BOF e então observar os argumentos encontrados na função void go().
VOID go(IN PCHAR Buffer, IN ULONG Length)
{
datap parser;
wchar_t *username = NULL;
wchar_t *domain = NULL;
BeaconDataParse(&parser, Buffer, Length);
username = (wchar_t *)BeaconDataExtract(&parser, NULL);
domain = (wchar_t *)BeaconDataExtract(&parser, NULL);
domain = *domain == 0 ? NULL : domain;
netuserinfo(username, domain);
printoutput(TRUE);
};
Podemos ver que nosso BOF Net User exige um "username" e um "domain" (que podemos obter executando o BOF whoami). Usando o script auxiliar beacon_generate.py, geraríamos os argumentos assim:
COFFLoader % python3 beacon_generate.py
Beacon Argument Generator
Beacon>addWString Administrator
Beacon>addWString client2
Beacon>generate
b'340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000'
Beacon>exit
Por fim, copie os valores numéricos hexadecimais (apenas os números) para o seu comando de execução
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\netuser\netuser.x64.o 340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000
Você pode encontrar exemplos mais detalhados neste link:
https://trustedsec.com/blog/situational-awareness-bofs-for-script-kiddies
Um exemplo de como executar um BOF está abaixo.
COFFLoader64.exe go test64.out
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\whoami\whoami.x64.o