sábado, 17 de septiembre de 2011

Writeup level1 del wargame de la NoCon Name 2011

Nos logueamos como level0 y veremos que tenemos en el home, con los típicos permisos de wargame, el binario lectura_informes y (suponemos) su código fuente escrito en C. Lo suyo sería ejecutarlo y ver un poco como se comporta, nosotros hemos ido directamente al fuente.

No hace falta ni comprenderlo entero, aunque tampoco es que sea muy complejo. Podemos apreciar que lo que se hace es imprimir todos los bytes de un fichero compuesto por "/home/level0/informes/<codigo que nos pedirá y le pasaremos>".

No hace falta programar exploit de ningún tipo, podemos simplemente hacer lo siguiente:

$ ./lectura_informes
Introduce el codigo del informe que quieres visualizar:
../password.txt
1k8{[1~dF73~)6

Y ya tenemos la password de level1. Lo que esta ocurriendo aquí es que en el programa, a la hora de construir la ruta al fichero que se leerá no se está comprobando si el código pasado tiene referencias a otros niveles, por lo tanto hemos construido "/home/level0/informes/../password.txt", el "../" nos sacará de la carpeta "informes/" con lo cual nos quedaremos en "/home/level0/" y en ese nivel si existe el fichero password.txt. Además el programa lo puede leer porque tiene EUID de level1 debido a que su dueño es level1 y tiene suid activo.

Puedes bajarte el pdf aquí.

No hay comentarios:

Publicar un comentario