Unknown 2 | GrabCon CTF 2021

Fichier(s)

Nécessaires

Ghidra + Kali

Flag

GrabCON{626C61636B647261676F6E}

Solution détaillée

La première chose que j’ai fait et de faire un ltrace mais cela n’a rien donné

J’ai donc fait : strings med_re_2 et en cherchant un petit peu j’ai trouvé ceci :

Alt text

Si vous ne connaissez pas,UPX est un packer qui ici compresse le binaire . Nativement, le fichier ne peut pas être analysé avec ghidra .

Alt text

Après quelques recherches, on trouve cette commande pour unpack le .exe :

Alt text

Retournons sur Ghidra :

Alt text

Maintenant cherchons dans le main On trouve 2 fonctions intéressantes : main.main et main.one Regardons d’abord main.main :

Alt text

Nous voyons de l’ascii art, c’est donc la fonction qui doit être chargée au lancement du binaire. Exécutons-le :

Alt text

Si on regarde le code du main.main , en bas nous retrouvons :

Prinln()

Alt text

Je suppose donc que le if n’est pas vérifié et que donc main.one() n’est pas appelée. Nous devons donc accéder à cette fonction. Je ne sais pas si c’est la méthode la plus propre pour faire ceci mais j’ai modifié le binaire : J’ai transformé == en != comme ceci . En assembleur, on sait que == géré par l’instruction JZ ou JNZ, En cliquant sur la condition on peut patch en remplaçant JNZ par JZ (== par !=)

Alt text

Alt text

Alt text

Trouver JZ en bas du menu et pressez Enter Il faut maintenant exporter votre nouveau binaire : “File” -> “Export program” -> Format : ELF et Output : med_re_2_patch1 -> “Enter” Maintenant exécutons notre nouveau binaire :

Alt text

Ça devient intéressant ! On nous demande un mot de passe. Cherchons donc du côté du main.one La fonction semble complexe mais nous cherchons uniquement les “PrintLn” et les conditions. Voici ce qui m’a interpellé :

Alt text

Nous avons une condition et un PrintLn() , D’après le résultat du binaire patché , je suppose que c’est là que le flag est caché :

Alt text

Nous voulons que la condition soit vérifiée : if (local_40 == 0x195) (ligne 192) De la même manière que la patch précédent, changeons la condition (JNZ → JZ) puis exportons le nouveau patch

Alt text

Exécutons celui-ci :

Alt text

Voila ! Afficher une string sous une certaine condition est assez simple à modifier !