Una shell inversa (reverse shell) es una consola remota en la que el equipo comprometido abre una conexión saliente hacia el atacante, que obtiene así control interactivo eludiendo las reglas de entrada del cortafuegos.
Cómo funciona una shell inversa
En una sesión remota normal, el cliente se conecta a un servidor que espera conexiones entrantes. Una shell inversa invierte ese esquema:
- El atacante inicia un listener en su propia máquina, por ejemplo con netcat o Metasploit.
- Explota una vulnerabilidad como la ejecución remota de código o sube una web shell y ejecuta un comando breve en el objetivo.
- El objetivo se conecta de vuelta al listener y asocia una shell (bash, cmd.exe o PowerShell) a esa conexión.
Los comandos típicos de una línea usan la función /dev/tcp de bash, Python, PowerShell o netcat. El enfoque contrario, la bind shell, abre en cambio un puerto de escucha en la víctima. MITRE ATT&CK asocia esta actividad a Command and Scripting Interpreter (T1059) y a protocolos de capa de aplicación para comando y control.
Por qué importan las shells inversas
La mayoría de los cortafuegos y dispositivos NAT bloquean las conexiones entrantes no solicitadas pero permiten el tráfico saliente, así que una shell inversa suele ser la forma más sencilla de convertir un fallo puntual de ejecución de código en acceso interactivo completo. Por eso tantos ataques contra aplicaciones web, appliances VPN y dispositivos IoT terminan con una. En las pruebas de penetración, una shell inversa funcional es la prueba estándar de un compromiso exitoso. Los atacantes pueden tunelizarla por HTTPS o DNS para camuflarla en el tráfico normal.
Cómo defenderse de las shells inversas
- Restringir el tráfico saliente: los servidores solo deben conectarse a los destinos que realmente necesitan.
- Generar alertas cuando servidores web o servicios lancen shells o intérpretes de scripts.
- Usar EDR y monitorización de red para detectar conexiones prolongadas con hosts desconocidos.
- Parchear rápido las aplicaciones expuestas a internet para eliminar la ejecución de código inicial.





