miércoles, 17 de diciembre de 2014

Leviathan Level 2 → Level 3


Tengo que reconocer que aunque estos niveles son beginners, este en concreto me ha costado lo suyo hasta que vi como resolverlo.

Comenzamos pues y para ello, los datos de conexión son:
- Host: leviathan.labs.overthewire.org 
- User: leviathan2
- Pass: ougahZi8Ta

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

Nos encontramos con otro nivel en donde nos ofrecen un binario con el bit suid activado con permisos de propietario leviathan3.



Si nos fijamos un poco, lo que este binario hace es recibir el nombre de un fichero y hacerle un cat de su contenido. La primera comprobación que se hace es que se tengan permisos de lectura sobre el fichero argumentado y la segunda se ejecuta un comando cat sobre es fichero pero aquí está lo interesante, con elevación de permisos, debido al bit suid.

Pasamos un comando ltrace al binario, argumentándolo con cualquier fichero que tengamos permisos de lectura, para comprobar las suposiciones anteriores:




Con todo ello, estaría bien poder pasar como argumento el fichero que contiene la password buscada en /etc/leviathan_pass/leviathan3, sin embargo esto no es posible puesto que no tenemos permiso de lectura. 

Lo primero que uno piensa es que se podría hacer un enlace simbólico al fichero, pero seguiríamos sin tener permisos, por tanto, toca darle un poco más a la cabeza y entender que el foco de este retos está en esta función:

snprintf("/bin/cat /etc/leviathan_pass/lev"..., 
         511, 
         "/bin/cat %s", 
         "/etc/leviathan_pass/leviathan2")


especialmente en la parte que está agrandada y resaltada en negrita.

Haciendo una búsqueda en Google de 'problemas que existan con el carácter de control %s' pronto descubriremos que los espacios no sientan demasiado bien. hagamos una prueba:




Como se puede observar se gestiona bien el texto hasta que se encuentra un espacio, por tanto, para poder resolver este nivel

necesitamos crear dos ficheros, uno que será el enlace simbólico mencionado anteriormente y otro con el mismo nombre que el enlace, pero añadiéndole algún espacio. De esta manera, se pasará la primera comprobación que se hace referente a tener permisos de lectura, pues la función _access no formatea el nombre del fichero, después la función _snprintf formateará el nombre del fichero al nombre del enlace, pues se quedará con el texto que hay justo antes del primer espacio. De esta manera, al llegar al cat, este nos mostrará la password.

Veamos este proceso en la próxima captura: 





Espero que se entienda bien la idea. ¡Hasta el próximo nivel!


martes, 16 de diciembre de 2014

Leviathan Level 1 → Level 2


Seguimos con el segundo nivel.

En este caso, los datos de la conexión SSH son:

- Host: leviathan.labs.overthewire.org 
- User: leviathan1
- Pass: rioGegei8m

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

Aquí lo que nos ofrecen es un binario con el bit suid activo con permisos de propietario leviathan2.

Este binario nos pedirá una password, la cual si es correcta nos entregará una shell con permisos de leviathan2, como ya hemos apuntado antes. Todo esto podemos apreciarlo en la siguiente captura:



Una buena manera de saber cual es la password correcta es pasar la ejecución del binario por el comando 'ltrace'. De esta manera podremos ver a que funciones invoca y con que argumentos:



Donde podemos descubrir que está comparando la cadena 'amn' con 'sex' que es la password buscada:



Como curiosidad, diré que si nos fijamos en la incialización que se hace después del prólogo:

.text:08048542     mov     dword ptr [esp+18h], 786573h
.text:0804854A     mov     dword ptr [esp+25h], 72636573h
.text:08048552     mov     word  ptr [esp+29h], 7465h
.text:08048559     mov     byte  ptr [esp+2Bh], 0
.text:0804855E     mov     dword ptr [esp+1Ch], 646F67h
.text:08048566     mov     dword ptr [esp+20h], 65766F6Ch
.text:0804856E     mov     byte  ptr [esp+24h], 0

descubriremos que hay un mensaje, 'love god secret sex' y que no es otra cosa que las cuatro password más usadas, las cuales estoy seguro que han sido sacadas de la mejor película de la historia:




Bueno, pues con esto terminamos la entrada. ¡Hasta pronto!



Leviathan Level 0 → Level 1


Comenzamos con otro WarGame perteneciente a OverTheWire llamado Leviathan. Nos centraremos en el primer nivel de los ocho que consta.

Los datos de conexión SSH son:
- Host: leviathan.labs.overthewire.org 
- User: leviathan0
- Pass: leviathan0

Y la poca información que nos dan es:


Este reto, por ser el primero es bastante sencillo. Tratan de darnos un fichero .html, con infinidad de líneas de texto. Pero basta con filtrar la salida con el patrón de búsqueda como 'password' o 'flag' o algo similar:



En donde se lee 'the password for leviathan1 is rioGegei8m'

Esto es todo por ahora. ¡Hasta la próxima!



viernes, 12 de diciembre de 2014

Bandit Level 15 --> Level 16


Este  nivel que nos ofrece Bandit, sin duda marca una sutil diferencia con el resto y es que para poder resolverlo, necesitamos leer bien las pistas que nos dan.

Como siempre, los datos de conexión son:
- Host: bandit.labs.overthewire.org 
- User: bandit15
- Pass: BfMYroe26WYalil77FoDi9qh59eK5xNr

Y la información ofrecida es:




Este nivel, es similar al anterior, con la diferencia de que ahora nos piden que el envío de la password sea cifrada mediante SSL.

Para ello, usaremos los comandos openssl y s_client, el cual nos permite conectarnos a un host usando SSL/TSL:




Como se puede observar en la imagen anterior, parece que todo es correcto, sin embargo no se ve la flag por ningún lado. No obstante, las dos últimas líneas indican que la respuesta de la extensión Heartbeating fue exitosa y es aquí donde hay que volver a leer minuciosamente la pista (Helpful note) que nos daban al principio y que no es otra que la de añadir la opción -quiet para inhabilitar la impresión de información de sesión y de certificado:



Esto es todo por ahora. ¡Nos vemos en el próxmo!



Bandit Level 14 --> Level 15



Volvemos a la carga. 

Como siempre, los datos de la conexión SSH son:
- Host: bandit.labs.overthewire.org 
- User: bandit14
- Pass: 4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e

Y la información ofrecida es:


Aquí se pide que enviemos la password con la que se ha hecho la conexión SSH al puerto 30000, en donde existirá un servicio que al verificar la password nos envía la flag.

Sin duda, el comando estrella es 'nc', el cual permite leer y escribir datos a través de una conexión de red:


Otra manera de hacer lo mismo, pero más pro:



¡Hasta la próxima!