Skip to main content
CTF c0r0n4con Conference 2020

CTF c0r0n4con web – Mike’s Dungeon

A friend of mine called Mike has just learnt web development. It seems he has created a kind of dungeon, but he is too n00b for you not to steal his flag.

Mike’s Dungeon

Puntuación: 550

El enunciado de este reto indica lo siguiente:

A friend of mine called Mike has just learnt web development. It seems he has created a kind of dungeon, but he is too n00b for you not to steal his flag.

Mirrors:

http://142.93.97.61:8002

 

Al acceder al portal obtenemos la siguiente ventana:

CTF c0r0n4con web - Mike's Dungeon

 

Analizamos el código fuente de la aplicación y descubrimos el siguiente comentario:

Que nos da una pista para encontrar el fichero de texto mike.txt:

Observamos la parte final donde menciona el debug y lanzamos la petición con ?debug=1 para obtener el código fuente del fichero index.php

Viendo el código fuente anterior y los diferentes == de las condiciones vemos claramente que habrá que utilizar PHP Type Juggling para bypassear las comprobaciones.

Por lo que generamos nuestros datos con los datos obtenidos del anterior código:

En el anterior payload, damos a username el valor que sea, a password el valor sería 240610708 porque en md5 es 0e462097431906509019562988736854 y esto es igual en PHP == 0e0776 , en otras palabras necesitábamos un valor md5 que fuera 0e + números como se explica en el siguiente git o como podemos ver con el siguiente ejemplo:

Ahora que ya tenemos la primera de las solicitudes, si observamos el código:

Necesitamos explotar una condición de carrera y enviar dos solicitudes, la segunda antes de terminar la primera para poder entrar en manager.php.

Así que envíamos una petición GET solicitando la página /manager.php seguido de la petición POST que vimos anteriormente.

Si entramos dentro de los dos segundos obtendremos el acceso a manager.php y con ello el código en base64 del mismo.

CTF c0r0n4con web - Mike's Dungeon

Y a continuación tenemos el código del fichero manager.php

 

Ahora en esta segunda parte vamos a ver como podemos saltarnos el resto de comprobaciones. La primera de ellas:

Podemos pasarla fácilmente obteniendo el md5 de letmein, con el siguiente payload:

Continuamos y vemos un bloque interesante, el del campo “yourinput” donde la aplicación incluye en el campo info de la sesión el contenido de un fichero. Concretamente el fichero que se pasa como “user”:

Al utilizarse parse_url y una petición HTTP los campos serán user:pass@host:port, por lo que deberemos pasar el valor de creds.php en el campo user.

Como la aplicación busca y elimina las cadenas ph, ed y cr 300 veces:

Nos creamos nuestro payload con una simple línea en python para que al limpiarlo la aplicación nos quede el fichero creds.php

Y nuestro payload quedaría de la siguiente forma:

Enviaremos entonces nuestro payload por POST a manager.php y obtendremos otro base64 en la respuesta de index.php que sería el contenido del fichero creds.php.

CTF c0r0n4con web - Mike's Dungeon

 

Y si decodificamos el base64 obtenido, tenemos el código del fichero creds.php

Y con ello la flag

 

Puedes ver el resto de writeups en este enlace.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.