Leviathan - [OverTheWire]

Cover Image for Leviathan - [OverTheWire]
Marmeus
Marmeus

Introducción

El wargame Leviathan consiste en diferentes retos, cada uno compuesto por un archivo binario, el cual se tendrá que analaizar para saber como ejecutarlo y obtener la contraseña del siguiente nivel. Como siempre para poder acceder a estos binarios, se tiene que realizar mediante SSH siendo el host leviathan.labs.overthewire.org, el puerto 2223 y usuario y contraseña del nivel 0 leviathan0.

Level -1

Solución:

ssh leviathan0@leviathan.labs.overthewire.org -p 2223

Level 0

A partir de aquí ninguno de los niveles te explican nada de lo que tienes que hacer, ni de como lo tienes que hacer. Por eso solo veréis soluciones.

Solución:

Dentro de la carpeta “.backup” hay un archivo “bookmarks.html” que posiblemente tenga algo relacionado con contraseñas, “password” en ingles. Por lo que uso grep para buscar cualquier cosa que empiece por “pass”.

Level 1

Ltrace muestra las llamadas a librerías y también las llamadas al sistema. Finalmente, Como se puede ver en la imagen de arriba el programte pregunta por una “password: “ y compara la string introducida con la palabra “sex”. Ergo, “sex” es la contraseña.

Nota: Si hacéis reversing del código podéis ver que hay varias palabras aleatorias, puestas adrede para marear.

Level 2

El programa muestra por pantalla el archivo introducido como parámetro si y solo si, el archivo existe y el usuario, en nuestro caso “leviathan2” tiene permiso para leer. Todo esto se puede ver en las imagenes de abajo.

Sin embargo, como el comando a ejecutar es “/bin/bash cat <Introducido como parámetro> ”, podemos crear un archivo cuyo nombre tenga un “;” para escapar el “;” del nombre y así finalizar la ejecución del comando cat y que ejecute el comando que queramos. Se ha elegido “sh”.

Level 3

Como en el nivel 1 aquí pasa lo mismo, se esta comprobando lo que has puesto en “Enter the password” con la string “snlprintf”.

Level 4

Como se puede ver en la imagen anterior en la carpeta “.trash” hay un ejecutable llamado “bin” que muestra por pantalla un conjunto de 0s y 1s.

Con la librería “binascii” de python se puede sacar la string correspondiente al binario.

Level 5

El ejecutable lee un archivo llamado file.log.

Como el archivo no existe, podemos crear un enlace simbólico llamado file.log que apunte a “/etc/leviathan_pass/leviathan6”

Level 6

El programa ./leviathan6 ejecuta una shell como leviathan7 solamente si adivinas las contraseña. Sin embargo, “ltrace” no nos vale para sacar la contraseña.

Por lo tanto hay dos soluciones de resolver este reto. La primera y más fácil, es hacer fuerza bruta haciendo un bucle for en bash que vaya ejecutando el programa con todas las combinaciones posibles.

for x in {0000..9999}; do echo $x; do echo $x;./leviathan6 $x; done

La segunda solución es usar GDB para encontrar el valor de la clave.

Al comenzar en el programa se guarda en el stack una variable de 4 dígitos. Por lo que solo hay que buscar un número cuya longitud sea de 4 dígitos.

Level 7

Contraseñas

0) leviathan0  
1) rioGegei8m  
2) ougahZi8Ta  
3) Ahdiemoo1j  
4) vuH0coox6m  
5) Tith4cokei  
6) UgaoFee4li  
7) ahy7MaeBo9