jueves, 18 de diciembre de 2014

Leviathan Level 6 → Level 7


Vamos a por el último nivel de este WarGame y para ello hacemos una conexión SSH a:

- Host: leviathan.labs.overthewire.org 
- User: leviathan6
- Pass: UgaoFee4li


En este último nivel seguimos teniendo la misma información que la del nivel anterior, nada de nada.

Para empezar, vamos a ver como se comporta el ejecutable:



Está claro que el objetivo es buscar el 'digit code' que piden y para ello usaremos gdb para hacerle ingeniería inversa al binario e intentar obtener el código:



Básicamente se puede apreciar como lo que se hace es pasar a entero el código argumentado para después compararlo con el contenido de pila [ESP+0x1C] que es en donde está el código buscado y que en este caso es 7123.

Vamos a comprobar si estamos en lo cierto:










Perfecto! La password es: ahy7MaeBo9

Aunque ya no es necesario, voy a poner aquí la captura de los diagramas de bloques de este nivel, sobre todo porque conceptualmente es infinitamente mejor que el desensamblado de gdb: 





¡Otro WarGame terminado! Muy sencillo pero ideal para ir adquiriendo buenas costumbres.

No obstante, antes de terminar la entrada, veamos si con esta nueva credencial podemos hacer una conexión a leviathan7:



Pues parece que sí, aunque lamentablemente ya es tarde para obedecer ;)

Ahora sí que sí ... ¡Hasta el próximo WarGame!


Leviathan Level 5 → Level 6


Definitivamente, el grueso de estos niveles está en el uso y abuso del bit suid.

Como de costumbre, los datos de conexión son:

- Host: leviathan.labs.overthewire.org 
- User: leviathan5
- Pass: Tith4cokei

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

En este caso, tenemos un binario llamado levithan5 con el bit suid activo para leviathan6. Lo que éste hace a groso modo, es leer el contenido de un fichero /tmp/file.log, imprimir su contenido por pantalla y borrarlo después.

En la siguiente captura, se puede apreciar su comportamiento:




Aquí está claro que lo que hay que hacer es que file.log sea un enlace simbólico a /etc/levithan_pass/leviathan6 puesto que el binario tiene los permisos necesarios para leer su contenido:



Esto todo por el momento. ¡Hasta el próximo nivel!




miércoles, 17 de diciembre de 2014

Bandit Level 16 → Level 17



Continuamos con un nuevo nivel, el cual promete y mucho.


Como siempre, los datos de conexión son:

- Host: bandit.labs.overthewire.org 
- User: bandit16
- Pass: cluFn7wTiGryunymYOu4RcffSxQluehd

Los objetivos son claros:


Según la información que nos dan, este nivel es muy similar al anterior con la diferencias de que ahora nos dan un rango de puertos [31000, 32000]. Además nos dictaminan los pasos a seguir.

Por tanto, comenzamos por escanear el rango de puertos para determinar cuales de ellos está activos haciendo uso del comando 'nmap':


Observamos que existen cinco puertos con servicios habilitados, así que el siguiente paso será determinar cual de ellos usa SSL:



Ya sabemos que los puertos 31518 y 31790 utilizan SSL, Por prueba y error (solo son dos) determinamos cual de ellos y le enviamos la password actual:



Es fácil darse cuenta que lo que nos han dado es la clave privada con la que hacer una conexión SSH a bandit17, por tanto, la guardamos en un fichero para darle persistencia y así poder usarla posteriormente:



Ahora establecemos la conexión SSH:



Y obtenemos un error más que evidente. Los permisos que le dimos al fichero que almacena la clave son demasiado poco restrictivos, por tanto, modificamos los permisos y repetimos:



Ahora sí. Ya solo nos queda obtener la password:



Parece que nivel a nivel se va aumentando la motivación de estos y se van utilizando nuevas herramientas muy usadas en entornos reales.

Esto es todos por ahora. ¡Hasta el próximo nivel!



Leviathan Level 4 → Level 5


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

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

- Host: leviathan.labs.overthewire.org 
- User: leviathan4
- Pass: vuH0coox6m

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

Esta vez tenemos esto:



Muy sencillo este nivel. A simple vista se ve que nos estan dado el valor ASCII de cada letra en binario. Por tanto, hacemos la conversión y obtenemos la password:

01010100 = 0x54 = T
01101001 = 0x69 = i 
01110100 = 0x74 = t
01101000 = 0x68 = h
00110100 = 0x34 = 4
01100011 = 0x63 = c
01101111 = 0x6F = o
01101011 = 0x6B = k
01100101 = 0x65 = e
01101001 = 0x69 = i

00001010 = 0x0A = \n

El último carácter no hay que tenerlo en cuenta pues es el de 'nueva línea'.

¡Nos vemos en la próxima entrada!



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!