Le « buffer overflow » est beaucoup plus compliqué à exploiter.
Dans la technique du « buffer overflow » on déborde plus loin dans la mémoire (pile) jusqu'à atteindre l'adresse de retour de la fonction.On modifie cette adresse de retour pour qu'elle pointe vers le début de la pile ("message").Comme le début de la pile ("message") contient des données fournies par nous, on peut y mettre un programme.On aura donc réussi à faire exécuter un programme à nous par un autre programme.
En pratique, c'est très compliqué.Le principal problème pour le pirate est qu'il ne connaît pas l'adresse du début de la pile (l'adresse de "message").Ici, dans ce programme, elle est affichée, mais ce n'est pas le cas dans un "vrai" programme.Ensuite il faut écrire du code assembleur, et contourner des protections (stack smashing).
C'est possible... mais c'est trop compliqué pour nous.
Essayons tout de même de retrouver l'adresse de retour dans cet exemple.On sait que ajouter_message_et_faire_virement() est appelée dans main.Quand ajouter_message_et_faire_virement() fini, le programme doit retourner dans main, juste après l'appel de cette fonction.Cette adresse de retour est stockée vers la fin de la pile.Donc son adresse devrait être légèrement supérieure à celle de main().
Rentrez un message pour le virement: AAALe virement de 100000 euros a été effectué.Le destinataire est: Mme. BettencourtLe message ajouté est: AAA*********************adresse de message : 00007ffe4f1e77f0adresse de main(): 0000000000400646Mémoire: addresse : lettres 0: 0000000000414141 : A A A - - - - - 8: 0000000000000000 : - - - - - - - - 16: 746542202e656d4d : M m e . B e t 24: 7472756f636e6574 : t e n c o u r t 32: 0000000000000000 : - - - - - - - - 40: 0000000000400550 : P - @ - - - - - 48: 00007ffe4f1e7830 : 0 x - O - - - - 56: 0000000000400659 : Y - @ - - - - - 64: 0000000000000000 : - - - - - - - - 72: 00007f8594fd8b45 : E - - - - - - - 80: 0000000000000000 : - - - - - - - - 88: 00007ffe4f1e7918 : - y - O - - - - 96: 0000000100000000 : - - - - - - - - 104: 0000000000400646 : F - @ - - - - - 112: 0000000000000000 : - - - - - - - - 120: 705168b7dde524d4 : - $ - - - h Q p 128: 0000000000400550 : P - @ - - - - - 136: 00007ffe4f1e7910 : - y - O - - - - 144: 0000000000000000 : - - - - - - - - 152: 0000000000000000 : - - - - - - - -