Heap Overflow
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)
Overflow ya heap ni kama stack overflow lakini katika heap. Kimsingi inamaanisha kwamba nafasi fulani ilihifadhiwa katika heap kuhifadhi data fulani na data iliyohifadhiwa ilikuwa kubwa kuliko nafasi iliyohifadhiwa.
Katika stack overflows tunajua kwamba baadhi ya register kama vile pointer ya maagizo au frame ya stack zitarejeshwa kutoka kwenye stack na inaweza kuwa na uwezekano wa kutumia hii vibaya. Katika kesi ya heap overflows, hakuna taarifa nyeti iliyohifadhiwa kwa chaguo-msingi katika kipande cha heap ambacho kinaweza kujaa. Hata hivyo, inaweza kuwa taarifa nyeti au pointers, hivyo umuhimu wa udhaifu huu unategemea ni data ipi inaweza kuandikwa upya na jinsi mshambuliaji anaweza kutumia hii vibaya.
Ili kupata offsets za overflow unaweza kutumia mifumo ile ile kama katika stack overflows.
Katika stack overflows, mpangilio na data ambayo itakuwa katika stack wakati udhaifu unaweza kuanzishwa ni wa kuaminika sana. Hii ni kwa sababu stack ni ya mstari, kila wakati ikiongezeka katika kumbukumbu inayopingana, katika sehemu maalum za programu inayoendesha kumbukumbu ya stack kawaida huhifadhi aina sawa ya data na ina muundo maalum na pointers kadhaa mwishoni mwa sehemu ya stack inayotumiwa na kila kazi.
Hata hivyo, katika kesi ya overflow ya heap, kumbukumbu inayotumika si ya mstari bali vipande vilivyotengwa kawaida viko katika nafasi tofauti za kumbukumbu (sio kando ya nyingine) kwa sababu ya bins na maeneo yanayogawanya allocations kwa ukubwa na kwa sababu kumbukumbu iliyotolewa awali inatumika kabla ya kutenga vipande vipya. Ni ngumu kujua kitu ambacho kitakuwa kinagongana na kile kilicho hatarini kwa overflow ya heap. Hivyo, wakati overflow ya heap inapatikana, inahitajika kupata njia ya kuaminika kufanya kitu kinachotakiwa kuwa karibu katika kumbukumbu na kile kinachoweza kujaa.
Moja ya mbinu zinazotumiwa kwa hili ni Heap Grooming ambayo inatumika kwa mfano katika chapisho hili. Katika chapisho inaelezwa jinsi wakati katika kernel ya iOS wakati eneo linapokosa kumbukumbu ya kuhifadhi vipande vya kumbukumbu, linaipanua kwa ukurasa wa kernel, na ukurasa huu unagawanywa katika vipande vya ukubwa unaotarajiwa ambavyo vitatumika kwa mpangilio (hadi toleo la iOS 9.2, kisha vipande hivi vinatumika kwa njia ya nasibu ili kuleta ugumu katika matumizi mabaya ya mashambulizi haya).
Kwa hivyo, katika chapisho la awali ambapo overflow ya heap inatokea, ili kulazimisha kipande kilichojazwa kuungana na agizo la mwathirika, kallocs
kadhaa zinapaswa kulazimishwa na nyuzi kadhaa ili kujaribu kuhakikisha kwamba vipande vyote vilivyotolewa vimejaa na kwamba ukurasa mpya unaundwa.
Ili kulazimisha kujaza hili na vitu vya ukubwa maalum, allocation ya nje ya mstari inayohusishwa na iOS mach port ni mgombea bora. Kwa kubuni ukubwa wa ujumbe, inawezekana kubaini kwa usahihi ukubwa wa kalloc
allocation na wakati mach port inayohusiana inaharibiwa, allocation inayohusiana itarejeshwa mara moja kwa kfree
.
Kisha, baadhi ya hizi placeholders zinaweza kuwa zimeachwa. Orodha ya bure ya kalloc.4096
inatoa vipengele kwa mpangilio wa mwisho-kuingia-wa-kwanza, ambayo kimsingi inamaanisha kwamba ikiwa baadhi ya placeholders zimeachwa na jaribio la kutumia vibaya linajaribu kutenga vitu kadhaa vya mwathirika wakati wa kujaribu kutenga kitu kilicho hatarini kujaa, kuna uwezekano kwamba kitu hiki kitafuatiwa na kitu cha mwathirika.
Katika ukurasa huu inawezekana kupata mfano wa msingi wa overflow ya Heap unaoonyesha jinsi ya kuandika upya bit ya prev inatumika ya kipande kinachofuata na nafasi ya ukubwa wa prev inawezekana kuunganisha kipande kilichotumika (kwa kulifanya kufikiri hakijatumika) na kisha kukitenga tena ikiwa na uwezo wa kuandika data inayotumiwa katika pointer tofauti pia.
Mfano mwingine kutoka protostar heap 0 unaonyesha mfano wa msingi sana wa CTF ambapo overflow ya heap inaweza kutumika vibaya kuita kazi ya mshindi ili kupata bendera.
Katika mfano wa protostar heap 1 inawezekana kuona jinsi ya kutumia vibaya overflow ya buffer inawezekana kuandika upya katika kipande kilichokaribu anwani ambapo data ya nasibu kutoka kwa mtumiaji itandikwa.
Katika ukurasa https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/ unaweza kupata mfano wa overflow ya heap ambapo amri ambayo itatekelezwa inahifadhiwa katika kipande kinachofuata kutoka kwa kipande kilichojazwa. Hivyo, inawezekana kubadilisha amri inayotekelezwa kwa kuandika upya kwa kutumia exploit rahisi kama:
Tunatumia udhaifu wa Integer Overflow kupata Heap Overflow.
Tunaharibu viashiria vya kazi ndani ya struct
ya kipande kilichozidi ili kuweka kazi kama system
na kupata utekelezaji wa msimbo.
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)