Lo shellcode non viene eseguito nonostante l'indirizzo corretto su EIP

1

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;
}
    
posta Loïc N. 08.12.2016 - 04:05
fonte

2 risposte

2

Lo stack è probabilmente non eseguibile. Compila il programma vulnerabile come questo per disabilitare la protezione:

gcc -z execstack -o program program.c
    
risposta data 08.12.2016 - 07:05
fonte
1

Oltre alle risposte già date qui, potresti voler controllare i personaggi cattivi. Il tuo shellcode potrebbe contenere alcuni che potrebbero portare al problema che stai incontrando. Potrebbe anche essere la ragione per cui la sovrascrittura EIP non funziona come previsto, dove uno (o più) byte (s) nell'indirizzo che stai cercando di iniettare è un cattivo carattere. Per i principianti, 00, 0d e 0a sono quasi sempre dei brutti personaggi.

    
risposta data 05.01.2017 - 03:20
fonte

Leggi altre domande sui tag