Nivel 0-7
Last updated
Last updated
Ingresa las credenciales para el Nivel 0:
Usuario: leviathan0
Contraseña: leviathan0
A partir de aquí, los niveles no proporcionan instrucciones ni detalles sobre qué hacer o cómo hacerlo. Por lo tanto, solo se verán soluciones.
Al ejecutar ls
, no se muestra ningún archivo ni directorio. Para visualizar archivos ocultos, usamos el comando ls -la
. Observamos la presencia del directorio .backup
y revisamos su contenido. Es probable que este directorio contenga información relevante sobre contraseñas, así que filtramos el contenido en busca de la palabra "password" utilizando grep
.
Ingresa las credenciales para el Nivel 1:
Usuario: leviathan1
Contraseña: 3QJ3TgzHDq
Después de ejecutar el comando ls
, encontramos un directorio llamado check
. Procedemos a ejecutar ltrace ./check
, que muestra las llamadas a librerías y las llamadas al sistema realizadas por el programa.
Al analizar la salida de ltrace
, observamos que el programa solicita una contraseña con el prompt "password: "
y compara la entrada con la cadena "sex"
. Por lo tanto, la contraseña para que nos proporcionen la contraseña del siguiente nivel es sex
.
Nota: Al realizar el análisis del código, notarás que hay varias palabras aleatorias incluidas intencionadamente para confundir. Estas palabras no son relevantes para la solución del desafío.
Ingresa las credenciales para el Nivel 2:
Usuario: leviathan2
Contraseña: NsN1HwFoyN
Al listar los archivos, encontramos un directorio llamado printfile
. Procedemos a ejecutar el comando ./printfile
.
Vamos a crear un directorio temporal y un nuevo archivo de texto que podamos usar para probar el programa con ltrace
.
A partir de la salida, podemos identificar una pequeña vulnerabilidad en la manera en que funciona este programa. Si observas detenidamente, notarás que se llaman las funciones access()
y /bin/cat
en el archivo de entrada. La función access()
verifica los permisos basándose en el ID de usuario real del proceso, en lugar del ID de usuario efectivo.
Nota: El ID de usuario real es el propietario del proceso (quién eres realmente), mientras que el ID de usuario efectivo es lo que el sistema operativo utiliza para decidir si tienes permiso para realizar ciertas acciones. Aunque hay algunas excepciones a esta regla.
Al revisar la salida de ls -la
, vemos que el archivo printfile
es propiedad de leviathan3
. Esto significa que access()
ejecutará el proceso con los privilegios de leviathan3
.
Además, en el código podemos ver que se utiliza /bin/cat
para mostrar el contenido del archivo. Mientras que access()
utiliza la ruta completa del archivo, /bin/cat
solo utiliza la primera parte del nombre del archivo (esto se debe a la forma en que están configuradas las comillas en el programa). Podemos intentar agregar un espacio en el nombre del archivo, y si nuestra suposición es correcta, /bin/cat
interpretará el nombre como dos archivos separados.
Como puedes observar, /bin/cat
interpreta "pass file.txt"
como dos archivos separados: "pass"
y "file.txt"
. ¡Podemos aprovechar esto! Vamos a crear un enlace simbólico para la parte "pass"
en "pass file.txt"
y lo vincularemos a /etc/leviathan_pass/leviathan3
.
Ingresa las credenciales para el Nivel 3:
Usuario: leviathan3
Contraseña: f0n8h2iWLP
Vemos que tenemos a nuestra disposición.
Como en el anterior nivel tenemos un ejecutable por lo que vamos a ejecutarlo a ver qué nos sale.
Paso lo mismo en el anterior nos requiere una contraseña por lo que ahora ejecutamos ltrace
para ver que librerías llama este programa.
Al revisar la salida de ltrace
, podemos ver que strcmp
se llama dos veces. Esto intenta ocultarnos la contraseña principal, pero centrémonos en la que compara nuestra entrada. Vemos que intenta comparar la entrada con "snlprintf"
; probemos usar esto como la contraseña.
Ingresa las credenciales para el Nivel 4:
Usuario: leviathan4
Contraseña: WG1egElCvO
Vemos que tenemos a nuestra disposición.
Tenemos un directorio .trash
por lo que accedemos a él para ver que contiene.
Es una salida en binario. Vamos a usar un conversor de binario a ASCII en línea. Yo utilicé esta página para hacer la conversión: CalculadoraConversor.
Ingresa las credenciales para el Nivel 5:
Usuario: leviathan5
Contraseña: 0dyxT7F4QD
Vemos que tenemos a nuestra disposición.
Como podemos ver en los niveles anteriores encontramos un ejecutable llamado leviathan5
.
Parece que el ejecutable está intentando acceder a un archivo que no existe. Vamos a ejecutar ltrace
para ver qué se está llamando.
Parece que el ejecutable está utilizando fopen
en /tmp/file.log
. Vamos a crear un enlace simbólico a /etc/leviathan_pass/leviathan6
y enlazarlo a /tmp/file.log
.
Ingresa las credenciales para el Nivel 6:
Usuario: leviathan6
Contraseña: szo7HDB88w
Vemos que tenemos a nuestra disposición.
Como podemos ver en los niveles anteriores encontramos un ejecutable llamado leviathan6
.
Este en particular nos pide ingresar un PIN de 4 dígitos. ¡Vamos a intentar hacer un ataque de fuerza bruta! Comenzaremos creando un directorio temporal y abriendo nano
para escribir un script en bash.
Tras esperar un tiempo nos aparece la shell
.
Ingresa las credenciales para el Nivel 7:
Usuario: leviathan7
Contraseña: qEs5Io5yM8
¡Hemos conquistado todos los niveles con éxito rotundo! 🚀💻