Format string attack: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 66:
La nostra format function mantiene all’interno dello stack il puntatore alla locazione di memoria del parametro di formato. Se fossimo in grado di far puntare quel puntatore all’area di memoria che ci interessa, potremmo dare quell’indirizzo al formato parametro "%s" così che, invocando la printf(), questa leggerà la memoria da quell’indirizzo fino a che non trova un carattere terminatore ‘0’.
 
Utilizzando ad esempio la seguenti stringa di formato:[[File:StackMemory.png|miniatura|446x446px|Salvataggio variabili sullo stack]]<source lang="c"> printf ("\x10\x01\x48\x08_%08x-%08x-%08x-|%s|"); </source>
<source lang="c"> printf ("\x10\x01\x48\x08_%08x-%08x-%08x-|%s|"); </source>
[[File:StackMemory.png|miniatura|446x446px|Salvataggio variabili sullo stack]]
la sequenza di "%08x" incrementa il puntatore interno della format function verso il top dello stack. Dopo alcuni di questi incrementi, lo stack pointer punterà esattamente all'indirizzo della nostra format string. Con il giusto numero di ‘%08x’ potremmo visualizzare la memoria (codificata in ASCII) da un qualsiasi indirizzo.