Agradecemos a la organización de RootedCon el esfuerzo en montar el Riddle, ha sido divertido ;­)

Seguir leyendo para versión html

Versión PDF

Invisible evidence

We need to analyze the capture data and guess the password shared.

Nos dan un fichero con una captura del tráfico y debemos analizarlo para obtener la contraseña. Para el análisis, procederemos con Wireshark.

Ordenamos los protocolos para una búsqueda más sencilla. Si analizamos los paquetes HTTP vemos que conexiones a varios diarios online y a alguna red social, nada de ello parece interesante.

Nos topamos con varios paquetes que mandan algunos POST, en ellos hay mensajes de parte del usuario "gomezraul134" (que tendrá su protagonismo más adelante) que se conecta a gmail y manda unos correos alertando a otros usuarios para que cifren sus comunicaciones y otro que le dice "I love you" a su amor Mariam.

Al final hay un correo que le madan a gangleader@pastebing.com en el cual hay un enlace a pastebin con la flag.

Enlace: http://pastebin.com/fir3C2kY Flag: → wCgwZTEt5W3i :D

Double cross

The gang leader has sent a document that has been intercepted. Can you help us?

En principio nos dan un PDF corrupto, pero si paramos a analizarlo con un editor hexadecimal podemos descubrir que realmente tiene la estructura de un ZIP.

La solución más rápida: renombramos a CCcam.zip, descomprimimos y sorpresa! Un readme.txt: knxjjP5SI7P3IH8cQd92 th3 fl4g!;D

The domain

We have a domain associated with the person you seek. Search for information anywhere, his familiar environment can bring you closer to him.

El fichero contenía: pastebing.com

Haciendo un whois al dominio, podemos ver que está registrado a nombre de un tal Raúl Gómez (que ya conocíamos ;D) que vive en Ibiza. Como la descripción nos hablaba de su entorno familiar, nos fuimos directos a er fei$bu.

Con esos parámetros encontramos a una persona que casualmente “Stargate” entre sus programas de TV favoritos.

Una única foto. ¿Raro? :D

El dichoso flag era el nombre de su amada... ¿os acordais de ella?

Mariam, I love you <333

QR Recomposition

We have a picture with a QR code, but a piece is missing and the file seems corrupt. Could you tell us what hidden?

Nos dan un PDF que contiene una imagen de un código QR al que le falta una parte. Una vez pasado el Stargate Infinity, accediendo a la carpeta home del usuario peter, podemos ver un archivo que contiene una URL a una imagen alojada en tinypic, que casualmente resultaba ser la parte faltante a nuestro querido código:

Juntando las dos partes y haciendo uso de un lector QR, obtenemos: Welcome2Rooted5 ;­)

Stargate Infinity

You must connect to arena2.rootedcon.es. The info provided can help you. Find out, and tell us the name of the person who opens the door.

La prueba consistía en conectarnos a arena2.rootedcon.es y una vez hecho encontrar el nombre completo de la persona que “abría la puerta”.

peter:x:1001:1001:,,,:/home/peter:/bin/bash
charly:x:1002:1002:,,,:/home/charly:/bin/bash
paul:x:1003:1003:,,,:/home/paul:/bin/bash
steve:x:1004:1004:,,,:/home/steve:/bin/bash
marc:x:1005:1005:,,,:/home/marc:/bin/bash
jules:x:1006:1006:,,,:/home/jules:/bin/bash
thomas:x:1007:1007:,,,:/home/thomas:/bin/bash

La persona que nos “abrió la puerta” (despues de hacer un escaneo de puertos con nmap y encontrar unos servicios ssh corriendo), fue el señor Thomas.

Una vez loggeados simplemente habia que hacer un cat al /etc/passwd original, obteniendo el nombre completo: Thomas Jefferson.

Este reto era un paso clave para poder pasar las pruebas Round, puesto que eran binarios accesibles solamente desde el ssh, al igual que la pista para pasar QR Recomposition.

Round [OR]

You have to think in Base64 and there are many approximations to solve this challenge.

Este binario estaba dentro de la carpeta del usuario charly. A continuación se detalla su funcionamiento.

El binario comienza inicializando una cadena en base 64 y comprobando la longitud de la clave, que ha de estar entre 3 y 12.

Una vez pasada esa comprobación, llama a sub_40066D (check_it) pasándole la clave pasada como parámetro al programa y la cadena en b64 que inicializó al principio (zVQQURESU5HMDI0NDg=).

En 40066D construye otra cadena en b64, usando la anterior:

kJGXlV9yXzVQQURESU5HMDI0NDg=

Tras esto, vuelve a calcular la longitud de la clave, esta vez ha de ser exáctamente 12 para poder seguir.

La última cadena en b64 decodifica a:

90 91 97 95 5f 72 5f 35 50 41 44 44 49 4e 47 30 32 34 34 38
.. .. .. .. _  r  _  5  P  A  D  D  I  N  G  0  2  4  4  8

A partir de la clave que hemos introducido, hace los siguientes cálculos:

calc[0] = key[0] + 0x24
calc[1] = key[1] + 0x30
calc[2] = key[2] + 0x34
calc[3] = key[3] + 0x29
calc[4] = key[4] ­- 2
calc[5] = key[5] ­- 4
calc[6] = key[6] ­- 6
calc[7] = key[7] ­- 8
calc[8]  = 'P'
calc[9]  = 'A'
calc[10] = 'D'
calc[11] = 'D'
calc[12] = 'I'
calc[13] = 'N'
calc[14] = 'G'
calc[15] = '0'
calc[16] = key[8] + 1
calc[17] = key[9] + 1
calc[18] = key[10] + 1
calc[19] = key[11] + 1

Para finalmente codificar calc en b64 y comparar con la cadena kJGXlV9yXzVQQURESU5HMDI0NDg=

Aplicando las operaciones a la inversa sobre el resultado de decodificar esa cadena en b64, obtenemos:

laclave=PADDING01337

Eliminando el padding, la clave correcta es, finalmente:

laclave=1337

Round [XOR]

Similar to the other one. There are several approximations, although the challenge environment has changed a bit.

El binario coge la clave de la variable de entorno ENV_KEY_VAR, pero al puntero devuelto por getenv() le aplica una extensión de 32 a 64 bits, con lo que queda inválido y el programa revienta. Para evitarlo, depurando, reestablecemos su valor original.

Posteriormente, el binario pone a 0 un buffer de 0x800 bytes, y carga en el la cadena "mivozesmipasaporte" vía sprintf. Finalmente, llama a net4_remoting_impsi_, que es básicamente strcmp, pasándole la cadena "mivozesmipasaporte" y la clave que hemos puesto en la variable de entorno.

Flag: mivozesmipasaporte

Round [AND]

In line with the above, although there are some things to check in static variables.

El binario comienza inicializando datos y comprobando que la clave que le pasamos como primer parámetro tenga entre 3 y 32 caracteres.

Pasada esa comprobación, continúa moviendo bytes de un lado a otro, construyendo la clave correcta en memoria.

En sub_40098B termina de construir la clave, llamando a sub_400740 (check_it) con argumentos [clave construida] [clave pasada por el usuario]. Es una comparación de cadenas.

La clave es: fe00f30fbebe0000aabbf1f2f3f4

De nuevo, no es necesario profundizar en el binario para conseguir la clave, puesto que es comparada tal cual.

Magical Translation

Please, translate the text provided. It is not difficult, but you have to show us your skills in languages.

En esta ocasión nos facilitaban un archivo PNG que contenía una serie de símbolos que parecían formar tres palabras:

Con el nombre del archivo y siendo conocedor de las historias de J. R. R. Tolkien era más que suficiente para sobreentender que se trataba de runas antiguas, así que la resolución fue tan simple como coger una tabla de conversión de las mismas con nuestro alfabeto y ver como aparecía una cosa tal que: “you are welcome” que extrañamente was the flag! ;D

Blind Dialing

Download the audio file and listen it trying to find the number hidden. Captain Crunch was able to do that :P

Una grabación de audio, Captain Crunch... Era visto que se trataría de una marcación de tonos telefónicos incluso antes de reproducirla.

La respuesta ganadora se trataría del número marcado, así que intuitivamente hice uso de mi oído de músico y fui sacando a la primera los números uno a uno ;D

El número que nos pedían era 0034668878045.