Format string attack: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Etichette: Sequenze di caratteri ripetuti da parte di un nuovo utente o IP Modifica visuale |
|||
Riga 40:
== Attacchi possibili ==
'''Crash del programma'''
Un modo molto semplice per mandare in crash un programma è passando alla funzione printf() una stringa formattata in questo modo: <source lang="c">printf("%s%s%s%s%s%s%s%s%s%s%s");</source>
Ogni "%s" cerca di visualizzare il contenuto
'''Leggere lo stack'''
Utilizzando sempre la printf(),
<source lang="c">printf( "%08x-%08x-%08x-%08x-%08x\n");</source>
l'output potrebbe essere il seguente:
<source lang="c">4306ea40-43074920-0062de90-70706970-02000002</source>
Questo perché essendo il numero degli argomenti della printf() variabili, questa utilizza la format string per sapere quanti gliene sono stati passati. In questo caso quindi crede (erroneamente) che siano cinque parametri, e andrà quindi a stampare i prossimi cinque indirizzi sullo stack, pensando siamo i parametri richiesti.
Il parametro di formato "%08x" è costituito dai seguenti componenti: x (converti i carratteri in esadecimale), 8 (mostra otto caratteri), 0 (riempi di zeri i caratteri nulli, se presenti).
'''Leggere memoria in ogni locazione di memoria'''
E’ possibile anche leggere aree di memoria diverse dallo stack. Dobbiamo però creare una format function che visualizza il contenuto della memoria all’indirizzo che gli forniamo.
|