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.