Local port forwarding (SSH tunnel)
El local port forwarding reenvía un puerto de nuestra máquina a través de una conexión SSH hacia un destino accesible desde el servidor remoto. Sirve para alcanzar servicios que el objetivo solo expone internamente (a 127.0.0.1 o a su red local) y que desde fuera están filtrados o devuelven errores.
Mecanismo
El caso clásico: un servicio escucha en el objetivo pero solo acepta conexiones desde localhost o desde IPs internas, de modo que al conectarnos desde nuestra IP externa nos rechaza (por ejemplo, con un 403 Forbidden). Si tenemos credenciales SSH en esa máquina, hacemos que el tráfico "nazca" dentro del propio servidor. La sintaxis de OpenSSH es -L <puerto-local>:<destino>:<puerto-destino>:
ssh <user>@<ip> -L 8443:127.0.0.1:8443 # servicio interno del propio objetivo
ssh <user>@<ip> -L 5432:<db-interna>:5432 # un tercer host que solo ve el objetivo
ssh <user>@<ip> -L 8443:127.0.0.1:8443 -Nf # -N sin shell, -f a segundo planoA partir de ahí, conectarse a 127.0.0.1:8443 en nuestra máquina sale por el túnel y llega al servicio como si viniera de 127.0.0.1 del objetivo: para el servicio el origen es local y de confianza, así que la restricción por IP deja de aplicar.
Las tres direcciones y el pivoting
ssh cubre tres modos, y conviene tener claro cuál toca:
-L(local): traer un puerto del lado remoto hacia el nuestro (lo de arriba).-R(remote): exponer un puerto nuestro en el remoto (útil cuando el objetivo no puede salir a Internet pero sí llegar a nosotros).-D(dynamic): montar un proxy SOCKS local para pivotar a toda una red interna, no a un solo puerto:
ssh <user>@<ip> -D 1080 -Nf
proxychains nmap -sT -Pn <red-interna>/24 # o: proxychains firefox / curlCuando no hay SSH en el objetivo, el mismo resultado se logra con chisel (servidor/agente sobre HTTP), ligolo-ng (interfaz TUN, cómodo para redes enteras), socat o, en Windows, plink -L/netsh interface portproxy y sshuttle como "VPN por SSH".
Requisitos
Un canal SSH (u otra herramienta de túnel) hacia el pivote con credenciales válidas, y un servicio de destino alcanzable desde ese pivote. No escala privilegios: solo cambia el punto de origen del tráfico.
Cómo detectarlo. Del lado del servidor comprometido, un ss -tnp/netstat muestra a sshd con conexiones salientes hacia 127.0.0.1 o hosts internos en el puerto reenviado que no proceden de ningún cliente local: es el tráfico que el túnel origina en nombre del atacante. En los logs de autenticación, la señal previa es un login remoto legítimo seguido de actividad hacia servicios internos que ese usuario no suele tocar. Un sshd hijo con -D/-L/-R en su línea de comando, o binarios como chisel/ligolo en el disco, son firmas directas.
Defensa. No fiar la seguridad de un servicio a un filtro por IP de origen (cualquiera con acceso a la máquina puede originar tráfico "local"); deshabilitar AllowTcpForwarding en sshd donde no se necesite, segmentar la red interna y vigilar conexiones salientes anómalas desde los servidores. Es hermano del resto de pivoting y túneles.
Máquinas donde se aplica
- ChemistryHackTheBox
- Darkhole 2VulnHub
- HealHackTheBox
- MonitorsThreeHackTheBox
- OpenSourceHackTheBox
- PandoraHackTheBox
- PCProving Grounds Practice
- SeaHackTheBox
- ServmonHackTheBox
- SightlessHackTheBox
- Symfonos 1 & 2VulnHub
- TricksterHackTheBox
- VmdakProving Grounds Practice