Sto cercando di conoscere i buffer overflow. Ho scritto un semplice programma C che chiama una funzione chiamata checkpw()
che alloca un array di caratteri di 10 byte di grandi dimensioni. Quando analizzo il codice operativo vedo che in realtà alloca 16 byte nello stack.
Il mio obiettivo era quello di sovraccaricare quel buffer e scrivere sopra l'indirizzo del puntatore di ritorno, che ho eseguito con successo. L'ho indicato un po 'più in basso nel buffer dove ho il codice shell, dove la prima istruzione è xor eax,eax
.
Durante lo smontaggio di GDB posso si
singolo passaggio attraverso i codici op correttamente finché lo strappo (puntatore di istruzioni) punta esattamente dove voglio che punti (0x00007fffffffde40).
Vedo persino =>
quando esamino quella posizione di memoria con x/i 0x00007fffffffde40
che visualizza quindi il codice op xor eax,eax
.
Il problema è che non appena mi impegno con l'istruzione successiva con si
ottengo un SEGFAULT.
Quando ho compilato il programma, ho fatto in modo di includere l'impostazione -fno-stack-protector
dell'interruttore e ho anche eseguito echo 0 > /proc/sys/kernel/randomize_va_space
Oltre a questo, sono bloccato. Perché sto ricevendo un SEGFAULT invece di eseguire lo xor?