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