Perché EIP è stato salvato finora?

1

Sto cercando di sfruttare la vulnerabilità del seguente programma causando un buffer overflow:

    #include <stdio.h>
    #include <string.h>

    int main (int argc, char ** argv){
        char message[20];

        if (argc != 2){
            printf ("Usage: %s <message>\n", argv[0]);
            return -1;
        }

        strcpy (message, argv[1]);
        printf ("Your message: %s\n", message);
        return 0;
    }

In teoria, lo stack dovrebbe apparire come questo

     _____________________________
    |     Saved EIP (1 byte)      |
    ------------------------------|
    |     Saved EBP (1 byte)      |
    ------------------------------|
    |                             |
    |                             |
    |     message (20 bytes)      |
    |                             |
    |_____________________________|

Quindi, in teoria, per sovrascrivere l'EIP salvato, ho bisogno di 20 + 1 = 2 caratteri nel buffer per raggiungere EIP salvato. Ma risultano necessari 32 caratteri per raggiungerlo. Perché è così?

Un'altra cosa che ho notato, è che subito dopo aver salvato EBP nello stack e sostituito ESP con EBP, la seguente istruzione ASM è subl 0x30, esp , quando sono necessari solo 20 byte per message . Qualcuno può spiegare per favore? Grazie.

    
posta user141085 04.03.2017 - 19:10
fonte

0 risposte

Leggi altre domande sui tag