Pwn0x01

Flag: StarHack{YOU_WON!!}

Challenge

3KB
Ouvrir

Description


return to win!!!

nc 35.180.44.229 1235

Solution

On commence par dΓ©compiler le binaire, ici, j'utilise Ghidra. On peut noter 4 choses importantes :

  • La fonction portalGun utilise gets, cette fonction est vulnΓ©rable aux Buffers Overflow.

  • La fonction callMe permet d'afficher le flag, il faut donc faire en sorte de l'appeler.

  • La fonction callMe est Γ  l'adresse 0x080485c6.

  • Le paramΓ¨tre de la fonction callMe doit Γͺtre Γ©gal Γ  0xdeadbeef

Maintenant, on va passer sur GDB (avec le plugin GEF) pour débugger tout ça. Le buffer qui prend notre input à une taille de 0x44 (68). Notre objectif est de le dépasser pour insérer l'adresse de callMe dans EIP et mettre 0xdeadbeef en paramètre. La commande cyclic permet de générer des patterns et ainsi repérer le nombre de caractères à entrer pour arriver à modifier un endroit spécifique.

EIP contient taaa, on cherche donc l'offset de cette valeur :

Il faut donc 76 caractères pour atteindre EIP. On va donc envoyer 76 * A puis l'adresse de callMe (à l'envers puisque little endian).

ESP + 0, qui correspond à notre premier paramètre de la fonction callMe, contient baaa. On calcule son offset :

On doit mettre 4 caractères random de plus après notre adresse pour accéder au paramètre de la fonction et mettre 0xdeadbeef dedans. J'ai ajouté flag.txt avec un faux flag dedans pour tester notre payload. Ça nous donne :

Le programme crash, mais on a bien eu le flag. Plus qu'Γ  envoyer notre payload au serveur, j'utilise Python avec la librairie pwntools :

Mis Γ  jour

Ce contenu vous a-t-il Γ©tΓ© utileβ€―?