miércoles, 17 de diciembre de 2014

Leviathan Level 3 → Level 4

Parece que este WarGame va de bits suid. Vamos a ver que nos tiene preparado este nive.

Como ya viene siendo habitual, los datos de conexión SSH son:

- Host: leviathan.labs.overthewire.org 
- User: leviathan3
- Pass: Ahdiemoo1j

Y la misma información que la del nivel anterior nada de nada.

Esta vez el fichero es este:



Ahora le hacemos un ltrace a ver que se cuece:



No nos dice demasiado. Nos pide un password y como no ha sido correcto nos muestra un mensaje de error.

Analicemos más en profundidad su diagrama de bloques:


Nos pide el password, y después invoca a la función do_stuff, la cual es:


De ella podemos asegurar que si el password es correcto, nos dará un shell con permisos elevados a leviathan3, en caso contrario mostrará un error como se ha visto anteriormente.

La comprobación del password se hace a través de la instrucción repe cmpsb, es decir byte a byte sobre los registros ESI, EDI y vemos rápidamente que la cadena que contiene el registro EDI es 'snlprintf\n'. Pero si nos fiamos en la captura del ltrace, el carácter de control '\n' lo añade la función _fgets.

Vamos a comprobarlo:


et voilà!

Ahora vamos a repetir el proceso, debido a que en la conexión remota no disponemos de IDA Pro para verlo tan eficientemente, pero si podremos llegar al mismo sitio usando gdb.

Cargamos el binario en el depurador:



Nos informamos de sobre que funciones tiene:


Y por último, desensamblamos la función do_stuff y mostramos el contenido que tendrá el registro EDI:



Y ahora es cuando viene lo mejor. Con un simple comando ¡podríamos habernos evitado todo esto! Pero los que me conocen saben que me gusta ir a las hojas para ver el bosque:



Esto es todo por ahora. ¡Hasta pronto!



No hay comentarios:

Publicar un comentario