Large Bin Attack
Reading time: 3 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Basic Information
Kwa maelezo zaidi kuhusu nini bin kubwa angalia ukurasa huu:
{{#ref}} bins-and-memory-allocations.md {{#endref}}
Inawezekana kupata mfano mzuri katika how2heap - large bin attack.
Kimsingi hapa unaweza kuona jinsi, katika toleo la hivi karibuni "current" la glibc (2.35), halijakaguliwa: P->bk_nextsize
ikiruhusu kubadilisha anwani isiyo ya kawaida kwa thamani ya kipande kikubwa cha bin ikiwa masharti fulani yamekamilika.
Katika mfano huo unaweza kupata masharti yafuatayo:
- Kipande kikubwa kimepewa
- Kipande kikubwa kidogo kuliko cha kwanza lakini katika index ile ile kimepewa
- Lazima kiwe kidogo hivyo katika bin lazima kiwe cha kwanza
- (Kipande cha kuzuia kuungana na kipande cha juu kinaundwa)
- Kisha, kipande cha kwanza kikubwa kinachukuliwa na kipande kipya kikubwa zaidi kinapewa -> Chunk1 kinaenda kwenye bin kubwa
- Kisha, kipande cha pili kikubwa kinachukuliwa
- Sasa, udhaifu: Mshambuliaji anaweza kubadilisha
chunk1->bk_nextsize
kuwa[target-0x20]
- Kisha, kipande kikubwa zaidi kuliko chunk 2 kinapewa, hivyo chunk2 inaingizwa kwenye bin kubwa ikifuta anwani
chunk1->bk_nextsize->fd_nextsize
kwa anwani ya chunk2
tip
Kuna hali nyingine zinazoweza kutokea, jambo ni kuongeza kwenye bin kubwa kipande ambacho ni kidogo kuliko kipande cha sasa X kilichomo kwenye bin, hivyo inahitaji kuingizwa kabla yake kwenye bin, na tunahitaji kuwa na uwezo wa kubadilisha bk_nextsize
ya X kwani hapo ndipo anwani ya kipande kidogo itakapandikizwa.
Hii ndiyo code muhimu kutoka malloc. Maoni yameongezwa ili kuelewa vizuri jinsi anwani ilivyofutwa:
/* 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 kuandika upya global_max_fast
variable ya global ya libc ili kisha kutumia shambulio la fast bin na vipande vikubwa.
Unaweza kupata maelezo mengine mazuri kuhusu shambulio hili katika guyinatuxedo.
Mifano mingine
- La casa de papel. HackOn CTF 2024
- Shambulio la large bin katika hali sawa na inavyoonekana katika how2heap.
- Primitive ya kuandika ni ngumu zaidi, kwa sababu
global_max_fast
haina maana hapa. - FSOP inahitajika kumaliza exploit.
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.