Ho problemi a risolvere una sfida che richiede l'utilizzo di un buffer overflow per sovrascrivere l'indirizzo di ritorno e chiamare un'altra funzione che fornisce una shell. Il programma richiede all'utente l'input, che può essere utilizzato per sovrascrivere il buffer.
Posso sovrascrivere manualmente l'indirizzo in gdb e ottenere la shell, tuttavia, quando tento di inserire dati nel programma attraverso un file, usando "run < input.txt" (ancora in gdb) non funziona - Ho appena ottenuto un segfault. Anche quando il layout della memoria dopo l'immissione dei dati appare esattamente lo stesso e lo spostamento nel programma ritorna correttamente ed esegue la funzione "give_shell ()".
Anche se inserisco solo un singolo carattere usando il file di input e poi sovrascrivo manualmente l'indirizzo di ritorno, non funziona. L'unico modo per ottenere la shell è inserire l'input manualmente, interrompere, sovrascrivere l'indirizzo di ritorno e quindi continuare.
Qualcuno ha idea del motivo per cui l'esecuzione sarebbe diversa quando inserisco manualmente l'input per il programma rispetto all'invio dell'input tramite un file in gdb?
Grazie.