🌐Natas
Natas enseña los conceptos básicos de la seguridad web del lado del servidor.
DISCLAIMER: Esta página contiene spoilers sobre el juego y sus diferentes niveles. Como hackers éticos debéis intentar pensar "Out of the Box" y resolver los niveles con vuestros propios conocimientos y investigaciones.
Cada nivel de natas consta de su propio sitio web ubicado en http://natasX.natas.labs.overthewire.org, donde X es el número de nivel. No hay inicio de sesión SSH. Para acceder a un nivel, ingrese el nombre de usuario de ese nivel (por ejemplo, natas0 para el nivel 0) y su contraseña.
Cada nivel tiene acceso a la contraseña del siguiente nivel. Tu trabajo es obtener de alguna manera la siguiente contraseña y subir de nivel.
Todas las contraseñas también se almacenan en /etc/natas_webpass/. P.ej. la contraseña para natas5 se almacena en el archivo /etc/natas_webpass/natas5 y solo puede ser leída por natas4 y natas5.
Empieza aqui:
Username: natas0
Password: natas0
URL: http://natas0.natas.labs.overthewire.orgNatas 0

Click derecho > ver código fuente

Natas 1
Lo mismo que el nivel anterior

Pone que el click derecho está bloqueado pero no lo está xD

Natas 2




Natas 3


Inspeccionando el archivo robots.txt de la raiz obtenemos un directorio /s3cre3t


Natas 4

El mensaje indica que estás intentando acceder desde una URL no autorizada. Para superar este desafío necesitarás modificar la solicitud HTTP para que parezca que proviene de la URL autorizada. Puedes hacer esto manipulando la cabecera "Referer" de la solicitud.


Natas 5

Para resolver este reto, debemos activar el proxy en nuestro navegador para que las peticiones pasen por Burp Suite. Yo tengo habilitado el plugin FoxyProxy para que la conexión sea más facil e intuitiva.

Recargamos la página y se envia la petición a BurpSuite

Vemos el parámetro loggedin=0, lo mandamos al repeater y cambiamos el 0 por 1

Natas 6

En el código fuente nos encontramos con un script en php:
Encontramos el directorio /includes/secret.inc asi que vamos a acceder


Copiamos la cadena de texto y la enviamos como query desde el index:

Natas 7


En el código fuente encontramos una pista:

Si hacemos click en los enlaces del index vemos que añade parámetros a la URL


Natas 8

En el código fuente nos encontramos este script en php:
El código PHP proporcionado realiza una codificación del secreto mediante la función encodeSecret. La codificación implica tres pasos:
base64_encode: Codificación Base64 del secreto.strrev: Reversión de la cadena resultante.bin2hex: Conversión de la cadena binaria a hexadecimal. El valor codificado es comparado con $encodedSecret, y si coinciden, se imprime el mensaje "Access granted. The password for natas9 is ".
Para obtener el password del siguiente nivel, necesitas realizar la operación inversa. Aquí hay un ejemplo de cómo hacerlo en PHP:
Introducimos el decoded secret en el index y nos devuelve el password:

Natas 9

En el código fuente encontramos el siguiente script en php:
Al enviar una petición por el buscador vemos que añade parámetros a la URL:

Dado que el código utiliza passthru y la búsqueda se realiza mediante grep, podríamos intentar una inyección de comandos a través del valor de needle.

Natas 10

En el codigo fuente nos encontramos este script en php:
Dado que ciertos caracteres han sido filtrados y el script utiliza preg_match para verificar si hay caracteres ilegales, podríamos intentar eludir esta restricción.
Con esta query:
Podemos suponer que enviará el comando:
buscando tanto en “/etc/natas_webpass/natas11” como en “dictionary.txt” la letra a, lo que nos debería devolver el password de natas11

Natas 11

Al loguearnos nos dice que las cookies están protegidas con enciptación XOR. En el código fuente encontramos el siguiente script:
Este código PHP está cifrando y descifrando cookies usando XOR encryption. La función xor_encrypt realiza la operación XOR entre cada caracter del texto y la clave. A continuación, te explico cómo funciona el código:
Para obtener la cookie data vamos al inspector > Stogare y copiamos el valor "Value"

Reutilizando la función xor_encrypt del código original, podemos pasarle la cookie data e indicando que la variable $key será $defaultdata (codificada en json):
El resultado de ejecutar este código, nos devolverá la clave para obtener nuestra contraseña:
Vemos al repetición del patrón KNHL
Ahora debemos fijarnos que para que se muestre la clave, la opción showpassword debe ser igual a yes.
Igual que antes, reutilizando la función xor_encrypt ahora le asignamos a la variable $key el valor de la clave obtenida anteriormente.
Lo enviamos por curl como una nueva cookie:
También se puede editar la cookie desde el navegador y actualizar la página:

Natas 12

En el codigo fuente nos encontramos este código en php:
El script le da un nombre random a los ficheros que se suben, y lo limita a 1kb de peso.
Vamos a crear un archivo exploit.php con el siguiente código, esto ejecutará automáticamente lo que le indiquemos, en este caso el password de natas13:
Lo enviamos por curl:
Accedemos al directorio /upload/j4npq11ths.php y obtenemos la contraseña:

Natas 13

En el codigo fuente nos encontramos con este codigo en php:
Este código PHP está diseñado para manejar la subida de archivos al servidor. Aquí hay una descripción de las funciones y la lógica del código:
genRandomString: Genera una cadena aleatoria de longitud 10 compuesta por caracteres alfanuméricos (0-9, a-z).makeRandomPath: Crea una ruta de archivo aleatoria en el directorio "upload" utilizando la función genRandomString y la extensión proporcionada como argumento. Asegura que el archivo no exista previamente en ese directorio.makeRandomPathFromFilename: Toma un nombre de archivo como argumento, extrae la extensión usando pathinfo, y luego llama a makeRandomPath para generar una ruta de archivo aleatoria.El código verifica si el formulario se ha enviado (array_key_exists("filename", $_POST)). Si es así, procede a procesar el archivo.
Comprueba si el tamaño del archivo supera el límite de
1000 bytes(filesize($_FILES['uploadedfile']['tmp_name']) > 1000). Si es así, imprime un mensaje indicando que el archivo es demasiado grande.Utiliza
exif_imagetypepara verificar si el archivo es una imagen. Si no es una imagen válida, imprime un mensaje indicando que el archivo no es una imagen.Si pasa todas las verificaciones, mueve el archivo temporalmente cargado a la ruta generada aleatoriamente y muestra un mensaje indicando que el archivo se ha subido correctamente.
Al igual que en el reto anterior, podemos crear el fichero natas13.jpg con el siguiente código para que se muestre el contenido del fichero /etc/natas_webpass/natas14, pero esta vez debemos utilizar una extensión .jpg de imagen.
Pero si intentamos subir este fichero va a detectar que no es una imagen, ya que no sólo se comprueba la extensión del fichero, sino que comprueba que contenga una firma de tipo JPG.
Esto lo podemos hacer con el editor hexeditor:
Primero debemos insertar null bytes, esto lo podemos hacer presionando 4 veces Ctrl + A. Luego podemos sustituir estos null bytes por los valores FF D8 FF DB (por ejemplo), y presionamos Ctrl + X para guardar y salir.

Antes de darle a upload cambiamos la extensión del archivo a php desde el inspector:

Le damos a upload y nos crea el directorio correctamente, con el archivo con extensión .php


Natas 14

En el condigo fuente nos encontramos este script en php:



Natas 15

En el codigo fuente nos encontramos este script en php:
Intentando varias inyeccions SQL ninguna resultó con éxito. Buscando por internet encontré este script, hecho a medida para hacer bruteforce de este nivel:
Natas 16

En el codigo fuente encontramos este código en php:
Si analizamos el código, observamos que se han definido una serie de caracteres que no podrán ser introducidos. También podemos observar que se realiza una búsqueda en el fichero dictionary.txt, esta búsqueda se realiza utilizando la función passthru de PHP. Por último, la URL deberá de contener la clave needle.
La forma de realizar un ataque a este código, es realizar un ataque a ciegas por inyección SQL, en inglés, Blind SQL injection, como hicimos en el ejemplo anterior.
Para que eso funcione, necesitamos encontrar una manera de responder a la pregunta ¿tiene la contraseña, almacenada en /etc/natas_webpass/natas17, la letra a? .
Una forma es el hecho de que muestra datos si existe una subcadena, de lo contrario devuelve un contenido vacío.
Para ello, el equipo de Init0 (ciberseguridad) ha desarrollado el siguiente script en PHP: https://github.com/oddworldng/natas16-php-overthewire
Natas 17

En el codigo fuente nos encontramos este script:
Observamos que la tabla
userscontieneusernameypasswordNo muestra ninguna salida a nuestra petición
Natas 18

Cuando intentamos loguernos nos da este error:

En el codigo fuente nos encontramos este script:
Observamos que nos signa un PHPSESSID, y que si coincide con el SSID de admin nos devuelve la contraseña, por lo que crearemos un script en python para automatizarlo:
Natas 19

Nos dice que es similar al nivel anterior pero que no utiliza IDs secuenciales

El nuevo formato de PHPSESSID es "3539362d61646d696e" y parece relacionarse con "596-admin", podríamos modificar el script para generar PHPSESSIDs en ese formato específico:
Natas 20

En el codigo fuente nos encontramos con un script en php bastante extenso, en el que vemos la siguiente función:
El PHPSESSID es alfanumérico en este nivel. También observamos lo siguiente:
Entonces, si podemos escribir "admin 1" en el archivo de sesiones, deberíamos poder iniciar sesión como administrador. Intentemos eso con un script a medida:
Natas 21

En el codigo fuente hay el siguiente script en php:
La web dice que se encuentra realojada en un subdominio experimenter. Al ir a la web nos pide credenciales, introducimos las del nivel actual y nos logueamos con éxito:


En esta web podemos interactuar con el CSS directamente desde el frontal. En el codigo fuente nos encontramos este script en php:


Última actualización
¿Te fue útil?