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!
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