Print Stack Canary
Last updated
Last updated
Imaginez une situation où un programme vulnérable à un débordement de pile peut exécuter une fonction puts pointant vers une partie du débordement de pile. L'attaquant sait que le premier octet du canari est un octet nul (\x00
) et que le reste du canari est composé d'octets aléatoires. Ensuite, l'attaquant peut créer un débordement qui écrase la pile jusqu'au premier octet du canari.
Ensuite, l'attaquant appelle la fonction puts au milieu de la charge utile qui imprimera tout le canari (à l'exception du premier octet nul).
Avec ces informations, l'attaquant peut concevoir et envoyer une nouvelle attaque en connaissant le canari (dans la même session du programme).
Évidemment, cette tactique est très limitée car l'attaquant doit être capable d'imprimer le contenu de sa charge utile pour exfiltrer le canari et ensuite être capable de créer une nouvelle charge utile (dans la même session du programme) et envoyer le vrai débordement de tampon.
Exemples de CTF :
64 bits, ASLR activé mais pas de PIE, la première étape consiste à remplir un débordement jusqu'à l'octet 0x00 du canari pour ensuite appeler puts et le divulguer. Avec le canari, un gadget ROP est créé pour appeler puts afin de divulguer l'adresse de puts depuis la GOT et un gadget ROP pour appeler system('/bin/sh')
Avec une lecture arbitraire comme celle fournie par les chaînes de format, il pourrait être possible de divulguer le canari. Consultez cet exemple : https://ir0nstone.gitbook.io/notes/types/stack/canaries et vous pouvez lire sur l'abus des chaînes de format pour lire des adresses mémoire arbitraires dans :