Maintenant , c’est au challenge heap1 de la VM Protostar que nous allons nous attaquer.
Il est possible de télécharger cette machine virtuelle ici.
Voici le code source du binaire à exploiter :
Le but de ce challenge est d’executer la fonction winner() à l’aide d’un overflow dans le tas ( heap overflow )
Nous pouvons voir que la fonction stcpy est utilisée deux fois alors qu’elle ne vérifie pas que la taille du buffer soit correcte et permet donc d’écraser la mémoire , ici le « heap » car les structures utilisées ont été allouées grâce à malloc
Lançons notre programme avec des caractères reconnaissable dans gdb :
s
comme vous pouvez le constater , le strcpy tente d’ecrire le second argument à l’adresse 0x46464646 , soit nos « FFFF »
Nous pouvons donc écrire à l’adresse désirée en remplaçant les FFFF par l’adresse à écraser.
Maintenant que pourrions nous écraser le printf pour le modifier par la fonction winner
récupérons l’adresse du printf dans la Global Offset Table :
l’adresse à ecrasée est donc 0x8049774
maintenant avec quoi ecraser la fonction puts , avec la fonction winner :
Il nous reste plus qu’a écrire notre fichier python pour generer le payload :
Lançons le binaire avec le payload que l’on a généré :
Le challenge est réussi !