Hack The Boo 2022 - Spookifier

Descripción


There’s a new trend of an application that generates a spooky name for you. Users of that application later discovered that their real names were also magically changed, causing havoc in their life. Could you help bring down this application?

Solución


El segundo reto web del CTF nos presenta un campo input y un botón.

Podemos introducir texto.

Al presionar el botón, la aplicación nos responde con el mismo texto pero con la fuente cambiada.

Por suerte tenemos el código fuente para ayudarnos. Empezando con el archivo Dockerfile notamos que la flag está ubicada en /flag.txt, esta información nos servirá más adelante.

Leyendo los archivos del reto vemos un posible SSTI en la función generate_render().

No es necesario hacer pruebas para detectar el motor de templates porque tenemos el código fuente, en este caso se está usando Mako.

Buscando maneras de explotar un SSTI con Mako nos encontramos con PayloadAllTheThings Link de los payloads, copiamos el primer payload que nos muestra PaloadAllTheThings y lo pegamos en el input de la página.

${self.module.cache.util.os.system("id")}

Notamos que las letras de nuestro payload cambian de fuente en las primeras 3 respuestas, pero en la última nuestro payload se ejecuta y nos devuelve un 0 como respuesta.

Esta ocurre porque cuando enviamos nuestra cadena de texto, las primeras 3 veces cada letra cambia de fuente por separado y al momento de juntarse y renderizarse nuestro payload ya no tiene sentido, esto hace que ya no sea “una inyección de código” válida. Lo que pasa en la cuarta respuesta es que las letras no cambian de fuente, nuestro payload final no tiene problemas al renderizarse y así explotamos un SSTI.

Cambiamos el comando que utilizamos por uno que nos sirva para visualizar la flag.

${self.module.cache.util.os.system("cat /flag.txt")}

Pero nos devuelve un 0, imagino que este número es el código de salida del comando.

Para estar seguro escribiremos un comando que no existe y esperamos que el código de salida sea un númera más alto que 0.

${self.module.cache.util.os.system("abcd")}

Y confirmamos, esto solo nos devuelve el código de salida.

En la página de HackTricks existe una gran cantidad de payloads que pueden servir para explotar este SSTI, yo voy a probar este que simplemente abre un archivo y lo lee, pero vamos a modificarlo para que nos muestre la flag. Link de la página de HackTricks.

open("/flag.txt").read()

Nuestro payload se ejecuta correctamente y obtenemos la flag.

Flag


HTB{t3mpl4t3_1nj3ct10n_1s_$p00ky!!}

Powered by Soopr   •  Theme  Moonwalk