Pwn0x01
Flag: StarHack{YOU_WON!!}
Challenge
Ce challenge tourne sur un docker et n'est pas disponible
Solution
On commence par dΓ©compiler le binaire, ici, j'utilise Ghidra. On peut noter 4 choses importantes :
La fonction
portalGunutilisegets, cette fonction est vulnΓ©rable aux Buffers Overflow.La fonction
callMepermet d'afficher le flag, il faut donc faire en sorte de l'appeler.La fonction
callMeest à l'adresse0x080485c6.Le paramètre de la fonction
callMedoit Γͺ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β―?