By @f99942
Descripcion:
Descripcion:
A un paso de la gloria!!! Este binario que gracias al reto cegat0n has descargado, permite leer las
tarjetas de credito almacenadas dentro del Bunker! Sin embargo requiere de las
credenciales de MySQL que debiste haber obtenido via:
str0ke (username de Ulises Fortress)
Y password ya sea via DrunkTillDawn o Guardian challenges. El puerto de MySQL en el Bunker (3.15.187.232) es el 1344, pero esta bloqueado
por seguridad, pero lo puedes activar ya que conoces la secuencia de puertos
de este servicio gracias al reto Abonero (port knocker). Utiliza la herramienta knock para mandar la serie de puertos necesaria.
En ubuntu la instalas asi: > sudo apt-get install knockd Y la ejecutas pasandole la combinacion de puertos en este caso para el
servicio MySQL:
>knock -d 30 3.15.187.232 <puerto1> <puerto2> ... <puertoN> NOTA: opcion -d muy importante para evitar problemas de latencia en la red. Una vez activado el puerto, puedes retirar las tarjetas de credito encriptadas,
y tu tarea es hacerle ingenieria inversa para desencriptarlas y lo mas
importante obtengas la tarjeta de credito del millonario Ulises Fortress el
cual conoces su userID gracias al reto str0ke. La bandera seran los 16 digitos de la tarjeta de credito de Ulises Fortress,
tal como aparece desencripada. Traenos esa damn tarjeta o no te pagamos!!
El binario brindado para la resolución de este reto fue compilado en un sistema GNU/Linux
de 64bits, ligado dinámicamente y los símbolos no fueron removidos. Esta
información puede ser comprobada fácilmente con el comando file sobre el
binario.
La
ejecución del binario revela los modos de uso. El uso del binario es
desconocido, solo se sabe que se conecta a la base de datos que contiene las
tarjetas de los usuarios del banco.
Es posible
realizar un dump de la información o validar la información de un
cuentahabiente con un número secreto asociado a su cuenta.
Al ser
accesible únicamente desde la red interna, la opción de dump puede haberse
pensado para generar respaldos, mientras que la opción validate podría ser la
que permite realizar otras operaciones como transacciones.
Al ejecutar
el binario, son necesarias las credenciales de la base de datos de retos
anteriores, seguidas del modo de uso. Al emplear el modo dump, se obtiene el
siguiente resultado.
Aparentemente
se trata de base64, sin embargo al intentar realizar la decodificación de
base64, se obtiene una salida parecida a la siguiente.
Lo anterior
no representa un patrón propio de un tarjeta, ¿o si?
El campo
validation key es el requerido para obtener la llave. Del reto srt0ke de criptografía se supo que el ID de Ulises Fortress era el ID 87, esta información
permitía enfocarse sobre los campos específicos de la fila 87.
Decompilando
el binario con Ghidra, es posible leer los nombres de las funciones, la
aplicación nos indica que se trata de base64, o al menos los nombres de las
funciones muestran que este es el caso.
Siguiendo
el flujo de ejecución a través del decompiler de Ghidra, es posible ver que la
opción dump únicamente realiza una consulta a la base de datos, es decir,
funciona como una interfaz, pero no realiza ninguna tarea de codificación.
Sin
embargo, dentro de la opción validate, se realiza una consulta sobre validation
key. Y para realizar esta tarea, se emplea el resultado de la función encode
con la verification key brindada por el usuario.
La función
encode, parece únicamente realizar un base64 y agregar el carácter de
terminación de cadena al final de lo devuelto por la función base64_encode:
La función
base64_encode, parece ser una implementación manual de base64, sin embargo al
analizar las variables que emplea, es notoria la existencia de una variable
llamada encoding_table, la cual tiene el siguiente contenido.
Esta cadena
puede ser obtenida a través del comando strings. Si se revisa el RFC de base64,
se propone un charset muy diferente al empleado, por lo que podemos definir que
para este reto el charset de base64 fue modificado por el siguiente:
"ZYXWVUTSRQPONMLKJIHGFEDCBAabcdefghijklmnopqrstuvwxyz0123456789+/"
Una vez
sabiendo esto, es posible escribir un código en Python que realice la solución
de manera instantánea, la cual consiste en sustituir el charset por el original
en la validation key obtenida del servidor.
Obtenemos
la llave de validación asociada a la tarjeta de Ulises Fortress, automatizando
el proceso con pwntools, desencriptamos su tarjeta!!!
Comments
Post a Comment