7.3 KiB
Kujaza Kijito
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikionekana kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA USAJILI!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa kipekee wa NFTs
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Taarifa Msingi
Kujaza kijito ni kama kujaza steki lakini kwenye kijito. Kimsingi inamaanisha kuwa nafasi fulani ilireserviwa kwenye kijito kuhifadhi data fulani na data iliyohifadhiwa ilikuwa kubwa kuliko nafasi iliyoreserviwa.
Kwenye kujaza steki tunajua kwamba baadhi ya rejista kama kipima maelekezo au fremu ya steki itarejeshwa kutoka kwenye steki na inaweza kuwa inawezekana kuitumia vibaya hii. Kwenye kujaza kijito, hakuna habari nyeti iliyohifadhiwa kwa chaguo-msingi kwenye kipande cha kijito kinachoweza kujazwa. Hata hivyo, inaweza kuwa habari nyeti au viashiria, hivyo umuhimu wa udhaifu huu unategemea ni data gani inaweza kubadilishwa na jinsi mshambuliaji anaweza kutumia hii.
{% hint style="success" %} Ili kupata vishikizo vya kujaza unaweza kutumia mifano ile ile kama kwenye kujaza steki. {% endhint %}
Kujaza Staki vs Kujaza Kijito
Kwenye kujaza steki, upangaji na data ambayo itakuwepo kwenye steki wakati udhaifu unaweza kuzinduliwa ni wa kuaminika kwa kiasi kikubwa. Hii ni kwa sababu steki ni mstari, daima inaongezeka kwa kugongana kwenye kumbukumbu, kwenye maeneo maalum ya kukimbia kwa programu kumbukumbu ya steki kawaida inahifadhi aina sawa ya data na ina muundo maalum na viashiria fulani mwishoni mwa sehemu ya steki inayotumiwa na kila kazi.
Hata hivyo, kwenye kujaza kijito, kwa sababu kumbukumbu inayotumiwa si mstari lakini vipande vilivyotengwa kawaida viko kwenye nafasi tofauti za kumbukumbu (si moja karibu na nyingine) kwa sababu ya makorongo na maeneo yanayotenganisha alokesheni kwa ukubwa na kwa sababu kumbukumbu iliyotolewa awali inatumika kabla ya kutenga vipande vipya. Ni ngumu kujua kitu ambacho kitagongana na kile kilichovunjika kwa kujaza kijito. Kwa hivyo, unapopata kujaza kijito, ni muhimu kupata njia ya kuaminika ya kufanya kitu kilichotaka kiwe karibu kwenye kumbukumbu kutoka kile kinachoweza kujazwa.
Moja ya mbinu zinazotumika kwa hili ni Kupamba Kijito ambayo hutumiwa kwa mfano kwenye chapisho hili. Kwenye chapisho inaelezea jinsi wakati wa kernel wa iOS unapokosa kumbukumbu ya kuhifadhi vipande vya kumbukumbu, inapanua kwa ukurasa wa kernel, na ukurasa huu unagawanywa katika vipande vya ukubwa uliotarajiwa ambavyo vitatumika kwa mpangilio (hadi toleo la iOS 9.2, kisha vipande hivi vinatumika kwa njia iliyochanganywa ili kufanya ugumu wa kudukua mashambulizi haya).
Kwa hivyo, kwenye chapisho la awali ambapo kujaza kijito kinatokea, ili kulazimisha kitu kilichovunjika kigongane na mpangaji, kallocs
kadhaa zinalazimishwa na nyuzi kadhaa kujaribu kuhakikisha kuwa vipande vyote vilivyotolewa vimejazwa na ukurasa mpya unatengenezwa.
Ili kulazimisha kujaza hii na vitu vya ukubwa maalum, mgawanyo wa nje unaohusishwa na mlango wa iOS mach ni mgombea bora. Kwa kutengeneza ukubwa wa ujumbe, inawezekana kubainisha ukubwa sahihi wa alokesheni ya kalloc
na wakati mlango wa mach unaohusika unaharibiwa, alokesheni inayohusiana itaachiliwa mara moja kurudi kwa kfree
.
Kisha, baadhi ya hizi nafasi zinaweza kuachiliwa. Orodha ya kufungua ya kalloc.4096
inaachilia vipengele kwa mpangilio wa mwisho kuingia kwanza, ambayo kimsingi inamaanisha kwamba ikiwa baadhi ya nafasi zimeachiliwa na shambulizi linajaribu kuweka vitu vingi waathiriwa wakati ikijaribu kutenga kitu kilichovunjika, ni uwezekano kwamba kitu hiki kitafuatwa na kitu cha waathiriwa.
Mfano wa libc
Kwenye ukurasa huu inawezekana kupata uigizaji wa kujaza kijito wa msingi unaonyesha jinsi ya kubadilisha biti ya awali inayotumiwa ya kipande kinachofuata na nafasi ya ukubwa wa awali inawezekana kuunganisha kipande kilichotumiwa (kwa kufanya ionekane kama haijatumika) na kisha kutenga tena ikiwa inawezekana kubadilisha data inayotumiwa kwenye kielekezi tofauti pia.
Mfano mwingine kutoka protostar kijito 0 unaonyesha mfano wa msingi sana wa CTF ambapo kujaza kijito inaweza kutumiwa kuita kazi ya mshindi kupata bendera.
Kwenye protostar kijito 1 mfano inawezekana kuona jinsi ya kutumia kujaza kijito niwezekane kubadilisha kwenye kipande karibu anwani ambapo data ya kupendelea kutoka kwa mtumiaji itaandikwa.
Mfano wa ARM64
Kwenye ukurasa https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/ unaweza kupata mfano wa kujaza kijito ambapo amri itakayotekelezwa imehifadhiwa kwenye kipande kinachofuata kutoka kwenye kipande kilichojazwa. Kwa hivyo, inawezekana kubadilisha amri inayotekelezwa kwa kuibadilisha kwa shambulio rahisi kama:
python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.