Hace unas semanas, LaTeclaESC lanzó el primer desafío criptográfico de su historia. El denominado Challenge ESC01, consistía en un reto tipo Capture The Flag (CTF) diseñado para poner a prueba vuestro ingenio y vuestras habilidades en el mundo de la criptografía.
Tras días de mucha incertidumbre, un participante logró resolverlo con éxito. Este artículo explica en detalle cómo se podía llegar a la solución, los conceptos clave utilizados y los aprendizajes que dejó este desafío. ¿Listo para descifrar el misterio? ¡Vamos allá!
Proceso de inscripción
Cada concursante inscrito por email recibía como respuesta una clave simétrica que debía usarse durante el reto: esc.2501aeJei7io4Zangei2Reimi
Adicionalmente, podía recibir una primera pista enviando el link del challenge a 3 contactos en CC. Esta era la primera pista:
PISTA1: Leer el articulo publicado en el blog sobre sistemas de codificación te dará una gran ventaja
El reto pasó a estado de RUNNING tras publicar un articulo donde hablamos sobre como Instalar OpenWrt en Xiaomi AX3600. Un articulo sobre hackers era un buen momento para arrancar un challenge sobre ciberseguridad. Al final del articulo, los lectores tuvisteis disponible un enlace al reto que os otorgó una ventaja temporal de 24 horas respecto al resto de los participantes:
Al pulsar el link del enlace ESC01, se abre el formulario del challenge:
El formulario solicita un usuario y una contraseña. Sin importar qué credenciales utilices, devuelve un mensaje de error. Este mensaje contiene una pequeña pista que debía ayudarte a superar este paso:
Un formulario web se basa principalmente en HTML para definir su estructura y en Javascript para gestionar la interacción del usuario y validar las credenciales. La clave aquí era inspeccionar su código fuente, un proceso sencillo que puedes realizar haciendo clic sobre el formulario con el botón derecho del ratón, y seleccionando “Ver código fuente de la página”.
En el código fuente, puedes encontrar hardcoded el usuario y el password:
Introduces como usuario “keychron-k8” y como password “seraparami”, y se descarga un objeto encriptado. El formulario ofrece ayuda adicional para guiarte en el proceso:
Fichero encriptado
Se descarga un fichero llamado challenge-esc01.7z. Este fichero está comprimido con el compresor 7-zip. Se puede descomprimir con este comando:
$ 7z x challenge-esc01.7z
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=es_ES.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-5700HQ CPU @ 2.70GHz (40671),ASM,AES-NI)
Scanning the drive for archives:
1 file, 1175 bytes (2 KiB)
Extracting archive: challenge-esc01.7z
Enter password (will not be echoed):
Al intentar descomprimirlo te solicita una contraseña. Aquí es donde debes usar la clave simétrica que recibiste durante el proceso de inscripción. De esta manera, a partir de este momento, solo los inscritos al reto pueden continuar con el proceso.
Insertando el password obtenido durante la inscripción, se extrae un directorio llamado challenge-esc01. Dentro de este directorio puedes encontrar dos archivos:
$ cd challenge-esc01/
$ ls
encoded_message README
Lo primero es leer el contenido del fichero README:
$ cat README
Si estas leyendo este mensaje es porque estas correctamente inscrito al challenge ESC01 del blog LaTeclaEsc.
Las instrucciones para resolver este reto son las siguientes:
- El fichero "encoded_message" va codificado
- El reto consiste en decodificarlo para extraer el mensaje que lleva oculto.
- El primer concursante que lo logre, tiene premio asegurado.
No hay nada de interes en este fichero README, puedes borrarlo.
Centrate en decodificar el contenido del fichero "encoded_message".
Pulso la tecla ESC, :wq!
A partir de aquí, puedes borrar el archivo README. El reto se centra en decodificar el contenido del fichero encoded_message.
Mensaje codificado
Como primer paso, revisa el contenido del mensaje codificado:
Viendo el contenido, y tras leer el articulo citado en la PISTA1 sobre sistemas de codificación, te puedes llegar a imaginar que este código esta codificado en base64. Veamos el resultado de decodificarlo:
A partir de aquí, podrías darle a la imaginación, o esperar a la segunda pista:
PISTA2: Darle la vuelta te puede ofrecer una perspectiva diferente
Para cualquier informático, queda bastante claro que darle la vuelta a un mensaje, puede significar invertir ceros por unos, y unos por ceros. Para ello, podemos usar este comando:
El comando “tr”, traduce cualquier 0 por una f, cualquier 1 por una e, cualquier 2 por una d, y así sucesivamente hasta la f por un 0. Es decir, substituimos cada dígito hexadecimal, por su equivalente negado, cambiando ceros por unos y unos por ceros.
Desde este punto, de nuevo podrías darle a la imaginación, o esperar a la tercera pista:
PISTA3: cada letra tiene un valor perfectamente codificado en un antiguo estándar que todos conocemos
Cualquier informático entiende que el estándar referenciado que codifica letras es el ASCII. Y de nuevo, si volvemos al articulo sobre sistemas de codificación, tenemos una explicación muy clara de como funciona este estándar. Si convertimos cada 2 dígitos en hexadecimal, a su equivalente en el estándar ASCII, parece que se construye la cadena “Desde”:
0x44 -> D
0x65 -> e
0x73 -> s
0x64 -> d
0x65 -> e
...
Podrías seguir decodificando carácter a carácter el resto del mensaje. Pero es mas fácil usar una herramienta que haga ese trabajo por nosotros. El siguiente comando decodifica toda la secuencia de bytes hexadecimales, a su equivalente en ASCII:
$ cat encoded_message | base64 -d | xxd -p | tr '0123456789abcdef' 'fedcba9876543210' | xxd -r -p
Desde el blog LaTeclaESC te doy la ENHORABUENA por resolver ESC01, el primer Challenge de ciberseguridad 2025. Como recompensa por tu esfuerzo y agradecimiento por tu fidelidad, te regalo un teclado mecánico Keychron K8 totalmente gratuíto, el mismo con el que he escrito este texto. Ponte en contacto con el blog, enviando un email a lateclaescape@gmail.com, copiando y pegando este texto en el correo para demostrar que has resuelto el challenge. No olvides adjuntar tu dirección para hacerte el envío. Muchas gracias por participar, y hasta el proximo reto! Pulso la tecla ESC, dos puntos wq!
Resolución
El 13 de marzo de 2025, a tan solo 48 horas de que venciera el plazo, llegó el correo de un concursante que logró resolver el reto. Y no solo eso, sino que lo hizo sin necesidad de pedir ni la PISTA2 ni la PISTA3. ¡Increíble trabajo! Enhorabuena, compañero. Espero que disfrutes al máximo tu nuevo Keychron K8 y que de su tecla ESC surjan grandes proyectos. ¡Te lo has ganado!.
Conclusión
A todos los participantes, agradeceros tanto el seguimiento como la difusión de este reto. Y recordaros que durante 2025 habrá un segundo challenge con otro premio. ¡Así que atentos porque habrá mas sorpresas!
Quiero añadir que el concursante que ha logrado resolver el reto es uno de los seguidores del canal de Telegram. Lo que demuestra que estar atento a las novedades de este canal ofrece cierta ventaja sobre el resto de los participantes. Así que, si aún no lo has hecho, te animo a suscribirte al canal, es totalmente gratuito, hay gente muy maja por aquí que siempre está dispuesta a ayudar, y seguro que entre todos aprenderemos un montón.
El blog de LaTeclaESC os da la bienvenida al primer desafío criptográfico de su historia, identificado como el desafío ESC01, un evento que quedará marcado para siempre en el recuerdo de este blog.
Use the share button below if you liked it.
There's not much you can do without a CPU.