
Esegui Beacon Object Files (BOFs) al di fuori di Cobalt Strike analizzando file oggetto COFF a 64 bit, con generazione di argomenti compatibile con Beacon e script di supporto per test di red team.
Questo è un loader COFF veloce e sporco (noto anche come Beacon Object Files). Attualmente può eseguire BOF non modificati, quindi può essere usato per test senza che un agente CS lo esegua. L'unica eccezione è che le funzioni di compatibilità beacon relative all'iniezione sono semplicemente vuote.
L'obiettivo principale è fornire un esempio funzionante e, forse, essere utile a qualcuno.
Ci sono alcune parti, elencate di seguito.
beacon_compatibility: queste sono le funzioni interne del beacon, così puoi caricare file BOF ed eseguirli.COFFLoader: questo è il vero loader COFF e, quando compilato per nix, carica il file oggetto a 64 bit e lo analizza.test: questo è il file "COFF" di esempio; verrà compilato nel file COFF quando viene chiamato make.beacon_generate: questo è uno script di supporto per costruire stringhe/argomenti compatibili con le funzioni beacon_compatibility.Questo viene usato per generare argomenti per il codice COFFLoader; se il BOF accetta argomenti, basta aggiungerli con il tipo previsto da questo script e generare la stringa esadecimale da usare.
Esempio di utilizzo:
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
Puoi scoprire quali argomenti richiede ogni BOF guardando il codice sorgente. Usando il BOF Net User come esempio, dovresti guardare il file src/SA/netuser/entry.c presente nel repository GitHub CS-Situational-Awareness-BOF e poi esaminare gli argomenti presenti nella funzione 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);
};
Possiamo vedere che il nostro BOF Net User richiede uno "username" e un "domain" (che possiamo ottenere eseguendo il BOF whoami). Usando lo script di supporto beacon_generate.py, genereremmo gli argomenti in questo modo:
COFFLoader % python3 beacon_generate.py
Beacon Argument Generator
Beacon>addWString Administrator
Beacon>addWString client2
Beacon>generate
b'340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000'
Beacon>exit
Infine, copia i valori numerici esadecimali (solo i numeri) nel tuo comando di esecuzione
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\netuser\netuser.x64.o 340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000
Puoi trovare esempi più dettagliati a questo link:
https://trustedsec.com/blog/situational-awareness-bofs-for-script-kiddies
Di seguito un esempio di come eseguire un BOF.
COFFLoader64.exe go test64.out
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\whoami\whoami.x64.o