Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
EXCELntDonut — Generatore di macro Excel 4.0 (XLM) per iniettare DLL ed EXE in memoria. | Kitploit
Strumenti/GitHubGitHub/redsiege/excelntdonut
Strumenti di PhishingGenerazione di PayloadExploitShellcodePhishingRed TeamingGenerazione di Shellcode
GitHubredsiege/excelntdonut

EXCELntDonut

Generatore di macro Excel 4.0 (XLM) per iniettare DLL ed EXE in memoria.

Vedi Repository
517895 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

| \ / / | | | _ __ | || _ \ ___ _ __ _ | | | | \ / | | | | | | ' | | | | |/ _ | ' | | | | | | | / \ || || |__| | | | || || | () | | | | || | | |_____//__|||| ||_|____/ _/|| ||_,|__| 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.

Installazione

root@kitploit:~
chmod +x install.sh
./install.sh

Cosa viene installato?

  • pip3
  • mono-complete (sia mcs che tutte le possibili librerie che potresti referenziare nei tuoi file sorgente)
  • EXCELntDonut come CLI

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

root@kitploit:~
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.

Come funziona

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).

Come creare una macro XLM (Excel 4.0)

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:

  1. Trova la cella di partenza (sarà la cella in alto a sinistra del codice della macro, probabilmente A1). Fai clic con il pulsante destro del mouse e seleziona "Esegui". Testa la macro per assicurarti che funzioni.
  2. Una volta verificato che la macro funzioni, seleziona di nuovo la stessa cella in alto a sinistra. Sul lato sinistro dello schermo, dovrebbe esserci un menu a discesa che indica la cella in cui ti trovi (probabilmente "A1"). Fai clic nel menu a discesa e modifica il valore di testo in "Auto_open". Questo produrrà la stessa funzionalità di esecuzione automatica a cui sei abituato con le macro VBA.

Salva il file (.xls) e prova ad aprirlo. Dovrebbe eseguire automaticamente il tuo payload.

Controlli Sandbox

Questi controlli si basano su ciò che gli attaccanti reali utilizzano nei loro malware.

  1. È presente un mouse attivo?
  2. La dimensione dello schermo è maggiore di 770 di larghezza e 381 di altezza?
  3. L'host può riprodurre suoni?
  4. È una macchina Windows?

Offuscazione

  1. Per le istruzioni di iniezione del processo (VirtualAlloc, WriteProcessMemory, CreateThread) e i controlli sandbox, tutte le funzioni della macro si trasformeranno nella seguente struttura:
root@kitploit:~
=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".

  1. L'intera macro sposterà un certo valore a destra, in modo che quando apri inizialmente il foglio con le macro, appaia vuoto.

Cose da sapere

  • I payload meno sofisticati usano semplicemente il comando =EXEC() per eseguire comandi. Alcuni usano anche URLMON per scaricare file. Altri file includono persino la parola "SHELL". Tutto ciò ci è sembrato una cattiva idea. Questo strumento non include nulla di tutto ciò. Invece, inietta il tuo codice sorgente C# nel processo di Excel (32-bit o 64-bit) e poi lo esegue. Da lì, spetta al tuo payload decidere cosa fare dopo.

Suggerimenti

  • Il tuo codice sorgente C# può fare qualsiasi cosa tu voglia. Raccomandiamo che il tuo codice sorgente interrompa la relazione genitore > figlio tra Excel e qualsiasi cosa tu generi.
  • Ci sono molti buoni articoli sui fogli Excel "Molto nascosti". Considera di usarli.
  • Non dimenticare di rendere il tuo file Excel credibile.

Risoluzione dei problemi

"Il tipo o il namespace ... non esiste ... "
root@kitploit:~
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@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'

"File di metadati ... non trovato"
root@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r System.Management
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    di @JoeLeonJr (@FortyNorthSec)                
[i] Generazione dell'assembly .NET x86.
warning CS8001: impossibile risolvere il percorso SDK
error CS0006: File di metadati `System.Management' non trovato

[x] Errore nella generazione dell'assembly .NET x86 usando MCS. Vedi il messaggio di errore sopra.

Questo errore non dovrebbe apparire a meno che tu non esegua EXCELntDonut senza usare lo script bash install.sh. In tal caso, dovrai installare manualmente mono-complete. Questo scaricherà le dipendenze necessarie. Puoi installarlo usando apt in questo modo:

root@kitploit:~
apt-get install mono-complete
"Il programma ... non contiene un metodo 'Main' statico ..."
root@kitploit:~
root@kali:~/Desktop# EXCELntDonut -f test.cs
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    di @JoeLeonJr (@FortyNorthSec)                
[i] Generazione dell'assembly .NET x86.
error CS5001: Il programma `_excelntdonut_GJAoNuVPMcX.exe' non contiene un metodo `Main' statico adatto come punto di ingresso

[x] Errore nella generazione dell'assembly .NET x86 usando MCS. Vedi il messaggio di errore sopra.

Al momento, EXCELntDonut accetta solo file C# con payload nella funzione Main.

Suggerimenti generali per la risoluzione dei problemi
  1. Prima, compila il tuo codice sorgente C# usando csc su Windows ed esegui per verificare che il payload funzioni. Testalo compilando payload x86 e x64, poiché è probabile che tu non sappia se l'ambiente di destinazione utilizza Excel a 32 o 64 bit.
  2. Dovresti essere in grado di eseguire il tuo payload più volte nello stesso processo, ma se ottieni errori strani, esci da Excel, riapri e riprova.
  3. In caso di dubbio, chiudi Excel e crea un nuovo file per testare.

Rilevamento

  • Ecco alcune regole Yara per iniziare, di @InQuest:

    Cerca un foglio molto nascosto

    https://github.com/InQuest/yara-rules/blob/master/Excel_Hidden_Macro_Sheet.rule

    Cerca la stringa Auto_Open

    https://github.com/Neo23x0/signature-base/blob/master/yara/general_officemacros.yar

Ci sono molti articoli sull'uso di OLEDUMP.py per analizzare file XLM. Considera questo:

https://clickallthethings.wordpress.com/2020/04/06/covid-19-excel-4-0-macros-and-sandbox-detection/

Difesa

  1. Attiva il blocco tramite GPO dell'esecuzione di macro per i file scaricati da Internet. Vedi - https://www.microsoft.com/security/blog/2016/03/22/new-feature-in-office-2016-can-block-macros-and-help-prevent-infection/
  2. Purtroppo AMSI non aiuta qui.
  3. Regole ASR... non ne siamo sicuri.
  4. La maggior parte degli utenti invia file .xlsx oggigiorno. Forse blocca i file .xls dall'essere inviati alle caselle di posta dei tuoi dipendenti. Non sarebbe scandaloso chiedere a qualcuno di rispedire un file salvato come .xlsx.
  5. L'ultima versione di Defender ATP ha rilevato la versione non offuscata di questo file quando è stato salvato su disco.

Riconoscimenti

Questo non sarebbe nemmeno sul nostro radar senza l'eccezionale lavoro del team di Outflank (@outflanknl). Un ringraziamento speciale a @StanHacked per la sua intuizione durante questo progetto. Inoltre, ugualmente, questo progetto non sarebbe possibile senza Donut (di @TheWover e @odzhan) e la relativa libreria Python (di @byt3bl33d3r). Correlato, il team di Accenture ha creato CLRvoyance, che ha risolto alcuni problemi x64 che non riuscivamo a risolvere con Donut + macro XLM 4.0. Infine, grazie a Philip Tsukerman di Cybereason per l'eccezionale ricerca sulla compatibilità delle macro XLM con le versioni a 64 bit di Excel.

Disclaimer

Non siamo responsabili per l'uso improprio di questo strumento. Questo strumento è stato creato per scopi educativi e di test autorizzati per dimostrare come il codice sorgente C# possa essere iniettato in memoria utilizzando una macro XLM (Excel 4.0). L'obiettivo finale di questo progetto è (1) fornire ai red team un'altra opzione di payload per phishing per emulare ciò che gli avversari reali stanno attualmente utilizzando, e (2) fornire ai difensori un punto di riferimento per costruire analisi e mitigazioni. Senza uno strumento per generare rapidamente questo tipo di payload, riteniamo che i difensori non saranno adeguatamente preparati per ciò che sta effettivamente arrivando. Agisci responsabilmente.

Licenza

Consulta il file di licenza in questa cartella. Si prega di notare che questo strumento incorpora altri due strumenti open source: Donut e CLRvoyance.

Scarica lo strumento