Per prima cosa probabilmente dovrai abilitare il supporto per il carattere% n poiché è disabilitato per impostazione predefinita su alcuni sistemi operativi. Il programma vulnerabile dovrebbe avere la seguente dichiarazione:
_set_printf_count_output(1);
Successivamente, dovrai determinare dove l'indirizzo di ritorno che desideri sovrascrivere è archiviato nello stack. In questo caso, potresti sovrascrivere l'indirizzo di ritorno di printf
o main
. Una di queste posizioni sarà necessario sovrascrivere con il valore 00112233.
È necessario sovrascrivere l'indirizzo di ritorno un byte alla volta generando un input a printf
per essere l'equivalente di
printf("%naaaaaaaaaaa%naaaaaaaaaaa%naaaaaaaaaaa%n",&LSB,&LSB+1,&LSB+2,&MSB);
Il primo% n scriverà effettivamente un byte zero o null sull'indirizzo di ritorno LSB poiché il numero totale di caratteri che printf ha scritto in quel punto è zero. Il secondo% n stamperà il valore 11 sul secondo byte dell'indirizzo di ritorno, il terzo 22 e così via. Lo lascerò come esercizio per creare il vero carico utile [].