Ho bisogno di produrre una presentazione su buffer overflow per una classe di college. Sono riuscito a creare un buffer overflow semplice in cui ho iniettato l'indirizzo di una funzione specifica su EIP e la funzione viene eseguita come previsto.
Quindi, voglio mostrare l'esempio più interessante in cui inserisco lo shellcode che viene eseguito. Questo è quando smette di funzionare. Ho emulato il modo in cui la gente lo ha spiegato su vari siti web, ma non funziona.
Indipendentemente dallo shellcode che utilizzo ( Shellcode ), il problema è che il codice che ho iniettato non viene eseguito . Quindi il programma salta all'indirizzo corretto, quindi si ferma senza eseguire quello che è all'indirizzo.
Quindi,comepuoivederenellasezionecentraledell'immagine,chiamato"codice", il programma accede alla mia slitta nop, all'indirizzo 0xbffff2e0 (lo shellcode inizia 4 byte di seguito), ma non succede nulla.
Quindi, l'output dell'errore dice che ha tentato di accedere a 0xbffff2e0 ma non è riuscito a trovare nulla (vedere la parte inferiore dell'immagine: "0xbffff2e0 in ?? ()").
Hai un'idea su cosa sta succedendo?
Cosa mi manca?
Modifica : sto aggiungendo il codice utilizzato in questo esercizio, come richiesto
#include <stdio.h>
#include <string.h>
void secret(){
printf("This is a secret message : you are Awesome!\n");
}
void denied(){
printf("You don't have the permission to see the secret.\n");
}
int main(int argc, char *argv[]){
char buf[20];
strcpy(buf, argv[1]);
printf("%s\n",buf);
if(strcmp(buf, "myPassword") == 0){
secret();
}
else{
denied();
}
return 0;
}