Format string attack: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 74:
* Per prima cosa bisogna codificare l'indirizzo in una stringa a 32 bit secondo la regola little-endian.
* l'indirizzo "0x08480110" verà quindi ribaltato e separato da caratteri speciali diventando: "\x10\x01\x48\x08"
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 caratere esadecimale "0x10" nella posizione corrente. Senza "\x" 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 finchè non raggiunge un NULL byte. Incrementando l’indirizzo di memoria dinamicamente possiamo mappare l’intera memoria di processo!
 
<source lang="c"> printf ("\x10\x01\x48\x08_%08x.%08x-|%s|"); </source>
 
Quindi la seguente invocazione andrà a leggere memoria dall’indirizzo che gli abbiamo fornito finchè non raggiunge un NULL byte. Incrementando l’indirizzo di memoria dinamicamente possiamo mappare l’intera memoria di processo!