Sto facendo conoscenza con Buffer Overflow (BOF) e stavo replicando un attacco semplice descritto da Techorganic . Creano un semplice programma in C chiamato " classic ", che contiene un'evidente vulnerabilità BOF (quando legge fino a 400byte in un buffer da 80byte da STDIN), quindi crea il buffer adeguato per sfruttarlo e salvare detto buffer su " in.txt ". Nonostante abbia corso senza intoppi, una volta terminati tutti i preparativi, esegue il programma con il seguente comando:
user@pc$ (cat in.txt ; cat) | ./classic
Il mio primo pensiero è stato "Holy Moly, cosa sta succedendo lì?", l'idea originale era semplice, eseguire classico e inserire il buffer, la mia intenzione era quella di eseguire come:
user@pc$ ./classic < in.txt
Proprio come qualsiasi altro mortale farebbe. Ma con mia sorpresa, il loro modo funziona, e il mio no.
La linea di fondo è: cosa fa la prima sintassi e qual è la differenza chiave che ha fatto funzionare la loro soluzione e la mia no, nonostante siano semanticamente uguali (o simili, apparentemente).