5.4 KiB
Groot Bin Aanval
{% hint style="success" %}
Leer & oefen AWS Hack:HackTricks Opleiding AWS Red Team Expert (ARTE)
Leer & oefen GCP Hack: HackTricks Opleiding GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Controleer de abonnementsplannen!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacktruuks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
Vir meer inligting oor wat 'n groot bin is, kyk na hierdie bladsy:
{% content-ref url="bins-and-memory-allocations.md" %} bins-and-memory-allocations.md {% endcontent-ref %}
Dit is moontlik om 'n goeie voorbeeld te vind in how2heap - groot bin aanval.
Basies kan jy hier sien hoe, in die nuutste "huidige" weergawe van glibc (2.35), dit nie nagegaan word nie: P->bk_nextsize
wat dit moontlik maak om 'n arbitrêre adres met die waarde van 'n groot bin brokkie te wysig as sekere voorwaardes voldoen word.
In daardie voorbeeld kan jy die volgende voorwaardes vind:
- 'n Groot brokkie word toegewys
- 'n Groot brokkie wat kleiner is as die eerste een maar in dieselfde indeks is, word toegewys
- Dit moet kleiner wees sodat dit eerste in die bin moet gaan
- ( 'n brokkie om te voorkom dat dit saamsmelt met die boonste brokkie word geskep)
- Dan word die eerste groot brokkie vrygestel en 'n nuwe brokkie wat groter as dit is, word toegewys -> Brokkie1 gaan na die groot bin
- Dan word die tweede groot brokkie vrygestel
- Nou, die kwesbaarheid: Die aanvaller kan
chunk1->bk_nextsize
wysig na[target-0x20]
- Dan word 'n groter brokkie as brokkie 2 toegewys, sodat brokkie2 in die groot bin ingevoeg word en die adres
chunk1->bk_nextsize->fd_nextsize
met die adres van brokkie2 oorskryf
{% hint style="success" %}
Daar is ander potensiële scenario's, die ding is om 'n brokkie by die groot bin te voeg wat kleiner is as 'n huidige X brokkie in die bin, sodat dit net voor dit in die bin ingevoeg moet word, en ons moet in staat wees om X se bk_nextsize
te wysig omdat dit waar die adres van die kleinere brokkie geskryf sal word.
{% endhint %}
Hierdie is die relevante kode van malloc. Kommentaar is bygevoeg om beter te verstaan hoe die adres oorskryf is:
{% code overflow="wrap" %}
/* if smaller than smallest, bypass loop below */
assert (chunk_main_arena (bck->bk));
if ((unsigned long) (size) < (unsigned long) chunksize_nomask (bck->bk))
{
fwd = bck; // fwd = p1
bck = bck->bk; // bck = p1->bk
victim->fd_nextsize = fwd->fd; // p2->fd_nextsize = p1->fd (Note that p1->fd is p1 as it's the only chunk)
victim->bk_nextsize = fwd->fd->bk_nextsize; // p2->bk_nextsize = p1->fd->bk_nextsize
fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_nextsize->fd_nextsize = p2
}
{% endcode %}
Dit kan gebruik word om die global_max_fast
globale veranderlike van libc te oor-skryf om dan 'n vinnige bin-aanval met groter brokke te benut.
Jy kan 'n ander goeie verduideliking van hierdie aanval vind by guyinatuxedo.
Ander voorbeelde
- La casa de papel. HackOn CTF 2024
- Groot bin-aanval in dieselfde situasie soos dit verskyn in how2heap.
- Die skryf-primitief is meer kompleks, omdat
global_max_fast
hier nutteloos is. - FSOP is nodig om die aanval af te handel.
{% hint style="success" %}
Leer & oefen AWS-hacking:HackTricks Opleiding AWS Red Team Expert (ARTE)
Leer & oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kontroleer die inskrywingsplanne!
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.