Day 17: Hoperation Save McSkidy - Advent of Cyber 2025
xhetic
@xhetic
📚 Esta publicación pertenece a las colecciones:
Day 17: Hoperation Save McSkidy - Advent of Cyber 2025
Este writeup pertenece al evento Advent of Cyber 2025 de TryHackMe. Si quieres seguir toda la serie, consulta nuestra colección completa del Advent of Cyber 2025.
La situación es crítica. McSkidy ha sido capturada y encerrada en la fortaleza cuántica de King Malhare. Sin embargo, ha logrado filtrar información vital sobre los mecanismos de seguridad que la retienen. Para rescatarla, debemos atravesar cinco puertas de seguridad, cada una custodiada por un guardia y protegida por un acertijo lógico.
Hoy, nuestra mejor aliada será CyberChef, la "navaja suiza" para el análisis y transformación de datos.
Room: CyberChef - Hoperation Save McSkidy
Dificultad: Medium
🚪 1. Outer Gate: La Barrera del Idioma
Nuestra primera parada es la puerta exterior. Nos encontramos con un formulario de acceso y un chat con el guardia, pero la comunicación no fluye: el guardia nos habla en lo que parece ser Base64.

Su saludo, QWxsIGhhaWwgS2luZyBNYWxoYXJlIQ==, se traduce rápidamente a "All hail King Malhare!".
Para avanzar, necesitamos ser observadores. Inspeccionando el tráfico de red en las herramientas de desarrollador, descubro una cabecera HTTP curiosa en la petición del nivel: X-Magic-Question: What is the password for this level?.
Si intento preguntárselo directamente en inglés, me ignora. La clave está en hablar su "idioma". Codifico la pregunta a Base64 (V2hhdCBpcyB0aGUgcGFzc3dvcmQgZm9yIHRoaXMgbGV2ZWw/) y se la envío.
¡Funciona! Me responde con la contraseña codificada: SGVyZSBpcyB0aGUgcGFzc3dvcmQ6IFNXRnRjMjltYkhWbVpuaz0=.
Tras limpiar el mensaje, obtengo la contraseña en texto plano: "Iamsofluffy".
Sin embargo, el login falla. ¿Por qué? Una revisión rápida al código app.js revela una lógica de validación asimétrica:
// User login logic
userOk = atob(usr) === guardName;
// Password login logic (Level 1)
passOk = btoa(pwd) === expectedConst;El sistema espera que el usuario se envíe codificado en Base64, pero la contraseña se procesa tal cual.
- Usuario:
CottonTail->Q290dG9uVGFpbA== - Contraseña: SGVyZSBpcyB0aGUgcGFzc3dvcmQ6IFNXRnRjMjltYkhWbVpuaz0= ->
Iamsofluffy
Con la puerta abierta, podemos responder a la primera pregunta:
Pregunta: What is the password for the first lock?
Respuesta: CottonTail
🧱 2. Outer Wall: Doble o Nada
La segunda puerta sigue un patrón similar, custodiada por "CarrotHelm".
Esta vez, la cabecera oculta nos dice: X-Magic-Question: Did you change the password?.

Repetimos la estrategia: codificamos la pregunta y se la lanzamos al guardia. La respuesta que obtenemos parece una muñeca rusa de codificaciones, una tras otra.
Al decodificarla una vez, obtenemos otra cadena en Base64.
Aquí es donde CyberChef empieza a brillar. En lugar de decodificar manualmente paso a paso, podemos encadenar operaciones.
La lógica del script para este nivel confirma mis sospechas:
// Level 2
passOk = btoa(btoa(pwd)) === expectedConst;La contraseña ha sido codificada dos veces en Base64. Al invertir el proceso, revelamos el secreto: "Itoldyoutochangeit!".
Ya podemos responder a la siguiente pregunta:
Pregunta: What is the password for the second lock?
Respuesta: Itoldyoutochangeit!
🏠 3. Guard House: La Clave XOR
En la casa de la guardia, "LongEars" nos espera.
La cabecera HTTP cambia y ahora nos da una pista más técnica: X-Recipe-Key: cyberchef.

Le pido la contraseña amablemente (en su idioma Base64, por supuesto) y recibo una cadena de bytes sin sentido aparente. El código fuente nos aclara el panorama:
// Level 3
const bytes = xorWithKey(toBytes(pwd), toBytes(recipeKey));No es una simple codificación, es una operación XOR usando la clave "cyberchef".
Para obtener la contraseña original, configuro una receta en CyberChef:
- From Base64: Para convertir la respuesta del guardia a bytes.
- XOR: Usando la clave
cyberchef(UTF-8) para revertir la operación.

La contraseña aparece limpia y clara.
Tras abrir la puerta con la contraseña obtenida, podemos responder a la pregunta:
Pregunta: What is the password for the third lock?
Respuesta: BugsBunny
🏰 4. Inner Castle: Rompiendo el Hash
Nos acercamos al corazón de la fortaleza. Tras preguntarle al guardia "Lenny" la contraseña, nos entrega lo que parece ser la contraseña, pero tiene un formato muy reconocible: b4c0be7d7e97ab74c13091b76825cf39.

El código confirma que estamos ante un hash MD5:
// Level 4
passOk = (md5(pwd) === expectedConst);A diferencia de Base64 o XOR, un hash es una función unidireccional; no se puede "decodificar". La única forma de encontrar el texto original es mediante fuerza bruta o usando tablas precalculadas (Rainbow Tables).
Recurro a CrackStation, una base de datos masiva de hashes conocidos. Al introducir el hash, la respuesta es instantánea.

Ya podemos abrir la puerta y responder a la pregunta:
Pregunta: What is the password for the fourth lock?
Respuesta: passw0rd1
🗼 5. Prison Tower: La Receta Final
La última puerta antes de llegar a McSkidy. El guardia "Carl" nos da la contraseña final codificada: ZTN4cDB5T3VwNDNlT2UxNQ==.
Las cabeceras nos dan las instrucciones exactas para resolver este puzzle:
X-Recipe-ID: R1X-Recipe-Key: cyberchef
Analizando el switch en el código app.js para el caso R1:
case "R1":
// CyberChef: From Base64 => Reverse => ROT13
tp = btoa(reverse(rot13(tp)));
break;El sistema aplica: ROT13 -> Reverse -> Base64. Para obtener la contraseña original, debemos aplicar la ingeniería inversa a estos pasos en CyberChef:
- From Base64: Decodificamos la cadena inicial.
- Reverse: Invertimos el orden de los caracteres.
- ROT13: Rotamos los caracteres 13 posiciones (ROT13 es su propio inverso).

La receta mágica nos revela la llave final, y con ello, podemos responder a la pregunta:
Pregunta: What is the password for the fifth lock?
Respuesta: 51rBr34chBl0ck3r
¡Lo logramos! Hemos superado las cinco barreras de seguridad y asegurado la ruta de escape para McSkidy.
La room nos muestra la flag final:

🏁 Conclusión
Este reto ha sido un excelente ejercicio para entender cómo los datos pueden ser transformados, ofuscados y hasheados.
Herramientas como CyberChef son indispensables para cualquier analista de seguridad que necesite "hablar el idioma" de los datos.
Si te perdiste el análisis forense del registro de ayer, echa un vistazo al Día 16: Registry Furensics.
Recuerda que puedes seguir toda la serie de retos en nuestra colección completa del Advent of Cyber 2025.
¡Nos vemos mañana para más hacking navideño! 🎄