Io di solito eseguire il mio programma con:gdb - il debug con l'ingresso in filodiffusione (non argomenti)
perl -e 'print "A"x200' | ./vuln_prog
Lo stdin viene consumato da una funzione gets()
in C++.
Se questo fosse solo un argomento di comando, potevo aprire gdb facendo:
gdb ./vuln_prog
run $(perl -e 'print "A"x200')
Tuttavia, il mio scenario non è un argomento di comando, ma piuttosto di ingresso (? STDIN). Come faccio a eseguire il debug di questo in gdb? Ho provato un sacco di opzioni, ma niente sembra funzionare davvero.
Normalmente eseguo semplicemente gdb sul processo e quando richiede l'input dell'utente, inseriscilo, tuttavia non voglio digitare solo "A". Voglio digitare tutti i caratteri da \ x00- \ xff, che non riesco a digitare.
Perché stai usando 'gets'? Voglio dire a volte è accettabile (come se tu stessi semplicemente scrivendo un programma veloce per testare qualcosa, o se il programma verrà eseguito solo con input attendibili) ma sono curioso. – flarn2006
Non era il mio codice. È stato per una divertente sfida di reverse engineering, in cui è stato fornito il codice. – mandreko
Oh okay. È stato "usato" intenzionalmente * perché * era vulnerabile, come parte di una possibile soluzione alla sfida? – flarn2006