Este fin de semana fue el Google CTF 2017 donde Shellwarp nos clasificamos en un modesto 296º puesto jajaja Y es que el CTF de google no es ninguna broma, al menos puedo decir que este año hemos resuelto una de las pruebas cuyo writeup os traigo hoy.
Este era el enunciado:
Can you read my mind?
Challenge running at https://mindreader.web.ctfcompetition.com/
Pues vaya, no nos dice mucho. Veamos la web:
Mmm, pues no ha mejorado mucho la cosa, veamos el source:
Pues vaya por dios, muchas pistas no nos han dado. Veamos, tenemos un form que nos pregunta que queremos leer, probemos a meter algo aleatorio:
Archivo no encontrado, ¿sera un LFI? Probamos el típico /etc/passwd:
¡Bien! ¿Pero donde demonios estará la flag? Después de probar todos los archivos que se nos ocurren vemos que es un Debian 8 pero no podemos ver ni los logs ni los archivos de configuración, el .bashrc de root no nos dice nada …. Probamos a abrir /proc/version para ver que nos dice y:
Por fin algo distinto, parece que proc no nos permite leerlo ¿nos hará falta para encontrar la flag?
Entonces un compañero me comenta que las pruebas de web que ha mirado estaban hechas en python, así que empezamos a probar y nos encontramos con el archivo main.py:
Aquí había cambiado a curl para poder ver los archivos bien ya que en chrome los saltos de linea no aparecían.
El código nos dice que la flag está oculta en una variable de entorno llamada FLAG y que hay un filtro para que no podamos acceder a determinados sitios, entre ellos proc, el cual nos ayudaría a leer las variables de entorno.
Pero ¿hay otra manera de llegar a proc? En /dev existe un symlink a /proc/self/fd vamos a probar bajando un nivel y pidiendo environ que nos daría las variables de entorno:
¡Et voila! Ahí vemos las variables de entorno y con ella la flag:
CTF{ee02d9243ed6dfcf83b8d520af8502e1}
Decir que aquí pueda parecer que lo sacamos super fácil pero fueron horas de prueba y error, intentar otras pruebas, etc.
Espero os haya gustado y como siempre, gracias por vuestra visita.
Saludos!