Français [EKOPARTY PRE-CTF 2015] [Rev50 – Decode it] Write up

Description

Decode it.

Description: A not so known decoding algorithm.

Hints: Do not trust symbols! they are lying. Check the algorithm.

Attachment: reversing50.zip

Resolution

Au début, on voit ce qui doit être un crackme, la particularité c’est qu’il est compilé pour fonctionner sur une architecture arm 32 bits.

ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0c1ab16b5f128e614308d2f8c1776d46080a6597, not stripped

En utilisant l’outil « string » nous voyons certains appels système intéressants :

memcmp
malloc
[...]
MD5@@OPENSSL_1.0.0
[...]
Base64decode_len

Memcmp ? Tiens donc. C’est plutôt utile pour comparer (entre autre) des chaines de caractère ça. md5 pour hasher et base64 pour encoder/décoder.

Jouons avec LD_PRELOAD pour hooker l’appel du memcmp :

#define _GNU_SOURCE
#include <dlfcn.h>
#include <string.h>
#include <stdio.h>

typedef int (*omemcmp)(const void *s1, const void *s2, size_t n);

int memcmp(const void *s1, const void *s2, size_t n) {
    omemcmp omem;
    omem = (int)dlsym(RTLD_NEXT, "memcmp");
    printf("s1:%s\ns2:%s\ns:%d\n", s1, s2, n);
    return omem(s1, s2, n);
}

On le lance :

$ echo 'a' | LD_PRELOAD=./preload.so ./decoder
Please, enter your encoded password: s1:
s2:PASS_QIV1qyLR0hFEQU5KCbfm3Hok5V0VmpinCWseVd2X
s:4
Access denied

Nous voyons ici qu’il faut que la chaine passée en argument ait la valeur « PASS_QIV1qyLR0hFEQU5KCbfm3Hok5V0VmpinCWseVd2X » une fois arrivée au point de comparaison. Mais passer cette chaine ne fonctionne pas.

Après une analyse plus poussée il s’est avéré qu’il faille envoyer cette même chaine de caractères, mais encodée en base64.

$ LD_PRELOAD=./preload.so ./decoder
Please, enter your encoded password: UEFTU19RSVYxcXlMUjBpRkVRVTVLQ2JnbTNIb2s1VjBWbXBobkNXc2VWZDJY
s1:PASS_QIV1qyLR0hFEQU5KCbfm3Hok5V0VmpinCWseVd2X
s2:PASS_QIV1qyLR0hFEQU5KCbfm3Hok5V0VmpinCWseVd2X
s:46
Great! the flag is EKO{4fa8c8eac431266a25f56a297a73c334}

Le flag est : EKO{4fa8c8eac431266a25f56a297a73c334}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *