
Generador de macros de Excel 4.0 (XLM) para inyectar DLLs y EXEs en memoria.
_______
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
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.
chmod +x install.sh
./install.sh
¿Qué se instala?
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:
$ 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.
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).
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:
Guarde el archivo (.xls) e intente abrirlo. Debería ejecutar su payload automáticamente.
Estas comprobaciones se basan en lo que los actores de amenazas reales están utilizando en sus malware.
=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".
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@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'