Heap Overflow
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
'n Heap overflow is soos 'n stack overflow maar in die heap. Basies beteken dit dat 'n sekere ruimte in die heap gereserveer is om data te stoor en gestoorde data was groter as die gereserveerde ruimte.
In stack overflows weet ons dat sommige registers soos die instruksie-aanwyser of die stack-raam herstel gaan word vanaf die stack en dit kan moontlik misbruik word. In die geval van heap overflows, daar is geen sensitiewe inligting wat standaard in die heap chunk gestoor word wat oorgestroom kan word nie. Dit kan egter sensitiewe inligting of aanwysers wees, so die kritikaliteit van hierdie kwesbaarheid hang af van watter data oorgeskryf kan word en hoe 'n aanvaller dit kan misbruik.
Om overflow offsets te vind kan jy dieselfde patrone gebruik soos in stack overflows.
In stack overflows is die rangskikking en data wat teenwoordig gaan wees in die stack op die oomblik dat die kwesbaarheid geaktiveer kan word redelik betroubaar. Dit is omdat die stack lineêr is, altyd toeneem in botsende geheue, in spesifieke plekke van die program se uitvoering stoor die stack geheue gewoonlik soortgelyke tipe data en dit het 'n spesifieke struktuur met sommige aanwysers aan die einde van die stack deel wat deur elke funksie gebruik word.
In die geval van 'n heap overflow, is die gebruikte geheue egter nie lineêr nie, maar gealloceerde chunks is gewoonlik in geskeide posisies van geheue (nie een langs die ander nie) as gevolg van bins en sone wat allokasies volgens grootte skei en omdat vorige vrygemaakte geheue gebruik word voordat nuwe chunks gealloceer word. Dit is komplikasies om die objek te weet wat gaan bots met die een wat kwesbaar is vir 'n heap overflow. So, wanneer 'n heap overflow gevind word, is dit nodig om 'n betroubare manier te vind om die gewenste objek volgende in geheue te maak van die een wat oorgestroom kan word.
Een van die tegnieke wat hiervoor gebruik word is Heap Grooming wat gebruik word byvoorbeeld in hierdie pos. In die pos word verduidelik hoe wanneer in die iOS-kern wanneer 'n sone uit geheue vir die stoor van chunks van geheue, dit uitbrei deur 'n kernbladsy, en hierdie bladsy word gesplit in chunks van die verwagte groottes wat in volgorde gebruik sal word (tot iOS weergawe 9.2, dan word hierdie chunks op 'n gerandomiseerde manier gebruik om die uitbuiting van hierdie aanvalle te bemoeilik).
Daarom, in die vorige pos waar 'n heap overflow plaasvind, om die oorgestroomde objek te dwing om met 'n slagoffer se volgorde te bots, word verskeie kallocs
deur verskeie drade gedwing om te probeer verseker dat al die vrye chunks gevul is en dat 'n nuwe bladsy geskep word.
Om hierdie vul met objek van 'n spesifieke grootte te dwing, is die out-of-line allokasie geassosieer met 'n iOS mach port 'n ideale kandidaat. Deur die grootte van die boodskap te vervaardig, is dit moontlik om die grootte van kalloc
allokasie presies te spesifiseer en wanneer die ooreenstemmende mach port vernietig word, sal die ooreenstemmende allokasie onmiddellik teruggegee word aan kfree
.
Dan kan sommige van hierdie plekhouers vrygestel word. Die kalloc.4096
vrye lys stel elemente in 'n laaste-in-eerste-uit volgorde vry, wat basies beteken dat as sommige plekhouers vrygestel word en die uitbuiting probeer om verskeie slagoffer objek te allokeer terwyl dit probeer om die objek wat kwesbaar is vir overflow te allokeer, is dit waarskynlik dat hierdie objek gevolg sal word deur 'n slagoffer objek.
Op hierdie bladsy is dit moontlik om 'n basiese Heap overflow emulering te vind wat wys hoe om die prev in gebruik bit van die volgende chunk te oorskry en die posisie van die prev grootte, dit is moontlik om 'n gebruikte chunk te konsolideer (deur dit te laat dink dit is ongebruikte) en dan dit weer te allokeer terwyl dit in staat is om data wat in 'n ander aanwyser gebruik word, ook te oorskry.
'n Ander voorbeeld van protostar heap 0 wys 'n baie basiese voorbeeld van 'n CTF waar 'n heap overflow misbruik kan word om die wenner funksie aan te roep om die vlag te kry.
In die protostar heap 1 voorbeeld is dit moontlik om te sien hoe om 'n buffer overflow te misbruik, dit is moontlik om in 'n naby chunk 'n adres te oorskry waar arbitraire data van die gebruiker geskryf gaan word.
Op die bladsy https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/ kan jy 'n heap overflow voorbeeld vind waar 'n opdrag wat uitgevoer gaan word, gestoor word in die volgende chunk van die oorgestroomde chunk. So, dit is moontlik om die uitgevoerde opdrag te verander deur dit te oorskry met 'n maklike uitbuiting soos:
Ons gebruik 'n Integer Overflow kwesbaarheid om 'n Heap Overflow te verkry.
Ons korrigeer pointers na 'n funksie binne 'n struct
van die oorgeloopde stuk om 'n funksie soos system
in te stel en kode-uitvoering te verkry.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)