Format Strings
Osnovne informacije
U programskom jeziku C printf
je funkcija koja se može koristiti za ispisivanje stringova. Prvi parametar koji ova funkcija očekuje je čisti tekst sa formatima. Sledeći očekivani parametri su vrednosti koje će zameniti formatere iz čistog teksta.
Druge ranjive funkcije su sprintf()
i fprintf()
.
Ranjivost se pojavljuje kada napadačev tekst bude korišćen kao prvi argument ovoj funkciji. Napadač će moći da kreira specijalan unos zloupotrebom mogućnosti formatiranja stringova funkcije printf
kako bi pročitao i upisao bilo koje podatke na bilo koju adresu (čitljivo/zapisivo). Na taj način može izvršiti proizvoljan kod.
Formatteri:
Primeri:
Ranjiv primer:
Normalna upotreba:
Sa nedostajućim argumentima:
fprintf ranjiv:
Pristupanje pokazivačima
Format %<n>$x
, gde je n
broj, omogućava da se printf-u pokaže da izabere n-ti parametar (sa steka). Dakle, ako želite da pročitate 4. parametar sa steka koristeći printf, možete uraditi:
i pročitao bi ste od prvog do četvrtog parametra.
Ili možete uraditi:
i pročitajte direktno četvrti.
Primetite da napadač kontroliše parametar pr
intf
, što u osnovi znači da njegov unos će biti na steku kada se pozove printf
, što znači da bi mogao da upiše određene memorijske adrese na stek.
Napadač koji kontroliše ovaj unos, moći će dodati proizvoljnu adresu na stek i naterati printf
da im pristupi. U sledećem odeljku će biti objašnjeno kako iskoristiti ovaj ponašanje.
Proizvoljno čitanje
Moguće je koristiti format %n$s
da bi printf
dobio adresu smeštenu na n poziciji, sledeći je i odštampao kao da je to string (štampa do pronalaska 0x00). Dakle, ako je osnovna adresa binarnog fajla 0x8048000
, i znamo da korisnički unos počinje na 4. poziciji na steku, moguće je odštampati početak binarnog fajla sa:
Imajte na umu da ne možete staviti adresu 0x8048000 na početak unosa jer će string biti završen sa 0x00 na kraju te adrese.
Pronalaženje ofseta
Da biste pronašli ofset za vaš unos, možete poslati 4 ili 8 bajtova (0x41414141
), praćeno sa %1$x
i povećavati vrednost dok ne dobijete A's
.
Last updated