Pwn0x02

Flag: StarHack{do_n0t_ev3r_trUsT_u5eR_1npUt_hayatflgh}

Challenge

4KB
Ouvrir

Description


send a mail wherever you want!

nc 35.180.44.229 1236

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 ?