ho il seguente programma di esempio:execve ("/ bin/sh", 0, 0); in un tubo
#include <stdio.h>
int
main(int argc, char ** argv){
char buf[100];
printf("Please enter your name: ");
fflush(stdout);
gets(buf);
printf("Hello \"%s\"\n", buf);
execve("/bin/sh", 0, 0);
}
I e quando corro senza tubo funziona come dovrebbe e restituisce una sh
promt:
bash$ ./a.out
Please enter your name: warning: this program uses gets() which is unsafe.
testName
Hello "testName"
$ exit
bash$
Ma questo non funziona in una pipe, penso di sapere perché, ma non riesco a capire una soluzione. Esempio di esecuzione sotto.
bash$ echo -e "testName\npwd" | ./a.out
Please enter your name: warning: this program uses gets() which is unsafe.
Hello "testName"
bash$
Immagino che questo ha qualcosa a che fare con il fatto che gets
svuota stdin
in modo tale che /bin/sh
riceve un EOF e promtly si chiude senza un messaggio di errore.
Ma come posso aggirare questo (senza modificare il programma, se possibile, e non rimuovere gets
, se non lo è) in modo che ottenga un promt anche se fornisco l'input attraverso una pipe?
P.S. Lo sto eseguendo su un dispositivo FreeBSD (4.8) DS
*** MAI *** usare 'ottiene'. ** sempre ** apre un buco di sicurezza del buffer overflow. – ThiefMaster
Lo so;) ...questo fa parte di un tentativo di buffer overflow su un computer presso il laboratorio di sicurezza della mia università. Puramente accademico. = D –