
Exécuter des Beacon Object Files (BOFs) en dehors de Cobalt Strike en analysant des fichiers objets COFF 64 bits, avec génération d'arguments compatible Beacon et scripts d'aide pour les tests de red team.
Ceci est un chargeur COFF rapide et sale (alias Beacon Object Files). Il peut actuellement exécuter des BOF non modifiés, afin de pouvoir être utilisé pour des tests sans qu'un agent CS ne l'exécute. La seule exception est que les fonctions de compatibilité beacon liées à l'injection sont tout simplement vides.
L'objectif principal est de fournir un exemple fonctionnel et peut-être d'être utile à quelqu'un.
Ce projet est composé de plusieurs parties, listées ci-dessous.
Cet outil est utilisé pour générer des arguments pour le code COFFLoader. Si le BOF accepte des arguments, ajoutez simplement les arguments avec le type attendu et générez la chaîne hexadécimale à utiliser.
Exemple d'utilisation :
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
Vous pouvez savoir quels arguments sont requis par chaque BOF en consultant le code source. En prenant le BOF Net User comme exemple, vous pouvez consulter le fichier src/SA/netuser/entry.c présent dans le dépôt Github CS-Situational-Awareness-BOF, puis examiner les arguments de la fonction 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);
};
On voit que notre BOF Net User nécessite un « username » et un « domain » (que l'on peut obtenir en exécutant le BOF whoami). À l'aide du script d'aide beacon_generate.py, on générerait les arguments comme ceci :
COFFLoader % python3 beacon_generate.py
Beacon Argument Generator
Beacon>addWString Administrator
Beacon>addWString client2
Beacon>generate
b'340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000'
Beacon>exit
Enfin, copiez les valeurs numériques hexadécimales (uniquement les chiffres) dans votre commande d'exécution
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\netuser\netuser.x64.o 340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000
Vous trouverez des exemples plus détaillés à ce lien :
https://trustedsec.com/blog/situational-awareness-bofs-for-script-kiddies
Un exemple d'exécution d'un BOF est présenté ci-dessous.
COFFLoader64.exe go test64.out
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\whoami\whoami.x64.o