Format Strings
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
If you are interested in hacking career and hack the unhackable - we are hiring! (fluent polish written and spoken required).
Katika C printf
ni kazi inayoweza kutumika kuchapisha maandiko fulani. Parameta ya kwanza ambayo kazi hii inatarajia ni maandishi halisi yenye waandishi wa fomati. Parameta zinazofuata zinazotarajiwa ni thamani za kuchukua nafasi ya waandishi wa fomati kutoka kwa maandiko halisi.
Kazi nyingine zenye udhaifu ni sprintf()
na fprintf()
.
Udhaifu huu unatokea wakati maandishi ya mshambuliaji yanapotumika kama hoja ya kwanza kwa kazi hii. Mshambuliaji ataweza kuunda ingizo maalum linalotumia uwezo wa printf format kusoma na kuandika data yoyote katika anwani yoyote (inasomeka/inaandikwa). Kwa njia hii, kuwa na uwezo wa kutekeleza msimbo wowote.
Mifano:
Mfano unaoweza kuathiriwa:
Matumizi ya Kawaida:
Na Hoja Zinazokosekana:
fprintf inayoweza kutumika:
Muundo %<n>$x
, ambapo n
ni nambari, unaruhusu kuonyesha kwa printf kuchagua parameter ya n (kutoka kwenye stack). Hivyo ikiwa unataka kusoma parameter ya 4 kutoka kwenye stack ukitumia printf unaweza kufanya:
na ungeweza kusoma kutoka kwa param ya kwanza hadi ya nne.
Au unaweza kufanya:
na kusoma moja kwa moja ya nne.
Kumbuka kwamba mshambuliaji anadhibiti printf
parameta, ambayo kimsingi inamaanisha kwamba ingizo lake litakuwa kwenye stack wakati printf
inaitwa, ambayo inamaanisha kwamba anaweza kuandika anwani maalum za kumbukumbu kwenye stack.
Mshambuliaji anayekontrol ingizo hili, ataweza kuongeza anwani zisizo za kawaida kwenye stack na kufanya printf
izifike. Katika sehemu inayofuata itafafanuliwa jinsi ya kutumia tabia hii.
Inawezekana kutumia formatter %n$s
kufanya printf
ipate anwani iliyoko katika n nafasi, ikifuatia na kuichapisha kana kwamba ni string (chapisha hadi 0x00 ipatikane). Hivyo kama anwani ya msingi ya binary ni 0x8048000
, na tunajua kwamba ingizo la mtumiaji linaanza katika nafasi ya 4 kwenye stack, inawezekana kuchapisha mwanzo wa binary kwa:
Kumbuka kwamba huwezi kuweka anwani 0x8048000 mwanzoni mwa ingizo kwa sababu mfuatano utawekwa kwenye 0x00 mwishoni mwa anwani hiyo.
Ili kupata offset kwa ingizo lako unaweza kutuma bytes 4 au 8 (0x41414141
) ikifuatiwa na %1$x
na kuongeza thamani hadi upate A's
.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)