En una intrusión, durante la fase de post-explotación y más concretamente cuando ya tenemos acceso y visibilidad a equipos y servidores de la red interna de nuestro objetivo, llega el momento de pensar en el desplazamiento lateral (entre otras cosas). En mi experiencia, cuando tengo la necesidad de hacer pivoting o utilizar una máquina de salto para llegar a otro host y sus puertos, tirar de la poderosa herramienta chisel es una de mis primeras elecciones, ya luego en menor medida he empleado proxychains, plink, sockat o sshuttle. Todas estas herramientas tienen sus ventajas e inconvenientes (como todo), pero hay una cosas que me «mosquea», si lo que pretendo es llegar a los hosts de la red interna como si los tuviera al lado y no tener que estar definiendo la conexión, puerto a puerto (en el caso de chisel) y/o marcando un prefijo (en el caso de proxychains) para cada herramienta que decido utilizar. Es por ello que hoy les traigo una manera bastante practica de configurar un host (Linux) comprometido, para que me sirva de puerta de entrada a la red interna y consiga verlos como si fueran «parte de mi misma LAN».
Escenario:
Para que se me entienda de lo que hablo, a continuación dejo un pequeño diagrama de ejemplo:

En donde:
- La máquina Parrot que inicialmente se conecta a Internet para llegar a un host de la red interna (vía SSH), que tiene configurada una dirección IP pública: 44.214.248.132.
- Por otro lado está la máquina Pivot, que se encuentra ubicada en la red interna, concretamente en la VLAN 172.16.1.0/24. Este servidor tiene visibilidad sobre todos los hosts de esta VLAN, por tanto se usará como máquina de salto.
- Tomando en cuenta que esta es una técnica de post-explotación, se asume que ya se tiene comprometida la máquina Pivot, incluso es posible rootearla.
- La conexión por SSH se realiza mediante claves (pública/privada).
Configuración:
Mediante la utilidad tuntap de la suite de iptools (poderosa suite de utilidades de red), que se encuentra en gran parte de sistemas Linux, prácticamente por defecto. Generaremos 2 interfaces virtuales, 1 en cada extremo del túnel (en la máquina Parrot y en la máquina Pivot), de la siguiente manera:
- Parrot y Pivot
ip tuntap add dev tap0 mod tap
Cuando ya lo tengamos configurado asignaremos una dirección IP a cada interfaz virtual (tap0) y la levantaremos de la siguiente forma:
- Parrot
ip a a 10.10.15.15/24 dev tap0 && ip link set tap0 up

- Pivot
ip a a 10.10.15.16/24 dev tap0 && ip link set tap0 up

Ahora tendremos que trabajar en nuestra configuración SSH (fichero: /etc/ssh/sshd_config
) para que nos permita hacer el túnel (por defecto esta línea viene comentada y deshabilitada).
- Parrot y Pivot
sed -i 's/\#PermitTunnel no/PermitTunnel yes/g' /etc/ssh/sshd_config

Cuando lo tengamos, debemos reiniciar el servicio de SSH en ambos hosts:
- Parrot y Pivot
/etc/init.d/ssh restart
Listo, ahora apoyados en SSH desde la máquina Parrot realizaremos una conexión con el siguiente comando:
ssh -o Tunnel=ethernet -w 0:0 admin@44.214.248.132 -i id_rsa_admin
En donde:
- El operador
-o
será indicativo de opciones. - El operador
-w
corresponde a cada extremo del túnel. - El operador
-i
indica que la autenticación se hará mediante clave SSH.

Si todo ha marchado como es debido, podríamos validar que hacemos ping a cada extremo del túnel entre si:
- Parrot

- Pivot

Adicionalmente puede validar que sucede si interrumpe la conexión SSH establecida previamente.
Prácticamente concluyendo, y lo más importante para cumplir con nuestro objetivo primario: Conseguir llevar nuestro tráfico a los hosts de la red interna de destino, necesitamos definir el correspondiente enrutado, de forma que nuestra máquina Parrot consiga llevar todo el tráfico que dirijamos a la VLAN 172.16.1.0/24 por medio del túnel hasta el otro extremo, a la máquina Pivot.
- Parrot
ip route add 172.16.1.0/24 via 10.10.15.16

Ya para finalizar será necesario generar la siguientes reglas de iptables para «transformar» nuestra máquina Pivot en un enrutador al habilitar el reenvío de IPv4, tal que así:
- Pivot
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -i tap0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -j ACCEPT

Validación:
Listo, ya tenemos creado nuestro túnel por SSH y que nos permitirá hacer un tratamiento de la red interna, tal y como la tendríamos en nuestra red de casa o laboratorio (LAN).
Hagamos un reconocimiento de los hosts activos:

Adicionalmente podremos hacer escaneos de puertos y servicios con Nmap sin mayores demoras y de forma habitual:

Recuerdo que durante la resolución de un examen (no diré cual, por obvia razones), buscando alternativas para pivoting, mi compañero de trabajo, el bueno de Guille Tuvilla (aka @shotual), me recomendó el post en el que se basa esta entrada (os lo dejo a continuación en las referencias). Espero os sea de utilidad, como lo es para mi.