> For the complete documentation index, see [llms.txt](https://shinki-organization.gitbook.io/dw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shinki-organization.gitbook.io/dw/write-ups/quickstart/maquinas-medio/404-not-found-write-up.md).

# 404-not-found write-up

## **Verificamos conexión con la máquina víctima**

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

## **Escaneo de puertos abiertos y explotación de vulnerabilidades**

Utilizamos **Nmap** para escanear los puertos abiertos de la máquina víctima con el siguiente comando:

```bash
sudo nmap -p- -sCVS --min-rate=5000 -vvv -Pn -n -O 172.17.0.2
```

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

Esto nos indica que el puerto 22 (SSH) y el 80 (HTTP) están abiertos. Además también nos indica que el puerto 80 usa el dominio <http://404-not-found.hl/>, así que añadimos en nuestro archivo `/etc/hosts` el dominio para que apunte a la dirección `172.17.0.2`.

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

Ahora ingresamos la dirección <http://404-not-found.hl/> en el navegador y observamos lo siguiente:

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

Si le damos a participar nos redirige a <http://404-not-found.hl/participar.html>, pero no encontramos nada interesante ahí, por lo tanto, vamos a usar **gobuster** para enumerar subdominios ocultos con el siguiente comando:

```bash
gobuster vhost -u http://http://404-not-found.hl/participar.html -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -t 20 --append-domain | grep -e " Status: 200"
```

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

Esto implica que existe el subdominio `info.404-not-found.hl`, así que vamos a añadir el subdominio al archivo `/etc/hosts` para que apunte a la dirección IP 172.17.0.2.

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

Una vez hecho esto, ingresamos la ruta en nuestro navegador y contemplamos lo siguiente:

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

Si nos fijamos en el código fuente encontramos lo siguiente:

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

Esto nos indica que se está consultando a un servidor LDAP para la autentificación del login, lo que significa, que si está consulta se está haciendo de manera insegura, podremos explotar una inyección LDAP. La lógica la vulnerabilidad consiste en que la consulta se hace de la siguiente manera:

```plaintext
(&(uid=*)(userPassword=*))
```

Esto básicamente devolverá True en caso de que el uid, que corresponde con el usuario, y el userPassword, que corresponde con la contraseña del usuario. Entonces si nosotros ingresamos lo siguiente en el campo del usuario dividirá la consulta con un or `|`, y por lo tanto, al ser correcta una condición `(1=1)`, esto devolverá True, por lo que podremos hacer un bypass del login.

```plaintext
*)(1=1))(|
```

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

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

Esto nos indica el usuario `404-page` con contraseña `not-found-page-secret`. Así que accedemos con esas credenciales a la máquina víctima por el servicio SSH.

## **Escalada de privilegios**

Una vez que estamos dentro de la máquina víctima como el usuario `404-page`, ejecutamos el comando `sudo -l`, el cual nos indica que podemos ejecutar el script `/home/404-page/calculator.py` como el usuario `200-ok`.

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

Además encontramos la nota `/var/www/nota.txt`, que nos indica lo siguiente:

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

Esto nos indica que con el símbolo `!` podríamos ejecutar comandos como el usuario `200-ok`. Así que ejecutamos el script de la siguiente manera:

```bash
sudo -u 200-ok /home/404-page/calculator.py
```

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

Observamos que efectivamente podemos ejecutar comandos, así que escribimos `!bash` para obtener una shell como usuario `200-ok`.

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

Una vez somos el usuario `200-ok` encontramos la nota `/home/200-ok/boss.txt`, la cual contiene lo siguiente:

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

Esto nos podría estar indicando que `rooteable` es una posible contraseña del usuario `root`.

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