13 dic 2017

Túneles, Port-Forwarding y Meterpreter: Salta conmigo

Ya hemos hablado de la tunelización de conexiones con Proxychains, pero en esta ocasión quería mostrar un ejercicio fundamental en el pentesting. Hablar de túneles, port-forwarding y pivoting con y sin Meterpreter. Un compendio de buenas prácticas y técnicas que ayudan a poder saltar y saltar entre diferentes máquinas y servicios de la organización. ¿Qué es el pivoting? Es una técnica, como dije anteriormente fundamental, utilizada para enrutar tráfico a través de un equipo comprometido en un test de intrusión.

Estés en una máquina externa o una máquina interna, puedes necesitar conducir el tráfico a través de una máquina comprometida para buscar el compromiso de otros targets internos. Al fin y al cabo, el pivoting permite ir enrutando a través de diferentes máquinas que se van comprometiendo con el objetivo de lograr conectividad y acceso a otras subredes y máquinas, generalmente, más importantes de la red. Los compañeros de highon.coffee tienen unos cheatsheets bastante completos.

En el artículo de hoy vamos a hacer un resumen de las posibilidades que tenemos, para ejemplificar a través de una pequeña prueba de concepto. Lo primero es hablar de SSH Port-forwarding. El propio SSH nos permite realizar este tipo de operaciones de manera sencilla.

PoC: Pivoting con túneles SSH

Proponemos el siguiente escenario:
  • Máquina A con la dirección IP 10.0.0.1, dónde nosotros tenemos una shell.
  • Máquina B con la dirección IP 11.0.0.1, dónde nosotros tenemos una conexión a través de SSH.
  • Máquina C con la dirección IP 11.0.0.2, dónde esta máquina no tiene conectividad con la máquina 10.0.0.1, pero sí con la máquina 11.0.0.1.
Podríamos utilizar la opción –L de SSH para indicar un puerto local, por ejemplo 2222, al que enviaremos el tráfico. En nuestra máquina local se abrirá el puerto 2222 y SSH estará a la escucha. Es SSH, a través de dicho puerto, el encargado de reenviar el tráfico al puerto, por ejemplo, 22 de la máquina 11.0.0.2 a través del equipo 11.0.0.1.

Vamos a verlo de forma práctica. Ejecutando la instrucción ssh –L 2222:11.0.0.2:22 [user]@11.0.0.1. Recordemos que suponemos que la máquina 10.0.0.1 y la 11.0.0.1 tienen conectividad, pero la 10.0.0.1 no tiene con la máquina 11.0.0.2.


Una vez que el usuario tiene acceso a la máquina 11.0.0.1, se ha creado el forward a través del puerto local 2222. Ahora, si ejecutamos un netstat –tulpn podemos ver los procesos que están a la escucha en la máquina. Podemos ver de forma fácil como el proceso de SSH está a la escucha en el puerto 2222.

Cuando queramos conectar con la máquina que se encuentra en la dirección IP 11.0.0.2, a la que no tenemos conectividad directa, pero sí a través de la 11.0.0.1, ejecutaremos el comando ssh –p 2222 [user]@127.0.0.1. Como se ve, estamos enviando la petición SSH a nuestro puerto local 2222 y a nuestro localhost. SSH recibe esta petición y hace el reenvío a través de la conexión o sesión abierta de la máquina 11.0.0.1 y de ésta salta a la 11.0.0.2. Ahora sí llegamos a la máquina 11.0.0.2.


Como se ve en la imagen tenemos conectividad. Lo que nos interesa es ver qué tráfico y en qué forma llega a la máquina 11.0.0.2. En la máquina 11.0.0.1 configuramos un tcpdump y vemos cómo el tráfico que se envía hacia la máquina 11.0.0.2 va con dirección IP 11.0.0.1.



PoC: Metamos a Metasploit en la ecuación

Ahora vamos a meter a Metasploit en el juego. Con el túnel creado entre la máquina 10.0.0.1 y 11.0.0.1, vamos a configurar el módulo de Metasploit para que pueda enviar el exploit a través del túnel, cuando éste llegue a la máquina 11.0.0.1 se hará forward y se enviará el exploit a la máquina 11.0.0.3. Esta es una nueva máquina que metemos en la ecuación. Esta máquina es un Windows 7 y tiene un FTP vulnerable corriendo en el puerto 21.

Tenemos que crear un nuevo túnel con la máquina 11.0.0.1, el cual podemos hacerlo con la siguiente instrucción ssh –L 2222:11.0.0.3:21 pablo@11.0.0.1. De esta forma, en nuestra máquina local se abrirá el puerto 2222 en la interfaz de red 127.0.0.1 con el proceso de SSH y éste hará el forward al puerto 21 de la máquina 11.0.0.3 aprovechando la conexión con la máquina 11.0.0.3.

Podemos configurar el módulo de Metasploit para que RHOST apunte a 0.0.0.0, es decir, cualquier interfaz de red de nuestra máquina, incluyendo localhost que es dónde está a la escucha el puerto 2222. En RPORT, debemos utilizar el puerto 2222, ya que es el que está a la escucha en nuestra máquina.


Cuando ejecutamos el módulo podemos ver que éste se ejecuta, pero parece que no tenemos conexión o sesión. Aunque el exploit ha tenido éxito, no obtenemos sesión debido a que el payload se ha configurado de tipo bind y éste está atado al puerto 4444 de la máquina 11.0.0.3, a la cual no tenemos conectividad. Debemos, en este caso, crear un nuevo túnel que nos redirija al puerto 4444 de la máquina 11.0.0.3.


Para conectarnos, utilizamos el módulo exploit/multi/handler con el que podremos buscar al Meterpreter que nos ha devuelto la explotación de la vulnerabilidad del servidor FTP.

¿Qué había ocurrido? La vulnerabilidad había sido explotada, y el Meterpreter estaba ejecutándose en el puerto 4444 a la espera de que alguien se conectara a él.

Como se ve en la imagen, de nuevo RHOST apunta a 0.0.0.0 y LHOST, en este caso, apunta al puerto 2222, que es el de nuestra máquina local. Una vez lanzamos el módulo obtenemos la nueva sesión de Meterpreter y podemos ejecutar comandos.


Debemos tener claro que gracias al túnel SSH entre la máquina 10.0.0.1 y la máquina 11.0.0.1 hemos podido hacer forward del tráfico dirigido al puerto 21 de la máquina 11.0.0.3, utilizando como pivote a la 11.0.0.1, y, posteriormente, hemos realizado el mismo proceso, pero con el puerto 4444, para recoger el Meterpreter. Una mejora sería utilizar un Meterpreter reverse para que la máquina 11.0.0.3 pueda conectarse a nosotros si tuviera conectividad desde dentro hacia fuera.

PoC: Rizando el rizo. Dos saltos y pwned en el servidor FTP

Por último, se quiere saltar por dos máquinas antes de llegar al servidor FTP. Para ello, se abre el puerto 2222 en local y se indica que es a 127.0.0.1 dónde se lanza la petición con destino puerto 2223 en la máquina remota. Una vez se tiene acceso en la máquina 11.0.0.1, se abre el puerto 2223 y se indica que las peticiones que salgan de dicha máquina vayan al puerto 21 de la máquina 11.0.0.3. Puede resultar un poco lioso, pero os dejo una imagen que puede ayudaros.


Ahora, lanzamos el exploit con la misma configuración que en el paso anterior. El exploit pasará por la máquina 11.0.0.1, de la 11.0.0.1 pasa a la 11.0.0.2 y de ésta a la 11.0.0.3 dónde llega ya en plano, en la petición de protocolo FTP. De la máquina 10.0.0.1 a la 11.0.0.1 y de la 11.0.0.1 a la 11.0.0.2 hay dos túneles SSH.

Cuando queremos preparar los túneles para recoger el Meterpreter de tipo bind. En la imagen se puede ver cómo queda la configuración de los túneles, para la recogida del Meterpreter en el puerto 4444.


Para acabar, vemos cómo obtener el acceso a la máquina Windows 7, que se encuentra a dos saltos de nosotros, sin ningún tipo de conectividad con la máquina Kali Linux dónde nos encontramos.


Para más adelante dejamos la funcionalidad de Metasploit de Portfwd, con la que podemos hacer este tipo de cosas más sencillas, y tras conseguir la explotación con Metasploit. Sin duda, una técnica necesaria y que debemos manejar.

No hay comentarios:

Publicar un comentario