Aujourd'hui on s'attaque au challenge "flag" de pwnable.kr. Disponible ici.

D'entré de jeu, 2 choses m'interpelle:
- Le mot "packed"
- La phrase "all you need is binary"

Essayons de voir de quoi il retourne plus précisément.

Qu'est-ce que cela signifie ? C'est un exécutable 64 bits qui n'a pas besoin de bibliothèques externes pour fonctionner correctement, (d'où la partie liée statiquement). Stripped signifie qu'il ne contient aucune information de débogage, ce qui est courant pour les binaires de release (ca permet de gagner en performance et en taille) mais c'est aussi courant pour les logiciels malveillants car cela complique la tache de reverse engineering.

Si on pousse l'analyse plus avant avec strings on obtient quelque chose d'intéressant:

UPX est un "packer" pour binaires, qui compresse les binaires et les décompresse à l'exécution. C'est pour cette raison que radare2 n'arrive pas à s'y retrouver dans les fonction.

Le décompresser nous facilitera la vie, alors installons-le.

sudo apt install upx-ucl

Décompressons le binaire

 upx -d flag 

Maintenant si on observe le code avec radare2, on va trouver des choses bien plus intéressantes.

Si on fait attention on a un objet flag qui est stocké dans un registre juste avant l'appel à une sous-fonction...
Regardons ce que contient cette adresse mémoire.

Bingo ! Voila notre flag !

Social et Media

Comme toujours je suis disponible sur Twitter et cie, si vous avez des questions, des remarques, des suggestions etc. N’hésitez pas !

Twitter: @GhostAgs

Discord: hackraw