Utilizzo (cat $ file; cat) per eseguire un semplice exploit BOF

2

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).

    
posta Fernando Pérez 06.04.2017 - 16:18
fonte

1 risposta

0

Il primo comando cat alimenta l'input da in.txt a stdin del programma. Il secondo comando cat legge semplicemente dallo stdin corrente e lo invia al programma, fornendo così a chi esegue questa riga di comando un modo per alimentare i propri dati dal terminale al programma e in questo modo probabilmente a qualche /bin/sh o simili eseguiti da questo programma.

Contrariamente a questo, basta usare program < in.txt per alimentare solo in.txt allo stdin del programma e dopo questo stdin del programma viene chiuso. Ciò significa che nessun utente immesso dal terminale viene inviato al programma e alla shell in esecuzione al suo interno.

    
risposta data 06.04.2017 - 16:24
fonte

Leggi altre domande sui tag