Pwn0x02
Flag: StarHack{do_n0t_ev3r_trUsT_u5eR_1npUt_hayatflgh}
Challenge
Ce challenge tourne sur un docker et n'est pas disponible
Solution
Décompilation avec Ghidra pour savoir ce qu'on cherche. Un buffer de 64 octets nommé mail est dans les variables locales de la fonction main.

Dans la fonction update_mail, on peut rentrer un nombre sur 4 octets, et l'octet en mémoire à la position mail + length est modifié par le premier octet de notre nombre. Sauf qu'il n'y a pas de limite à la valeur de length, on peut donc déborder hors du mail. En plus, il est initialisé à 0x40 (64), c'est-à-dire, tout de suite à la fin du buffer de mail (pour nous éviter de remplir 64 octets un par un sans doute).

Enfin, une fonction mailshell à l'adresse 0x00401216

L'objectif va donc être de remplir octet par octet la mémoire jusqu'à écraser EIP. Pour ça, on va scripter un peu avec la librairie Python pwntools pour s'éviter de longues minutes de galère. Il faut lancer le script depuis un terminal tmux.
On voit que le programme crash, car on a bien réussi à réécrire EIP mais avec une valeur qui ne veut rien dire. Avec python, on décode la valeur d'EIP.

On va donc remplacer NMLKJI dans notre payload par l'adresse de mailshell. On en profite pour envoyer directement ça au véritable serveur.
Mis à jour
Ce contenu vous a-t-il été utile ?