B1nary0s para practicar

Como ya sabéis desde hace tiempo llevamos organizando los ‘wargames‘ de Campus Party e incluso lanzamos nuestro primer Wargame internacional hace relativamente poco.

Llevamos tiempo prometiendo que liberaríamos algunas de las pruebas para aquellos que en su momento no pudieron participar y hoy ha llegado ese día.

Las pruebas que vamos a liberar son de tipo ‘binarios’ y la dificultad va in crescendo, la primera es bastante sencilla, la segunda tiene mas dificultad y la tercera es mas dura.

Problemas de tiempo

Esta prueba formó parte del reto Campus Party 2009 y la lógica es la siguiente: Tenemos un binario compilado que debe liberar un token, el problema es que solo liberará dicho token en una fecha determinada (y posterior a la actual).

Para asegurarnos que el binario se ejecutaba en el host donde debía ejecutarse (y no fuera tan fácil como descargarlo y ejecutar en una maquina cambiando la hora …) debes crear el fichero /tmp/matrixhasyou para simular el entorno confiable donde debe ejecutarse.

El código fuente de la prueba se puede descargar aquí

Compilación: gcc -static timetoken.c -o timetoken

Crackme ‘old school’

Este es el típico crackme donde se debe ‘reversear’ el binario en busca del token, lo suyo es compilarlo con -static para meter mayor cantidad de ruido y hacer que el comando strings emita muchos datos.

El fuente de esta prueba aquí.

Compilación: gcc -Wall -O2 –static -pthread passCP.c -o passCP

Crypto al revés

Esta prueba, del Wargame I, generó infinidad de correos electrónicos preguntando ‘si estaba bien’ porque el planteamiento es un poco diferente a lo normal. En este caso, del binario debes ser capaz de obtener un string cifrado y convertido en base64 y la clave para descifrar dicho string. ¿Donde está el problema? En que no se especifica en ningún lado con qué algoritmo de cifrado se ha realizado el proceso.

El binario se ofrecía ‘roto’ ya que faltaba una librería llamada libSbD.so.1 que era la que contenía la información sobre los algoritmos empleados. Se pedía como solución que se entregase una librería que hiciera funcionar el binario

Mucha gente resolvió el problema haciendo fuerza bruta … de algoritmos para descubrir cual se estaba usando.

Para jugar esta prueba, compila todo el fuente (binario y librerías) y luego ‘borra’ libSbD.so.1 para tener el binario exactamente a como se entregaba a los participantes

El fuente de la prueba se puede descargar aquí

Compilación:

(la librería compartida)

gcc -c -fPIC libSbD.c -o libSbD.o

gcc -shared -Wl,-soname,libSbD.so.1 -o libSbD.so  libSbD.o

(El binario en si )

gcc bin02.c -o bin02 -L. -lSbD -lssl -lcrypto -pthread

ln libSbD.so libSbD.so.1
(Para ejecutarlo)

export LD_LIBRARY_PATH=`pwd`

./bin02

Esperamos que este material resulte didáctico, tanto para los valientes que compilen y jueguen como para aquellos que simplemente tengan interés en ver el código

Fuente: SecurityByDefault

Share

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.