Skip to main content
CTF c0r0n4con Conference 2020

CTF c0r0n4con web – Pwny Bank

The latest launched application allows bank users to generate their passwords. It seems its administrator are too lazy to properly configure the password’s manager, will you be able to find out the hidden functionality?

Pwny Bank

Puntuación: 250

El enunciado de este reto indica lo siguiente:

The latest launched application allows bank users to generate their passwords. It seems its administrator are too lazy to properly configure the password’s manager, will you be able to find out the hidden functionality?

Mirrors:

http://142.93.97.61:8001

 

Al acceder al portal observamos la siguiente página:

 

Analizamos el código fuente del portal y obtenemos el siguiente comentario:

Donde nos indica que sólo el administrador puede controlar las contraseñas y se realiza mediante el método GET.

Revisamos las cookies dle portal y vemos la variable “user=pwnyBank”, y al cambiarla por admin vemos que uno de los mensajes de la web ha cambiado.

 

Revisamos a continuación el fichero robots.txt y observamos las siguientes entradas:

Por lo que probamos a acceder al fichero backup.txt el cual nos devuelve el siguiente texto:

Seguimos investigando y observamos la ruta /info donde existen dos ficheros admin.txt y pwnyBank.txt por lo que parece que el campo user de la cookie recoge el nombre del fichero y le concatena “.txt” por lo que podemos usar esto mismo para obtener el fichero visto anteriormente backup.txt.

Realizamos varias pruebas y obtenemos el fichero backup a partir de la cookie enviandola con el siguiente valor user=../../backup

 

Y obteniendo con ello el siguiente código:

Analizamos el código y parece que se trata de un fallo de unserialize ya que se le pasa directamente el valor del parámetro GET “data” por lo que se debía crear un nuevo objeto para que se ejecutase lo que nosotros necesitásemos en ese momento al entrar en la función __destruct().

Las condiciones de ejecución eran que el contenido de content fuese en base64 y que tuviese una longitud de 48 bytes. Así que creamos nuestro script en php:

En el contenido le metemos el siguiente código en base64 para ejecutar nuestra shell y añadimos espacios hasta llegar a los 48 bytes.

Y serializamos el mismo:

Ahora en nuestro caso, hemos hecho un script en python para automatizar la subida de nuestro payload:

 

A continuación ejecutamos nuestro script en python para ejecutar el comando “pwd”:

 

Y verificamos que funciona, procedemos entonces a listar el directorio raíz:

 

Ahora ya, nos queda obtener el contenido del fichero flag:

Y conseguimos nuestra ansiada flag:

 

Puedes ver el resto de writeups en este enlace.

 

Deja una respuesta

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