11 KiB
Ongeorden Bin Aanval
Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat Kontroleer die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling van eksklusiewe NFTs
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel jou haktruuks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
Vir meer inligting oor wat 'n ongeorden bin is, kyk na hierdie bladsy:
{% content-ref url="bins-and-memory-allocations.md" %} bins-and-memory-allocations.md {% endcontent-ref %}
Ongeorden lys kan die adres na ongesorteerde brokke (av)
in die bk
-adres van die brokkie skryf. Daarom, as 'n aanvaller die adres van die bk-aanwyser in 'n brokkie binne die ongeorden bin kan verander, kan hy in staat wees om daardie adres in 'n willekeurige adres te skryf wat nuttig kan wees om 'n libc-adres te lek of om sekere verdediging te omseil.
Dus, hierdie aanval maak dit basies moontlik om 'n willekeurige adres met 'n groot nommer te oorskryf ( 'n adres wat 'n heap-adres of 'n libc-adres kan wees) soos 'n stapeladres wat gelekte kan word of 'n beperking soos die globale veranderlike global_max_fast
om vinnige binne met groter groottes te skep (en oorgaan van 'n ongeorden bin aanval na 'n vinnige bin aanval).
{% hint style="success" %}
Deur na die voorbeeld te kyk wat verskaf is in https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle en 0x4000 en 0x5000 in plaas van 0x400 en 0x500 as brokkie groottes te gebruik (om tcaches te vermy), is dit moontlik om te sien dat teenwoordig die fout malloc(): ongeorden dubbel gekoppelde lys gekorrupteer
geaktiveer word.
Daarom vereis hierdie ongeorden bin aanval nou (onder andere kontroles) ook dat die dubbel gekoppelde lys reggestel moet word sodat dit omseil word victim->bck->fd == victim
of nie victim->fd == av (arena)
. Dit beteken dat die adres waar ons wil skryf, die adres van die vals brokkie in sy fd
-posisie moet hê en dat die vals brokkie fd
na die arena moet wys.
{% endhint %}
{% hint style="danger" %} Let daarop dat hierdie aanval die ongeorden bin (dus klein en groot ook) korruptheid. Dus kan ons nou slegs toewysings van die vinnige bin gebruik ( 'n meer komplekse program kan ander toewysings doen en vasloop), en om dit te aktiveer moet ons dieselfde grootte toewys of die program sal vasloop.
Let daarop dat die maak van global_max_fast
kan help in hierdie geval deur te vertrou dat die vinnige bin in staat sal wees om al die ander toewysings te hanteer totdat die uitbuiting voltooi is.
{% endhint %}
Die kode van guyinatuxedo verduidelik dit baie goed, alhoewel as jy die mallocs wysig om geheue groot genoeg toe te ken sodat dit nie in 'n tcache eindig nie, kan jy sien dat die voorheen genoemde fout voorkom wat hierdie tegniek voorkom: malloc(): ongeorden dubbel gekoppelde lys gekorrupteer
Ongeorden Bin Infoleak Aanval
Dit is eintlik 'n baie basiese konsep. Die brokkies in die ongeorden bin gaan dubbel aanwysers hê om die bin te skep. Die eerste brokkie in die ongeorden bin sal eintlik die FD en die BK skakels hê wat na 'n deel van die hoofarena (libc) wys.
Daarom, as jy 'n brokkie binne 'n ongeorden bin kan plaas en dit lees (gebruik na vry) of dit weer kan toewys sonder om ten minste 1 van die aanwysers te oorskryf om dit dan te lees, kan jy 'n libc inligtingslek hê.
'n Soortgelyke aanval wat in hierdie skryfstuk gebruik is, was om 'n 4 brokkie struktuur (A, B, C en D - D is slegs om konsolidasie met die boonste brokkie te voorkom) te misbruik sodat 'n nulbyte-oorvloei in B gebruik is om C aan te dui dat B ongebruik was. Ook, in B is die prev_size
-data gewysig sodat die grootte in plaas daarvan om die grootte van B was A+B.
Toe is C vrygestel en gekonsolideer met A+B (maar B was nog in gebruik). 'n Nuwe brokkie van grootte A is toegewys en toe is die libc gelekte adresse in B geskryf vanwaar hulle gelekte is.
Verwysings & Ander voorbeelde
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#hitcon-training-lab14-magic-heap
- Die doel is om 'n globale veranderlike met 'n waarde groter as 4869 te oorskryf sodat dit moontlik is om die vlag te kry en PIE is nie geaktiveer nie.
- Dit is moontlik om brokkies van willekeurige groottes te genereer en daar is 'n geheue oorvloei met die gewenste grootte.
- Die aanval begin deur 3 brokkies te skep: brokkie0 om die oorvloei te misbruik, brokkie1 om oorvloei te hê en brokkie2 sodat die boonste brokkie nie konsolideer met die voriges nie.
- Dan word brokkie1 vrygestel en brokkie0 word oorvloei sodat die
bk
-aanwyser van brokkie1 wys na:bk = magic - 0x10
- Dan word brokkie3 toegewys met dieselfde grootte as brokkie1, wat die ongeorden bin aanval sal aktiveer en die waarde van die globale veranderlike sal wysig, wat dit moontlik maak om die vlag te kry.
- https://guyinatuxedo.github.io/31-unsortedbin_attack/0ctf16_zerostorage/index.html
- Die saamvoegfunksie is kwesbaar omdat as beide indekse wat oorgedra word dieselfde is, sal dit daarop herallokeer en dit dan vrymaak, maar 'n aanwyser na daardie vrygemaakte gebied teruggee wat gebruik kan word.
- Daarom word 2 brokkies geskep: brokkie0 wat met homself saamgevoeg sal word en brokkie1 om konsolidering met die boonste brokkie te voorkom. Dan word die saamvoegfunksie met brokkie0 twee keer geroep wat 'n gebruik na vry sal veroorsaak.
- Dan word die
view
-funksie geroep met indeks 2 (wat die indeks van die gebruik na vry brokkie is), wat 'n libc-adres sal lek. - Aangesien die binêre beskermings het om slegs groottes groter as
global_max_fast
toe te ken sodat geen vinnige bin gebruik word nie, gaan 'n ongeorden bin aanval gebruik word om die globale veranderlikeglobal_max_fast
te oorskryf. - Dan is dit moontlik om die wysigingsfunksie met indeks 2 (die gebruik na vry aanwyser) te roep en die
bk
-aanwyser te oorskryf om te wys nap64(global_max_fast-0x10)
. Dan, deur 'n nuwe brokkie te skep, sal die voorheen gekompromitteerde vry adres (0x20) gebruik word om die ongeorden bin aanval te aktiveer deur dieglobal_max_fast
te oorskryf met 'n baie groot waarde, wat nou toelaat om brokkies in vinnige binne te skep. - Nou word 'n vinnige bin aanval uitgevoer:
- Eerstens word ontdek dat dit moontlik is om te werk met vinnige brokkies van grootte 200 op die **
__free_hook
-plek: -
gef➤ p &__free_hook
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook>
gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200
0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6076f <list_all_lock+15>: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
- As ons daarin kan slaag om 'n vinnige blok van grootte 0x200 op hierdie plek te kry, sal dit moontlik wees om 'n funksie-aanwyser te oorskryf wat uitgevoer sal word
- Hiervoor word 'n nuwe blok van grootte
0xfc
geskep en die saamgevoegde funksie word twee keer met daardie aanwyser geroep, op hierdie manier verkry ons 'n aanwyser na 'n vrygemaakte blok van grootte0xfc*2 = 0x1f8
in die vinnige bin. - Dan word die wysigingsfunksie in hierdie blok geroep om die
fd
-adres van hierdie vinnige bin te wysig om te verwys na die vorige__free_hook
-funksie. - Dan word 'n blok met grootte
0x1f8
geskep om uit die vinnige bin die vorige nuttelose blok te herwin sodat 'n ander blok met grootte0x1f8
geskep kan word om 'n vinnige bin-blok in die__free_hook
te kry wat oorskryf is met die adres van diesystem
-funksie. - En uiteindelik word 'n blok wat die string
/bin/sh\x00
bevat, vrygemaak deur die verwyderingsfunksie te roep, wat die__free_hook
-funksie aktiveer wat na system met/bin/sh\x00
as parameter wys. - CTF https://guyinatuxedo.github.io/33-custom_misc_heap/csaw19_traveller/index.html
- 'n Ander voorbeeld van die misbruik van 'n 1B-oorvloei om blokke in die ongesorteerde bin te konsolideer en 'n libc-infolek te kry en dan 'n vinnige bin-aanval uit te voer om die malloc-aanwyser met 'n een-gadget-adres te oorskryf
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat Kontroleer die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.