Nivel 6-11
Last updated
Last updated
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.
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.
Otro script PHP, con el código secreto que necesitamos. Volvamos a la página de inicio para introducirlo.
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.
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
.
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.
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.
Tras obtener el "secreto" desencriptado lo ingresamos en la página inicial del nivel.
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.
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:
Ejemplo de Comando: Si introducimos la palabra “password”, el comando passthru
en el script PHP se ejecutará como:
Dado que la clave se encapsula entre comillas y no hay filtrado de entrada, podemos insertar caracteres especiales.
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:
El comando passthru
se ejecutará de la siguiente manera:
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.
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.
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:
.*
: 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:
Esto permite que grep
lea el contenido de /etc/natas_webpass/natas11
mientras ignora dictionary.txt
.
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.
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:
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.
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.
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:
Esto establecerá la nueva cookie, y al actualizar la página, deberías ver el resultado esperado.