BF Addresses in the Stack
Ikiwa unakabiliana na binary iliyolindwa na canary na PIE (Position Independent Executable) labda unahitaji kupata njia ya kuzipuuza.
Tambua kwamba checksec
inaweza isigundue kuwa binary imekingwa na canary ikiwa ilikompiliwa kistatiki na haiwezi kutambua kazi.
Hata hivyo, unaweza kugundua hii kwa mikono ikiwa unagundua kwamba thamani imesave kwenye stack mwanzoni mwa wito wa kazi na thamani hii inachunguzwa kabla ya kutoka.
Anwani za Brute-Force
Ili kuzipuuza PIE unahitaji kuvuja anwani fulani. Na ikiwa binary haivuji anwani yoyote bora kufanya ni kuzipuuza RBP na RIP zilizohifadhiwa kwenye stack katika kazi yenye kasoro. Kwa mfano, ikiwa binary inalindwa kwa kutumia canary na PIE, unaweza kuanza kuzipuuza canary, kisha baadaye Byte 8 (x64) itakuwa RBP iliyohifadhiwa na Byte 8 itakuwa RIP iliyohifadhiwa.
Inatarajiwa kwamba anwani ya kurudi ndani ya stack inamilikiwa na msimbo wa binary kuu, ambao, ikiwa kasoro iko katika msimbo wa binary, kawaida itakuwa hivyo.
Kuzipuuza RBP na RIP kutoka kwa binary unaweza kugundua kwamba byte sahihi iliyoguessed ni sahihi ikiwa programu inatoa kitu au tu haivunjiki. Kazi ile ile kama iliyotolewa kwa kuzipuuza canary inaweza kutumika kuzipuuza RBP na RIP:
Kitu cha mwisho unachohitaji kushinda PIE ni kuhesabu anwani muhimu kutoka kwa anwani zilizovuja: RBP na RIP.
Kutoka kwa RBP unaweza kuhesabu mahali ambapo unaiandika shel yako kwenye steki. Hii inaweza kuwa muhimu sana kujua mahali ambapo utaandika mfuatano wa herufi "/bin/sh\x00" ndani ya steki. Kuhesabu umbali kati ya RBP iliyovuja na shel yako unaweza tu kuweka kituo cha kusitisha baada ya kuvuja RBP na kuangalia mahali ambapo shel yako imehifadhiwa, kisha, unaweza kuhesabu umbali kati ya shel yako na RBP:
Kutoka kwa RIP unaweza kuhesabu anwani ya msingi ya faili ya PIE ambayo ndio utahitaji kuunda mtandao wa ROP halali.
Kuhesabu anwani ya msingi fanya tu objdump -d vunbinary
na angalia anwani za hivi karibuni zilizochambuliwa:
Katika mfano huo unaweza kuona kwamba Byte 1 na nusu tu inahitajika kutambua msimbo wote, basi, anwani ya msingi katika hali hii itakuwa RIP iliyovuja lakini ikimalizika kwa "000". Kwa mfano ikiwa ulivuja 0x562002970ecf
anwani ya msingi itakuwa 0x562002970000
Maboresho
Kulingana na baadhi ya uchunguzi kutoka kwenye chapisho hili, inawezekana kwamba wakati wa kuvuja thamani za RBP na RIP, server haitaanguka na baadhi ya thamani ambazo sio sahihi na script ya BF itadhani amepata zile sahihi. Hii ni kwa sababu inawezekana kwamba baadhi ya anwani hazitavunja hata kama sio zile sahihi kabisa.
Kulingana na chapisho hilo la blogu, inapendekezwa kuongeza kuchelewesha fupi kati ya maombi kwa server inayoingizwa.
Last updated