Payloads staged vs stageless: qué significa la barra en el nombre
La diferencia entre los payloads de reverse shell staged y stageless, por qué cambia qué listener necesitas, y cómo elegir entre ellos.
"Staged" frente a "stageless" es la distinción detrás de más reverse shells fallidas que casi cualquier otra cosa, y se esconde en un único carácter del nombre del payload. Entenderla te dice al instante si funcionará un simple listener de netcat o si necesitas un handler completo.
Los dos modelos
Un payload stageless contiene la shell entera. Se conecta de vuelta a tu listener y tienes una sesión de inmediato. Todo lo necesario está en un solo artefacto.
Un payload staged se entrega en dos partes. Primero se ejecuta en el objetivo un diminuto stager — solo el código justo para abrir una conexión y recibir más. Tu handler envía entonces la segunda parte (el stage), que es la shell real. El stager arranca el proceso; el stage hace el trabajo.
En la nomenclatura de Metasploit la diferencia es la puntuación:
windows/x64/shell_reverse_tcp— guion bajo — stageless.windows/x64/shell/reverse_tcp— barra — staged.
Lee la barra. Decide tu listener.
Por qué existe el staging
El staging es un apaño para sortear restricciones de tamaño y entrega. Algunos exploits solo te dan unos cientos de bytes para ejecutar — muy poco para un Meterpreter completo. Un stager pequeño cabe donde un payload completo no cabría, y luego descarga el resto por una conexión que controla. También permite que un mismo stager descargue distintos stages sin regenerar el código inicial.
El coste es la fragilidad: el staging necesita viajes de ida y vuelta extra por la red, un handler listo para servir el stage en el momento adecuado, y un enlace lo bastante estable para transferirlo. Sobre un túnel inestable o una primitiva de ejecución de un solo disparo, la transferencia del stage es una cosa más que puede fallar.
Por qué esto rompe los listeners
Aquí está la ventaja práctica. Un payload stageless habla con cualquier cosa que acepte una conexión TCP — nc -lvnp 443 basta. El stager de un payload staged se conecta, espera que se le envíe el stage, y se encuentra con que un simple nc no tiene nada que enviar — así que la sesión muere al llegar. Ese es el manual del "conecta y luego se desconecta de inmediato."
Por eso los payloads staged y de Meterpreter necesitan un handler de verdad (el exploit/multi/handler de Metasploit) configurado con exactamente la misma cadena de payload. El desajuste se trata desde el lado de las herramientas en reverse shells con msfvenom y en general en elegir un listener.
Cuál elegir
- Stageless cuando tienes espacio para él y quieres la máxima fiabilidad — es autocontenido, capturable con herramientas sencillas y tiene menos piezas móviles. La mayoría de las reverse shells de one-liner (bash, python, php) son en la práctica stageless.
- Staged cuando la primitiva de ejecución es diminuta, cuando necesitas específicamente las funciones de Meterpreter, o cuando quieres variar el stage sin cambiar el stager.
Para las pruebas autorizadas del día a día, donde el objetivo tiene una shell o un intérprete normal, un one-liner stageless del generador de reverse shell es más sencillo y fiable que cualquier cosa staged.
Solo pruebas autorizadas
Sea cual sea el modelo que uses, despliégalo únicamente contra sistemas de tu propiedad o que tengas autorización explícita para probar.