
Ejecuta Beacon Object Files (BOFs) fuera de Cobalt Strike mediante el análisis de archivos objeto COFF de 64 bits, con generación de argumentos compatible con Beacon y scripts auxiliares para pruebas de red team.
Este es un cargador COFF rápido y sucio (también conocido como Beacon Object Files). Actualmente puede ejecutar BOF sin modificar, por lo que se puede utilizar para pruebas sin necesidad de un agente CS ejecutándolo. La única excepción es que las funciones de compatibilidad de beacon relacionadas con la inyección están vacías.
El objetivo principal es proporcionar un ejemplo funcional y tal vez ser útil para alguien.
Hay varias partes, que se enumeran a continuación.
Esto se usa para generar argumentos para el código de COFFLoader; si el BOF acepta argumentos, simplemente agrega los argumentos con el tipo esperado por este script y genera la cadena hexadecimal para su uso.
Ejemplo de uso:
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
Puedes encontrar qué argumentos requiere cada BOF consultando el código fuente. Usando el BOF Net User como ejemplo, deberías ver el archivo src/SA/netuser/entry.c que se encuentra en el Github de CS-Situational-Awareness-BOF y luego revisar los argumentos que se encuentran en la función 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 nuestro BOF Net User requiere un "username" y un "domain" (que podemos obtener ejecutando el BOF whoami). Usando el script auxiliar beacon_generate.py, generaríamos los argumentos de la siguiente manera:
COFFLoader % python3 beacon_generate.py
Beacon Argument Generator
Beacon>addWString Administrator
Beacon>addWString client2
Beacon>generate
b'340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000'
Beacon>exit
Por último, copia los valores numéricos hexadecimales (solo los números) en tu comando de ejecución
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\netuser\netuser.x64.o 340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000
Puedes encontrar ejemplos más detallados en este enlace:
https://trustedsec.com/blog/situational-awareness-bofs-for-script-kiddies
A continuación se muestra un ejemplo de cómo ejecutar un BOF.
COFFLoader64.exe go test64.out
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\whoami\whoami.x64.o