Large Bin Attack

Jifunze na zoezi la Kuvamia AWS:Mafunzo ya HackTricks ya Mtaalam wa Timu Nyekundu ya AWS (ARTE) Jifunze na zoezi la Kuvamia GCP: Mafunzo ya HackTricks ya Mtaalam wa Timu Nyekundu ya GCP (GRTE)

unga mkono HackTricks

Taarifa Msingi

Kwa habari zaidi kuhusu ni nini benki kubwa angalia ukurasa huu:

Bins & Memory Allocations

Inawezekana kupata mfano mzuri katika how2heap - shambulio la benki kubwa.

Kimsingi hapa unaweza kuona jinsi, katika "toleo" la hivi karibuni la glibc (2.35), haikaguliwi: P->bk_nextsize kuruhusu kubadilisha anwani ya aina kubwa ya benki ikiwa hali fulani zinakutana.

Katika mfano huo unaweza kupata hali zifuatazo:

  • Kipande kikubwa kinatengwa

  • Kipande kikubwa kidogo kuliko cha kwanza lakini katika index ile ile kinatengwa

  • Lazima kiwe kidogo ili kiende kwanza katika benki

  • (Kipande cha kuzuia kuunganishwa na kipande cha juu kinatengwa)

  • Kisha, kipande kikubwa cha kwanza kinawekwa huru na kipande kipya kikubwa kuliko hicho kinatengwa -> Kipande1 kinakwenda kwenye benki kubwa

  • Kisha, kipande kikubwa cha pili kinawekwa huru

  • Sasa, udhaifu: Mvamizi anaweza kubadilisha chunk1->bk_nextsize kuwa [lengo-0x20]

  • Kisha, kipande kikubwa kuliko kipande 2 kinatengwa, hivyo kipande2 kinaingizwa kwenye benki kubwa kwa kubadilisha anwani chunk1->bk_nextsize->fd_nextsize na anwani ya kipande2

Kuna mazingira mengine yanayowezekana, jambo ni kuongeza kwenye benki kubwa kipande ambacho ni kidogo kuliko kipande X cha sasa katika benki, hivyo inahitaji kuwekwa kabla yake katika benki, na tunahitaji kuweza kubadilisha bk_nextsize ya X kwani hapo ndipo anwani ya kipande kidogo itaandikwa.

Hii ni nambari inayohusiana na malloc. Maoni yameongezwa ili kuelewa vizuri jinsi anwani ilibadilishwa:

/* 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
}

Hii inaweza kutumika kubadilisha global_max_fast kwenye kumbukumbu ya libc kisha kutumia shambulio la sanduku la haraka na vipande vikubwa.

Unaweza kupata maelezo mengine mazuri ya shambulio hili katika guyinatuxedo.

Mifano mingine

  • Shambulio la sanduku kubwa katika hali ile ile inavyoonekana katika how2heap.

  • Msingi wa kuandika ni ngumu zaidi, kwa sababu global_max_fast haifai hapa.

  • FSOP inahitajika kumaliza shambulio.

Jifunze & zoezi la AWS Hacking:Mafunzo ya HackTricks AWS Red Team Expert (ARTE) Jifunze & zoezi la GCP Hacking: Mafunzo ya HackTricks GCP Red Team Expert (GRTE)

Support HackTricks

Last updated