![]() Sino a 30 minuti fa' ero in centro...sul lung'arno (dall'italiano "lungo l'arno/lungo le rive dell'arno") a prendere un po' di fresco in compagnia di amici quando ad un certo punto mi sono rotto ed ho pensato...ora torno a casa e scrivo un articolo sul Buffer Overflow aka BOF...che sara' mai questa parolaccia ? void main(){ char array[10]; Avete gia' capito vero...? Se noi abbiamo una stringa con un buffer di 10 elementi ed un'altra con un buffer di 256 significa che nella prima al massimo posso inserire 10 elementi e nella seconda al massimo 10...ma se io prendo in ingresso prima i 256 elementi della stringa grossa e poi con la strcopy li vado a copiare Lo stack::. Iniziamo ad elencare i noiosissimi ma fondamentali pre-requisiti... [___Stack___] Vediamo come viene ritrovato dalla macchina questo spazio di memoria... Registro EBP::. Indica dove inizia lo stack...nn la sua prima locazione ma il suo semplice inizio...come se,vedendo lo stack come una cassettiera, indicasse non il primo cassetto ma la base superiore della cassettiera.
[___Stack___] <--- EBP Registro ESP::. E' colui che si occupa di ricordare l'indirizzo dello stack e ci permette di scorrerlo a piacimento.
[___Stack___] Registro EIP::. E' il registro che contiene le infoz sull'istruzione successiva che la CPU deve eseguire. Istruzione CALL::. Salva EIP in memoria e salta all'istruzione che si vuole eseguire modificando EIP. Istruzione RET::. Dopo una CALL, RET si occupa di riassegnare i valori precedentemente imamagazzinati nello stack sia ad EBP che ad EIP. La vulnerabilita'::. Partiamo da lontano...come ho appena detto...in occasione di una CALL la CPU si preoccupera' di salvare in memoria l'EIP in modo da poter riprendere (dopo la RET) l'istruzione immediatamente successiva alla CALL stessa. push ebp La push salva il vecchio EBP; Risulta ora abbastanza intuitivo che se i dati inseriti superano il buffer,il software non tornera' al vecchio indirizzo ma bensi' nella posizione in cui si trova EIP,quindi...trovera' al suo interno i butez che erano stati inseriti in precedenza causando la sovrascrittura della memoria adiacente al buffer. Effetti dei BOF::. In realta' l'effetto e' solo uno...in presenza di un BOF si puo' eseguire del codice arbitrario e...la cosa risulta veramente interessante... Conclusione::. Ora siete a conoscenza di cosa sia un BOF e per quanto riguarda come utilizzarlo...beh...nn avevo promesso di parlarne... © GnomixLand http://www.gnomixland.com/ |