
Beacon Object Files (BOFs) außerhalb von Cobalt Strike ausführen, indem 64-Bit-COFF-Objektdateien geparst werden, mit Beacon-kompatibler Argumentgenerierung und Hilfsskripten für Red-Team-Tests.
Dies ist ein schneller und einfacher COFF-Loader (auch bekannt als Beacon Object Files). Er kann derzeit unmodifizierte BOFs ausführen, sodass er ohne einen laufenden CS-Agenten zum Testen verwendet werden kann. Die einzige Ausnahme ist, dass die injektionsbezogenen Beacon-Kompatibilitätsfunktionen lediglich leer sind.
Das Hauptziel ist es, ein funktionierendes Beispiel bereitzustellen und vielleicht für jemanden nützlich zu sein.
Es besteht aus einigen Teilen, die unten aufgeführt sind.
make für Sie zur COFF-Datei gebaut.Dies wird verwendet, um Argumente für den COFFLoader-Code zu generieren. Wenn der BOF Argumente akzeptiert, fügen Sie einfach die Argumente mit dem hier erwarteten Typ hinzu und generieren Sie den Hex-String zur Verwendung.
Beispielverwendung hier:
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
Sie können herausfinden, welche Argumente von jedem BOF benötigt werden, indem Sie den Quellcode ansehen. Am Beispiel des Net User BOF würden Sie die Datei src/SA/netuser/entry.c im GitHub-Repository CS-Situational-Awareness-BOF ansehen und dann die Argumente in der Funktion void go() betrachten.
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);
};
Wir können sehen, dass unser Net User BOF einen „username“ und eine „domain“ benötigt (die wir durch Ausführen des whoami BOF erhalten können). Mit dem Hilfsskript beacon_generate.py würden wir die Argumente wie folgt generieren:
COFFLoader % python3 beacon_generate.py
Beacon Argument Generator
Beacon>addWString Administrator
Beacon>addWString client2
Beacon>generate
b'340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000'
Beacon>exit
Kopieren Sie schließlich die hexadezimalen Zahlenwerte (nur die Zahlen) in Ihren Ausführungsbefehl.
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\netuser\netuser.x64.o 340000001c000000410064006d0069006e006900730074007200610074006f00720000001000000063006c00690065006e00740032000000
Ausführlichere Beispiele finden Sie unter diesem Link:
https://trustedsec.com/blog/situational-awareness-bofs-for-script-kiddies
Ein Beispiel für die Ausführung eines BOF finden Sie unten.
COFFLoader64.exe go test64.out
COFFLoader64.exe go ..\CS-Situational-Awareness-BOF\SA\whoami\whoami.x64.o