# Nivel 6-11

### NIVEL 6

Ingresamos las credenciales para el nivel 6.

* **Usuario:** `natas6`
* **Contraseña:** `0RoJwHdSKWFTYR5WuiAewauSuNaBXned`

Tras iniciar sesión, nos encontramos con la página de inicio del **Nivel 6**. El mensaje indica que hay que ingresar una clave secreta. Por lo que también indagaremos por el código fuente.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FuvECbwvH8sJKVrp2XTX5%2Fimage.png?alt=media&#x26;token=08814473-2552-4f16-8f7d-79fcb52730c7" alt=""><figcaption></figcaption></figure>

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FB84CIzITlboSTBGph3ug%2Fimage.png?alt=media&#x26;token=678027e1-6f54-4c3c-9bc4-6cbf4967db12" alt=""><figcaption></figcaption></figure>

Parece que el **PHP** está incluyendo un enlace a un archivo almacenado en la página web `/includes/secret.inc`. Vamos a añadir eso al final de nuestra **URL**, de la siguiente manera: `http://natas6.natas.labs.overthewire.org/includes/secret.inc`. Deberíamos llegar a una página en blanco, así que veamos el código fuente de la página.

&#x20;![](https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FPapsWWHstdtfQGJDpeer%2Fimage.png?alt=media\&token=afb52223-fbdb-4088-8e11-325b9736c16f)

Otro script **PHP**, con el código secreto que necesitamos. Volvamos a la página de inicio para introducirlo.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FhayZAfcxWxdR2aks8cpY%2Fimage.png?alt=media&#x26;token=6351739e-1d0b-4418-ad35-de417114a983" alt=""><figcaption></figcaption></figure>

### NIVEL 7

Ingresamos las credenciales para el nivel 7.

* **Usuario:** `natas7`
* **Contraseña:** `bmg8SvU1LizuWjx3y7xkNERkHxGre0GS`

Tras iniciar sesión, nos encontramos con la página de inicio del **Nivel 7**. Nos encontramos que hay dos apartados **Home** y **About** pero cuando se pulsa en ellos no se ve nada por lo que indagaremos en el código fuente.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FI65ADgDTTKeruItvtt2U%2FCaptura%20de%20pantalla%202024-08-18%20175542.png?alt=media&#x26;token=73f52b0b-ffb8-4040-a0c3-564be122d00b" alt=""><figcaption></figcaption></figure>

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FEPYGiYCYw5w8M5k7lxR3%2Fimage.png?alt=media&#x26;token=a98113a1-b368-4454-a5f2-7d389c004ef1" alt=""><figcaption></figcaption></figure>

El comentario en **HTML** sugiere que podemos obtener la contraseña desde el archivo `etc/natas_webpass/natas8`. Basándonos en esta pista, parece que estamos tratando con un Ataque de Traversal de Directorios.

Cuando hacemos clic en **Home**, la **URL** debería ser `http://natas7.natas.labs.overthewire.org/index.php?page=home`. Vamos a reemplazar "home" con `/etc/natas_webpass/natas8`. La **URL** final debería ser: `http://natas7.natas.labs.overthewire.org/index.php?page=/etc/natas_webpass/natas8`.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2F87G5oq2wse8RX6CRhNu4%2Fimage.png?alt=media&#x26;token=f41a9360-7547-481c-982c-ce06c458de6e" alt=""><figcaption></figcaption></figure>

### NIVEL 8

Ingresamos las credenciales para el nivel 8.

* **Usuario:** `natas8`
* **Contraseña:** `xcoXLmzMkoIP9D7hlgPlh9XD7OgLAe5Q`

Tras iniciar sesión, nos encontramos con la página de inicio del **Nivel 8**. El mensaje indica que hay que ingresar una clave secreta. Por lo que también indagaremos por el código fuente.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FDzrKVz4iGCaWNZEZs1fi%2FCaptura%20de%20pantalla%202024-08-18%20180218.png?alt=media&#x26;token=5c566e5a-8ae2-42bb-985a-5d59afa6acef" alt=""><figcaption></figcaption></figure>

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FjgYjXdOtH72vfZT0Eujd%2Fimage.png?alt=media&#x26;token=44d97edc-2736-4d6b-9dfd-88784677917a" alt=""><figcaption></figcaption></figure>

Parece que el código secreto que necesitamos está encriptado. Al revisar el código **PHP**, vemos que el **"secreto"** ingresado se convierte de binario a hexadecimal, se invierte y luego se codifica en **base64**.

Para obtener el **"secreto"**, debemos realizar el proceso inverso. Empecemos abriendo la consola e iniciando **PHP** con el comando `php -a`. Luego, descodificamos la cadena en **base64**, revertimos el contenido y convertimos el hexadecimal de nuevo a binario para obtener la clave secreta.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FRFH8EDjz5FQZgVMTlTYj%2Fimage.png?alt=media&#x26;token=c44000a0-5964-4362-a901-9ff685cd8c01" alt=""><figcaption></figcaption></figure>

Tras obtener el **"secreto"** desencriptado lo ingresamos en la página inicial del nivel.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FIaEHuzgPhqBWh8wiLMAh%2Fimage.png?alt=media&#x26;token=eb0e2f39-d81f-4fc0-8547-08d4b195bab1" alt=""><figcaption></figcaption></figure>

### NIVEL 9

Ingresamos las credenciales para el nivel 9.

* **Usuario:** `natas9`
* **Contraseña:** `ZE1ck82lmdGIoErlhQgWND6j2Wzz6b6t`

Tras iniciar sesión, nos encontramos con la página de inicio del **Nivel 9**. Nos aparece un buscador de palabras que tengamos en nuestra entrada por lo que miramos el código fuente para más información.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2F0OnljxESNwqX4640YsqT%2Fimage.png?alt=media&#x26;token=13aea8e7-9cdc-4950-92ca-dc52e4d00b26" alt=""><figcaption></figcaption></figure>

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FnF3oMC3X3V6HPKl4lsVh%2Fimage.png?alt=media&#x26;token=850a61aa-5bf1-416d-afc8-7b1b09bedc8d" alt=""><figcaption></figcaption></figure>

En el script **PHP**, la forma en que se utiliza la palabra **“key”** sugiere que podríamos insertar código arbitrario. A continuación, te explico cómo:

1.  **Ejemplo de Comando:** Si introducimos la palabra **“password”**, el comando `passthru` en el script **PHP** se ejecutará como:

    ```bash
    grep -i password dictionary.txt
    ```

    Dado que la clave se encapsula entre comillas y no hay filtrado de entrada, podemos insertar caracteres especiales.
2.  **Inyección de Comando:** Podemos aprovechar el separador de comandos `;` para ejecutar múltiples comandos en una sola línea. Además, podemos usar el símbolo `#` para comentar el resto de la línea.

    Por ejemplo, si introducimos el siguiente texto en el campo de entrada:

    ```bash
    ; cat /etc/natas_webpass/natas10 #
    ```

    El comando `passthru` se ejecutará de la siguiente manera:

    ```bash
    grep -i ; cat /etc/natas_webpass/natas10 #
    ```

    Aquí, el símbolo `#` comentará el resto del texto después de `cat /etc/natas_webpass/natas10`, eliminando el archivo `dictionary.txt` de la ejecución.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2F8PSm3G7AC2iBBsqvUWUD%2Fimage.png?alt=media&#x26;token=36539d01-d4a1-4631-90cc-cd8e0a91480a" alt=""><figcaption></figcaption></figure>

### NIVEL 10

Ingresamos las credenciales para el nivel 10.

* **Usuario:** `natas10`
* **Contraseña:** `t7I5VHvpa14sJTUGV0cbEsbYfFP2dmOu`

Tras iniciar sesión, nos encontramos con la página de inicio del **Nivel 10**. Nos aparece un buscador de palabras pero filtrando ciertos caracteres por razones de seguridad que tengamos en nuestra entrada por lo que miramos el código fuente para más información.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FgZ5cNWr72kop6NXxM0HW%2Fimage.png?alt=media&#x26;token=7b6731f5-a85c-4cb7-b94a-53737e3035d1" alt=""><figcaption></figcaption></figure>

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FAGnMVSRbRzRaBOKtC2gm%2Fimage.png?alt=media&#x26;token=d315ecf3-3f07-44c8-9f56-3fedf22381bf" alt=""><figcaption></figcaption></figure>

Parece que el script es el mismo que en el nivel 9, pero esta vez están filtrando los comandos `;` y `&`.

Sin embargo, aún no han corregido cómo el script maneja la entrada para **“key”**. Por lo tanto, podemos explotar esta vulnerabilidad de manera similar a como lo hicimos en el nivel 9, pero en lugar de usar comandos, usaremos expresiones regulares.

Para ello, podemos ingresar la siguiente entrada en el campo de consulta:

```bash
.* /etc/natas_webpass/natas11 #
```

#### Explicación:

* `.*`: Este patrón indica a `grep` que coincida con cualquier secuencia de caracteres, ignorando mayúsculas y minúsculas.
* `/etc/natas_webpass/natas11`: Este es el archivo que queremos leer.
* `#`: Este símbolo comenta el resto del comando, asegurando que `dictionary.txt` no se procese, evitando errores.

Así, el comando `passthru` se ejecutará como:

```bash
grep -i .* /etc/natas_webpass/natas11 #
```

Esto permite que `grep` lea el contenido de `/etc/natas_webpass/natas11` mientras ignora `dictionary.txt`.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FZGHoC9i4cLqzfM9Azm0N%2Fimage.png?alt=media&#x26;token=aef3a1a2-418c-421a-a971-f186197bdf02" alt=""><figcaption></figcaption></figure>

### NIVEL 11

Ingresamos las credenciales para el nivel 11.

* **Usuario:** `natas11`
* **Contraseña:** `UJdqkK1pTu6VLt9UHWAgRZz6sVUZ3lEk`

Tras iniciar sesión, nos encontramos con la página de inicio del **Nivel 11**. Al parecer se nos muestra un mensaje en la que las cookies andan encriptadas por lo que veremos el código fuente para mas información.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FusdkAJomExiHWaco5W6O%2Fimage.png?alt=media&#x26;token=b31b5da9-6737-43f2-bfe2-e7abfd29a2df" alt=""><figcaption></figcaption></figure>

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FtBJ7hrSKfMcvLWtJLSdc%2Fimage.png?alt=media&#x26;token=feb5e6b8-c2d8-437e-aa13-e7ef6f761c79" alt=""><figcaption></figcaption></figure>

Parece que las cookies están protegidas con cifrado **XOR**. Vamos a obtener la **cookie** cifrada con XOR que está utilizando el sitio. Iniciamos **Burp Suite**, intercepta el paquete y deberías obtener lo siguiente:

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FhRYtRQVFActdD7K06prA%2Fimage.png?alt=media&#x26;token=e3365392-0a30-4da3-a65c-d49c7123d1b3" alt=""><figcaption></figcaption></figure>

Si conoces cómo funciona un cifrado XOR, recordarás que se cumple la relación: A XOR B = C.

En este caso, sería: **Datos\_Originales XOR CLAVE = Datos\_Cifrados**.

Para obtener la clave, hacemos lo siguiente: Datos\_Originales XOR Datos\_Cifrados = CLAVE, dado que ya contamos con los Datos\_Originales y los Datos\_Cifrados.

Vamos a usar **PHP** y escribir el siguiente script para descifrar la clave.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FNzFwCBjWRimMxVF4jnYY%2Fimage.png?alt=media&#x26;token=df7631d8-fac0-44a3-b474-5da1024310f2" alt=""><figcaption></figcaption></figure>

El script anterior se ha diseñado utilizando la función `xor_encrypt()` del código original. Hemos configurado la cookie (después de decodificarla desde **base64**) como texto sin formato, y hemos usado como clave la versión codificada en **JSON** de la matriz predeterminada que ya conocemos.

Dado que estamos trabajando con dos valores ya conocidos, la salida de la función debe revelar la clave utilizada en el cifrado. Como se mencionó anteriormente, debido a que la clave es más corta que el texto sin formato, se repite. A partir de esto, podemos deducir que la clave es `eDWo`.

Al conocer la clave utilizada en este cifrado, podemos crear una nueva matriz, cifrarla con la misma clave y obtener un resultado que siga siendo válido. En este caso, nuestro objetivo es modificar la matriz original, cambiando el valor de `showpassword` a `yes`, luego cifrarla de la misma manera para generar una nueva cookie válida.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FEIN3st4tqNOo84xA0rnm%2Fimage.png?alt=media&#x26;token=1c49fb88-cc74-4f81-87c1-366dbdfe8462" alt=""><figcaption></figcaption></figure>

Esto generará la siguiente cadena: `HmYkBwozJw4WNyAAFyB1VUc9MhxHaHUNAic4Awo2dVVHZzEJAyIxCUc5`, que es la versión codificada del array modificado. El siguiente paso es configurar esta cadena como una nueva cookie.

Para hacerlo, accede al sitio web del desafío, abre la consola de herramientas para desarrolladores y escribe el siguiente comando:

```javascript
document.cookie = "data=HmYkBwozJw4WNyAAFyB1VUc9MhxHaHUNAic4Awo2dVVHZzEJAyIxCUc5";
```

Esto establecerá la nueva cookie, y al actualizar la página, deberías ver el resultado esperado.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FW8rGR698R2CRWX1cBXWh%2Fimage.png?alt=media&#x26;token=5723d99e-064d-4389-ae19-f6621a0a31ef" alt=""><figcaption></figcaption></figure>
