Trial by Fire - Very Easy
Last updated
Last updated
Ya empiezan los challenges de caja blanca, así que descargamos el zip y nos ponemos a ver el código.
Podemos ver que es una aplicación hecha en flask, revisamos el archivo routes.py
que contiene la lógica principal del código con todos los endpoints, revisando el código vemos que el endpoint /begin
nos permite registrar el nombre de un warrior y meterlo en la cookie sesión:
Mirando más endpoints vemos /battle-report
el cual al hacerle una solicitud post carga una, template sobre el reporte de la batalla, esto nos importa porque si nos fijamos carga el nombre del warrion que pusimos de la cookie y luego lo carga él tamplate, lo cual provoca un SSTI al poder controlar la template:
Con un payload de RCE para leer la flag deberíamos de poder ver la flag la cual está en /app/flag.txt
Así que vamos a empezar la explotación, la aplicación no deja poner más de ciertos caracteres en el input del nombre del warrior así que para poder pegar todo el payload vamos a interceptar la request con burp y meter el payload:
Una vez ya hemos registrado el warrior nos saldrá un menú donde podemos dar a diversos botones para realizar la batalla, podríamos dar a los botones hasta que el warrior se quedara sin vida, pero es mucho más rápido realizar la solicitud post directamente al endpoint deseado, navegando a el y cambiando el metodo de la request con el menu del clic derecho:
Vemos que se ejecutó el cat y nos devuelve la flag.