Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
EXCELntDonut — Generador de macros de Excel 4.0 (XLM) para inyectar DLLs y EXEs en memoria. | Kitploit
Herramientas/GitHubGitHub/redsiege/excelntdonut
Herramientas de PhishingGeneración de PayloadsExplotaciónShellcodePhishingRed TeamingGeneración de Shellcode
GitHubredsiege/excelntdonut

EXCELntDonut

Generador de macros de Excel 4.0 (XLM) para inyectar DLLs y EXEs en memoria.

Ver Repositorio
51789hace 5 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
root@kitploit:~
_______
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    by @JoeLeonJr (@FortyNorthSec)                

EXCELntDonut es un generador de macros XLM (Excel 4.0). Comience con código fuente C# (EXE) y termine con una macro XLM (Excel 4.0) que ejecutará su código en memoria. Las macros XLM (Excel 4.0) se pueden guardar en archivos .XLS.

Instalación

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

¿Qué se instala?

  • pip3
  • mono-complete (tanto mcs como todas las bibliotecas posibles que referencie en sus archivos fuente)
  • EXCELntDonut como CLI

Si desea ejecutar EXCELntDonut solo como un script de Python, deberá configurar un entorno virtual con dos paquetes: "pandas" y "donut-shellcode". Además, necesitará instalar mono-complete mediante apt-get y llamar al script drive.py con python3. Recomendamos usar simplemente el script bash ./install.sh, pero depende de usted.

Uso

root@kitploit:~
Uso:
	$ EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate

Banderas:
	(obligatorio)
	-f ruta al archivo que contiene su código fuente C# (solo exe)

	-r Referencias necesarias para compilar su código C# (las mismas que al usar mcs para compilar en Linux)
	(ej: -r 'System.Management')

	(opcional)
	-o nombre del archivo de salida
	--sandbox 
		Realiza comprobaciones básicas de sandbox. Esto se actualizará a medida que se descubran nuevos enfoques.
	--obfuscate 
		Realiza ofuscación básica de macros. 

Cómo funciona

Usted proporciona un archivo C# que contiene su payload (como un EXE con un método main que ejecuta un payload de Cobalt Strike). Ese archivo C# se compila usando MCS en dos ensamblados .NET: x86 y x64. Después de la compilación, las increíbles herramientas Donut (para x86) y CLRvoyance (para x64) convierten cada ensamblado en shellcode independiente de la posición. A continuación, se eliminan todos los bytes nulos, ya que las macros XLM (Excel 4.0) no funcionan bien con bytes nulos, y el payload se divide en líneas de no más de 255 caracteres (para x86) o 10 caracteres (para x64).

Una vez que el shellcode está preparado, se combina con funciones básicas de inyección de procesos (VirtualAlloc, WriteProcessMemory y CreateThread), así como con una función de verificación de arquitectura para determinar qué payload (x86 o x64) ejecutar en el sistema de destino. Si opta por ejecutar comprobaciones de sandbox u ofuscación básica, esas funciones actualizarán su macro. Finalmente, la salida se coloca en un archivo CSV (guardado como .txt).

Cómo crear una macro XLM (Excel 4.0)

Una vez que tenga el archivo de salida de EXCELntDonut, abra el archivo de salida en un editor de texto y copie todo su contenido (Ctrl-A, Ctrl-C). Abra Excel en una máquina virtual Windows, haga clic derecho en "Hoja 1" y seleccione "Insertar". Elija "Macro de MS Excel 4.0". Vaya a la celda A1 y pegue la salida de EXCELntDonut. Es probable que todos los datos se peguen en una sola columna. Los datos están separados por punto y coma ";". Vaya a la pestaña "Datos" y luego haga clic en "Texto en columnas". Seleccione "Delimitados" y en la siguiente pantalla seleccione "Punto y coma" y luego haga clic en "Finalizar". La macro se distribuirá en las columnas y filas correspondientes.

(Nota: si seleccionó la bandera "--obfuscate", deberá desplazarse horizontalmente bastante para encontrar su código real, ya que parte de la lógica de ofuscación mueve la macro a una sección aleatoria de la hoja de cálculo).

En este punto, recomendamos dos cosas:

  1. Encuentre la celda inicial (será la celda superior izquierda de su código de macro, probablemente A1). Haga clic derecho y seleccione "Ejecutar". Pruebe su macro para asegurarse de que funcione.
  2. Una vez que verifique que la macro funciona, seleccione nuevamente esa misma celda superior izquierda. En el lado izquierdo de la pantalla, debería haber un menú desplegable que indique la celda en la que se encuentra (probablemente "A1"). Haga clic en el menú desplegable y cambie el valor de texto a "Auto_open". Eso producirá la misma funcionalidad de ejecución automática a la que está acostumbrado en las macros VBA.

Guarde el archivo (.xls) e intente abrirlo. Debería ejecutar su payload automáticamente.

Comprobaciones de Sandbox

Estas comprobaciones se basan en lo que los actores de amenazas reales están utilizando en sus malware.

  1. ¿Hay un ratón activo?
  2. ¿El tamaño de la pantalla es mayor a 770 de ancho y 381 de alto?
  3. ¿Puede el host reproducir sonidos?
  4. ¿Es esta una máquina Windows?

Ofuscación

  1. Para las instrucciones de inyección de procesos (VirtualAlloc, WriteProcessMemory, CreateThread) y las comprobaciones de sandbox, todas las funciones de macro se convertirán en la siguiente estructura:
root@kitploit:~
=FORMULA(D3&D23&D54&D23&D44,E45)

La función FORMULA nos permite colocar una fórmula, que luego se puede ejecutar, en otra celda. Entonces, en este caso, colocamos las instrucciones de inyección de procesos y luego usamos la función FORMULA para colocar la función real en otra celda para que se ejecute. Esto evita que los defensores que realizan análisis estático vean cosas como "VirtualAlloc".

  1. Toda la macro desplazará algún valor hacia la derecha, de modo que cuando abra inicialmente la hoja con las macros, parezca en blanco.

Cosas que saber

  • Los payloads menos sofisticados simplemente usan el comando =EXEC() para ejecutar comandos. Algunos también usan URLMON para descargar archivos. Otros archivos incluso incluyen la palabra "SHELL". Todo eso nos pareció una mala idea. Esta herramienta no incluye nada de eso. En su lugar, inyecta su código fuente C# en el proceso de Excel (ya sea de 32 o 64 bits) y luego lo ejecuta. A partir de ahí, depende de su payload lo que haga a continuación.

Consejos

  • Su código fuente C# puede hacer cualquier cosa que desee. Recomendamos que su código fuente rompa la relación Padre > Hijo entre Excel y lo que sea que genere.
  • Hay muchas publicaciones de blog útiles sobre hojas de Excel "Muy ocultas". Considere usar eso.
  • No olvide hacer que su archivo de Excel parezca real.

Solución de problemas

"El tipo o nombre de espacio de nombres ... no existe en el espacio de nombres ... ¿Le falta una referencia de ensamblado?"
root@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    by @JoeLeonJr (@FortyNorthSec)                
[i] Generando su ensamblado .NET x86.
warning CS8001: No se pudo resolver la ruta del SDK
test.cs(2,14): error CS0234: El tipo o nombre de espacio de nombres `Management' no existe en el espacio de nombres `System'. ¿Le falta una referencia de ensamblado?

Este error probablemente significa que le falta un ensamblado de referencia durante la compilación con mono. Para solucionarlo, simplemente pase el espacio de nombres mencionado en la bandera -r. En este caso, agregaríamos -r 'System.Management' a la línea de comandos. El nuevo comando sería:

root@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'

"No se pudo encontrar el archivo de metadatos ..."
root@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r System.Management
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    by @JoeLeonJr (@FortyNorthSec)                
[i] Generando su ensamblado .NET x86.
warning CS8001: No se pudo resolver la ruta del SDK
error CS0006: No se pudo encontrar el archivo de metadatos `System.Management'

[x] Error al generar el ensamblado .NET x86 usando MCS. Vea el mensaje de error anterior.

Este error no debería aparecer a menos que ejecute EXCELntDonut sin usar el script bash install.sh. En ese caso, necesitará instalar mono-complete manualmente. Esto descargará las dependencias relevantes. Puede instalarlo usando apt de la siguiente manera:

root@kitploit:~
apt-get install mono-complete
"El programa ... no contiene un método 'Main' estático ..."
root@kitploit:~
root@kali:~/Desktop# EXCELntDonut -f test.cs
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    by @JoeLeonJr (@FortyNorthSec)                
[i] Generando su ensamblado .NET x86.
error CS5001: El programa `_excelntdonut_GJAoNuVPMcX.exe' no contiene un método `Main' estático adecuado para un punto de entrada

[x] Error al generar el ensamblado .NET x86 usando MCS. Vea el mensaje de error anterior.

Por el momento, EXCELntDonut solo permite archivos C# con payloads en la función Main.

Consejos generales para la solución de problemas
  1. Primero, compile su código fuente C# usando csc en Windows y ejecútelo para verificar que el payload funcione. Pruébelo compilando payloads x86 y x64, ya que es probable que no sepa si su entorno de destino opera con Excel de 32 o 64 bits.
  2. Debería poder ejecutar su payload varias veces en el mismo proceso, pero si obtiene errores extraños, salga de Excel, vuelva a abrirlo y vuelva a intentarlo.
  3. En caso de duda, cierre Excel y cree un nuevo archivo para probar.

Detección

  • Aquí hay algunas reglas Yara para comenzar, por @InQuest:

    Busque una hoja muy oculta

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

    Busque la cadena Auto_Open

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

Hay muchas publicaciones sobre el uso de OLEDUMP.py para revisar archivos XLM. Considere esta:

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

Defensa

  1. Habilite el bloqueo por GPO de la ejecución de macros para archivos descargados de Internet. Ver: https://www.microsoft.com/security/blog/2016/03/22/new-feature-in-office-2016-can-block-macros-and-help-prevent-infection/
  2. AMSI desafortunadamente no ayuda aquí.
  3. Reglas ASR... no estamos seguros.
  4. La mayoría de los usuarios envían archivos .xlsx hoy en día. Quizás bloquee los archivos .xls para que no se envíen a las bandejas de entrada de sus empleados. No sería descabellado solicitar que alguien reenvíe un archivo guardado como .xlsx.
  5. La versión más reciente de Defender ATP detectó la versión no ofuscada de este archivo cuando se guardó en disco.

Agradecimientos

Esto ni siquiera estaría en nuestro radar sin el fantástico trabajo realizado por el equipo de Outflank (@outflanknl). Un agradecimiento especial a @StanHacked por su perspicacia durante este proyecto. Además, igualmente, este proyecto no sería posible sin Donut (por @TheWover y @odzhan) y la biblioteca de Python relacionada (por @byt3bl33d3r). Relacionado, el equipo de Accenture creó CLRvoyance, que resolvió algunos problemas x64 que no pudimos resolver con Donut + macros XLM 4.0. Finalmente, gracias a Philip Tsukerman de Cybereason por la increíble investigación sobre cómo hacer que las macros XLM sean compatibles con versiones de Excel de 64 bits.

Aviso legal

No somos responsables del mal uso de esta herramienta. Esta herramienta fue generada con fines educativos y de pruebas autorizadas para demostrar cómo se puede inyectar código fuente C# en la memoria utilizando una macro XLM (Excel 4.0). El objetivo final de este proyecto es (1) proporcionar a los equipos rojos otra opción de payload de phishing para emular lo que los adversarios reales están utilizando actualmente, y (2) proporcionar a los defensores un marco de referencia para construir analíticas y mitigaciones. Sin una herramienta para generar rápidamente este tipo de payload, creemos que los defensores no estarán adecuadamente preparados para lo que realmente se avecina. Actúe con responsabilidad.

Licencia

Consulte el archivo de licencia en esta carpeta. Tenga en cuenta que esta herramienta incorpora otras dos herramientas de código abierto, incluyendo Donut y CLRvoyance.

Descargar herramienta