Buffer Overflow CTF challenge

2

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.

    
posta brad 16.04.2018 - 18:29
fonte

1 risposta

1

Ho finalmente capito quale fosse il problema con l'aiuto di perror 1 . Dal momento che l'esecuzione sembrava seguire il percorso corretto quando ho specificato l'input attraverso un file, ho intuito che forse la shell era in esecuzione, ma si stava chiudendo automaticamente. La risposta referenziata aveva una sezione chiamata "Mantieni lo stdin aperto dopo l'iniezione", che mi ha indirizzato nella giusta direzione e ha confermato che la shell era effettivamente in esecuzione.

Sono riuscito a ottenere la shell specificando l'input in questo modo: (cat input.txt; cat) | ./program

    
risposta data 16.04.2018 - 19:17
fonte

Leggi altre domande sui tag