Krypton
Last updated
Last updated
¡Bienvenido a Krypton! El primer nivel es fácil. La siguiente cadena codifica la contraseña usando Base64:
S1JZUFRPTklTR1JFQVQ=
Utiliza esta contraseña para iniciar sesión en krypton.labs.overthewire.org
con el nombre de usuario krypton1
usando SSH en el puerto 2231. Puedes encontrar los archivos para otros niveles en /krypton/
.
Ingresa las credenciales para el Nivel 1:
Usuario: krypton1
Contraseña: KRYPTONISGREAT
La contraseña para el nivel 2 está en el archivo krypton2
. Está encriptada usando una rotación simple y también en un formato de cifrado no estándar. Cuando se utilizan caracteres alfabéticos para el texto cifrado, es común agrupar las letras en bloques de 5 letras, independientemente de los límites de las palabras. Esto ayuda a ocultar patrones. Este archivo ha conservado los límites de las palabras del texto plano y los ha trasladado al texto cifrado.
Para descifrar el texto cifrado en ROT13 usando el archivo krypton2
, puedes usar el siguiente comando:
Ingresa las credenciales para el Nivel 2:
Usuario: krypton2
Contraseña: ROTTEN
Primero, necesitamos crear un directorio temporal para nuestro trabajo. Puedes hacerlo con el siguiente comando:
Esto te proporcionará una ruta que se verá algo así como:
GHN79NW8Cy
es un nombre aleatorio y será diferente para ti. Utiliza esta ruta para tus archivos temporales. Cambia al directorio creado con:
Necesitamos crear un enlace simbólico para el archivo keyfile.dat
, porque el binario encrypt
busca el archivo de clave en el directorio actual. Ejecuta el siguiente comando:
Luego, usa ls
para verificar que el enlace simbólico se ha creado correctamente en tu directorio temporal.
Asegúrate de tener los permisos necesarios en el directorio actual ejecutando:
Esto garantiza que el binario encrypt
pueda acceder a los archivos en el directorio.
El contenido que necesitamos recuperar se encuentra en el archivo /krypton/krypton2/krypton3
. Puedes descifrarlo usando:
Esto aplicará un cifrado César para obtener el texto plano.
Ingresa las credenciales para el Nivel 3:
Usuario: krypton3
Contraseña: CAESARISEASY
Este proceso se basa en un cifrado por sustitución, cuyo objetivo es descifrar un mensaje cifrado. Para lograrlo, se implementaron dos pasos fundamentales:
En lugar de analizar la frecuencia de letras individuales, se realizó un análisis de trigramas, es decir, de secuencias de tres letras consecutivas. Este método es más efectivo porque los trigramas reflejan patrones más comunes y estables en un idioma, facilitando la identificación de palabras frecuentes y proporcionando un punto de partida más sólido para el descifrado.
Los trigramas más comunes en inglés son:
"the" (1.81%)
"and" (0.73%)
"tha" (0.33%)
"ent" (0.42%)
"ing" (0.72%)
"ion" (0.42%)
"tio" (0.31%)
"for" (0.34%)
El análisis de trigramas en el texto cifrado mostró que la secuencia "JDS" aparecía 61 veces, lo que supera notablemente a otros trigramas. Esto sugiere que "JDS" corresponde al trigrama más común en inglés: "THE".
A partir de esta observación, se procedió a descifrar el texto aplicando sustituciones progresivas de letras. Este proceso se puede realizar utilizando herramientas en línea o mediante comandos en la línea de comandos de Linux. La sustitución se realiza paso a paso, identificando patrones y palabras potenciales hasta obtener el mensaje completo.
En conclusión, el método de análisis de trigramas y sustituciones sucesivas permitió descifrar el texto cifrado, revelando finalmente la clave del mensaje.
Resultado:
Posible versión limpia:
Continuamos con más sustituciones:
Resultado:
Finalmente, podemos ver algo como 'level'. Posible versión limpia:
Seguimos sustituyendo:
Resultado:
Posible versión limpia:
Avanzamos:
Resultado:
Ahora, parece que dice 'level four'. Posible versión limpia:
Seguimos con más sustituciones:
Resultado:
El inicio parece algo como 'well done'. Posible versión limpia:
Continuamos:
Resultado:
Posible versión limpia:
Más sustituciones:
Resultado:
La palabra después de 'four' parece 'password'. Posible versión limpia:
Finalmente:
Resultado:
La cadena final desconocida debería ser la contraseña. Hay dos opciones posibles:
'CSARUTE' es la contraseña parcialmente descifrada.
La cadena debería ser algo como: 'WELL DONE THE LEVEL FOUR PASSWORD IS {PASSWORDHERE}'.
Vamos a intentar con el segundo método.
Posible versión limpia:
WELL DONE THE LEVEL FOUR PASSWORD CSARUTE
Resultado:
Posible versión limpia:
La contraseña para el nivel 4 es:
BRUTE
Ingresa las credenciales para el Nivel 4:
Usuario: krypton4
Contraseña: BRUTE
Este nivel se centra en descifrar un cifrado Vigènere, que es una variación del cifrado César, pero con una clave de longitud variable en lugar de un carácter fijo.
El README nos proporciona información interesante, a saber:
Este nivel utiliza un cifrado de Vigenère.
La longitud de la clave es 6.
El cifrado de Vigenère es una versión avanzada del cifrado César. En lugar de desplazar cada letra por la misma cantidad, se utiliza una clave que codifica la letra 1 con un desplazamiento, la letra 2 con otro desplazamiento, y así sucesivamente.
Después de 6 letras (la longitud de la clave), el patrón se repite, por lo que conocer la longitud de la clave nos ayudará a resolverlo.
El texto cifrado de la bandera es muy corto: HCIKV RJOX
.
Al igual que en el nivel anterior, cuanto más largo sea el texto cifrado, más precisa será nuestro análisis. Por lo tanto, necesitaremos usar los dos textos cifrados encontrados para determinar la clave.
Usando una herramienta como Dcode.fr, copia y pega el texto de found1
en el sitio web. Introduce 6
como la longitud de la clave.
Sabiendo la clave he creado este script para obtener la contraseña para el siguiente nivel.
Ejecutándolo con este comando:
Ingresa las credenciales para el Nivel 5:
Usuario: krypton5
Contraseña: CLEARTEXT
Si volvemos a Dcode.fr, introducimos el texto de found1
y seleccionamos la opción de Descifrado Automático, la herramienta realiza ambos pasos instantáneamente por nosotros.
Usando el script del anterior nivel obtenemos la contraseña para el siguiente nivel. Ejecutándolo con este comando:
Ingresa las credenciales para el Nivel 6:
Usuario: krypton6
Contraseña: RANDOM
Creamos un directorio temporal con el comando:
Esto nos dará la ruta del directorio, así que accedemos a ella.
Creamos un enlace simbólico para el archivo keyfile.dat
:
Luego, creamos un archivo lleno de caracteres 'A':
Verificamos el contenido del directorio:
Esto debería mostrar:
Ejecutamos el comando de cifrado:
El resultado debería ser algo como:
Hacemos lo mismo con un archivo lleno de caracteres 'B':
Esto debería mostrar:
Ejecutamos el cifrado nuevamente:
El resultado debería ser algo como:
De la información del nivel, lo más importante es lo siguiente:
Normalmente, el byte de clave 'aleatorio' se realiza una operación XOR con el texto plano para producir el texto cifrado. Si el flujo de clave aleatorio puede ser replicado en el receptor, entonces un XOR adicional producirá nuevamente el texto plano.
He creado este script para obtener la contraseña del siguiente nivel. Este código descifra un texto cifrado utilizando una técnica basada en el cifrado XOR.
Cálculo de Desplazamientos:
Se calcula la diferencia entre dos secuencias: una secuencia de caracteres "A" (que actúa como texto plano) y una secuencia de texto cifrado.
Se obtiene una lista de desplazamientos a partir de estas diferencias.
Descifrado del Texto Cifrado:
Utiliza los desplazamientos calculados para descifrar el texto cifrado.
Resta cada desplazamiento del valor ASCII del carácter cifrado y ajusta el resultado para asegurarse de que esté en el rango de letras ASCII válidas.
Compone el texto descifrado.
Ingresa las credenciales para el Nivel 7:
Usuario: krypton7
Contraseña: LFSRISNOTRANDOM