Format string attack: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
fix: accenti errati e ortografia |
|||
Riga 73:
Vogliamo leggere aree di memoria vicino a questo indirizzo ‘0x08480110’:
* Per prima cosa bisogna codificare l'indirizzo in una stringa a 32 bit secondo la regola little-endian.
* l'indirizzo "0x08480110"
La codifica dell’indirizzo scelto in una stringa a 32 bit "\x10\x01\x48\x08" dove il carattere "\x10" inserito in una stringa dice al compilatore di mettere un
Il carattere "\x" dice al compilatore di mettere il carattere esadecimanle "0x10" nella posizione corrente sullo stack. Altrimenti il valore ASCII salvato nella stringa sarebbe ‘1’ e ‘0’ i cui rispettivi valori ASCII sono ‘49’ e ‘48’, che risulterebbe errato.
Quindi la seguente invocazione andrà a leggere memoria dall’indirizzo che gli abbiamo fornito
'''Scrivere un intero in (qualsiasi) locazione di memoria'''
Riga 85:
<source lang=c>int i;
printf ("12345%n", &i);</source>
Con questo parametro il numero di caratteri scritti prima di lui
Quindi usando lo stesso metodo implementato per visualizzare il contenuto della memoria, possiamo andare a scrivere un intero (praticamente) ovunque.
Basta sostituire "%n" al posto di "%s" ed il contenuto della cella "0x10014808" verrà sovrascritto. L'attaccante potrebbe quindi andare a cambiare certi flag che gli garantiscano il controllo o sovrascrivere celle con indirizzi di ritorno a nostro piacimento.
|