
Generatore di macro Excel 4.0 (XLM) per iniettare DLL ed EXE in memoria.
| \ / / | | | _ __ | || _ \ ___ _ __ _ | | | | \ / | | | | | | ' | | | | |/ _ | ' | | | | | | | / \ || || |__| | | | || || | () | | | | || | | |_____//__|||| ||_|____/ _/|| ||_,|__| di @JoeLeonJr (@FortyNorthSec)
EXCELntDonut è un generatore di macro XLM (Excel 4.0). Partendo da codice sorgente C# (EXE) si ottiene una macro XLM (Excel 4.0) che eseguirà il codice in memoria. Le macro XLM (Excel 4.0) possono essere salvate in file .XLS.
chmod +x install.sh
./install.sh
Cosa viene installato?
Se preferisci eseguire EXCELntDonut come semplice script Python, dovrai configurare un ambiente virtuale con due pacchetti "pandas" e "donut-shellcode". Inoltre, dovrai installare mono-complete tramite apt-get e chiamare lo script drive.py usando python3. Raccomandiamo di usare lo script bash ./install.sh, ma la scelta è tua.
Utilizzo:
$ EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate
Flag:
(obbligatori)
-f percorso del file contenente il codice sorgente C# (solo exe)
-r Reference necessarie per compilare il codice C# (le stesse usate con mcs per compilare su Linux)
(es: -r 'System.Management')
(opzionali)
-o nome file di output
--sandbox
Esegue controlli sandbox di base. Verrà aggiornato man mano che si scoprono nuovi approcci.
--obfuscate
Esegue una offuscazione di base della macro.
Fornisci un file C# contenente il tuo payload (ad esempio un EXE con un metodo main che esegue un beacon Cobalt Strike). Quel file C# viene compilato usando MCS in due assembly .NET: x86 e x64. Dopo la compilazione, i fantastici strumenti Donut (per x86) e CLRvoyance (per x64) convertono ogni assembly in shellcode position independent. Successivamente, vengono rimossi tutti i byte null, poiché le macro XLM (Excel 4.0) non interagiscono bene con i byte null, e il payload viene suddiviso in righe con non più di 255 caratteri (per x86) o 10 caratteri (per x64).
Una volta preparato lo shellcode, viene combinato con funzioni di base per l'iniezione di processo (VirtualAlloc, WriteProcessMemory e CreateThread) oltre a una funzione di controllo dell'architettura per determinare quale payload (x86 o x64) eseguire sul sistema di destinazione. Se scegli di eseguire controlli sandbox o offuscazione di base, quelle funzioni aggiorneranno la tua macro. Infine, l'output viene inserito in un file CSV (salvato come .txt).
Una volta ottenuto il file di output da EXCELntDonut, apri il file di output in un editor di testo e copia tutto il contenuto (Ctrl-A, Ctrl-C). Apri Excel su una macchina virtuale Windows, fai clic con il pulsante destro del mouse su "Foglio1" e seleziona "Inserisci". Scegli "Macro MS Excel 4.0". Vai alla cella A1 e incolla l'output di EXCELntDonut. Tutti i dati verranno probabilmente incollati in una singola colonna. I dati sono separati da punto e virgola ";". Vai alla scheda "Dati" e fai clic su "Testo in colonne". Seleziona "Delimitato" e nella schermata successiva seleziona "Punto e virgola", quindi fai clic su "Fine". La macro si distribuirà tra le colonne e le righe appropriate.
(Nota: se hai selezionato il flag "--obfuscate", dovrai scorrere orizzontalmente parecchio per trovare il codice vero e proprio, poiché parte della logica di offuscazione sposta la macro in una sezione casuale del foglio di lavoro).
A questo punto raccomandiamo due cose:
Salva il file (.xls) e prova ad aprirlo. Dovrebbe eseguire automaticamente il tuo payload.
Questi controlli si basano su ciò che gli attaccanti reali utilizzano nei loro malware.
=FORMULA(D3&D23&D54&D23&D44,E45)
La funzione FORMULA ci permette di inserire una formula, che può essere successivamente eseguita, in un'altra cella. Quindi, in questo caso, inseriamo le istruzioni di iniezione del processo e poi usiamo la funzione FORMULA per posizionare la funzione effettiva in un'altra cella da eseguire. Questo evita che i difensori, eseguendo analisi statiche, vedano cose come "VirtualAlloc".
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
di @JoeLeonJr (@FortyNorthSec)
[i] Generazione dell'assembly .NET x86.
warning CS8001: impossibile risolvere il percorso SDK
test.cs(2,14): error CS0234: Il tipo o il namespace `Management' non esiste nel namespace `System'. Manca un riferimento all'assembly?
Questo errore molto probabilmente significa che ti manca un assembly di riferimento durante la compilazione con mono. Per risolvere, passa semplicemente il namespace menzionato nel flag -r. In questo caso, aggiungeremmo -r 'System.Management' alla riga di comando. Il nuovo comando sarebbe:
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'