House of Roman
Last updated
Last updated
Naučite i vežbajte hakovanje AWS-a:HackTricks Obuka AWS Crveni Tim Stručnjak (ARTE) Naučite i vežbajte hakovanje GCP-a: HackTricks Obuka GCP Crveni Tim Stručnjak (GRTE)
Ovo je vrlo zanimljiva tehnika koja je omogućila RCE bez curenja informacija putem lažnih fastbins, napada na unsorted_bin i relativnih prepisivanja. Međutim, ovo je popravljeno.
Primer možete pronaći na https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c
RCE zloupotrebom relativnih pokazivača
Izmena pokazivača fastbin i unsorted bin
Potrebno je da se proba 12 bita nasumičnosti (0.02% šanse) da bi uspelo
Napravite nekoliko chunkova:
fastbin_victim
(0x60, ofset 0): Kasnije će se koristiti UAF chunk za uređivanje pokazivača heap-a kako bi pokazivao na vrednost LibC-a.
chunk2
(0x80, ofset 0x70): Za dobro poravnanje
main_arena_use
(0x80, ofset 0x100)
relative_offset_heap
(0x60, ofset 0x190): relativni ofset na chunku 'main_arena_use'
Zatim free(main_arena_use)
što će postaviti ovaj chunk u unsorted listu i dobiti pokazivač na main_arena + 0x68
u oba fd
i bk
pokazivača.
Sada je alociran novi chunk fake_libc_chunk(0x60)
jer će sadržati pokazivače na main_arena + 0x68
u fd
i bk
.
Zatim se oslobađaju relative_offset_heap
i fastbin_victim
.
fastbin_victim
ima fd
koji pokazuje na relative_offset_heap
relative_offset_heap
je odmak udaljenosti od fake_libc_chunk
, koji sadrži pokazivač na main_arena + 0x68
Menjanjem poslednjeg bajta fastbin_victim.fd
moguće je naterati fastbin_victim
da pokazuje na main_arena + 0x68
Za prethodne radnje, napadač mora biti sposoban da modifikuje fd pokazivač fastbin_victim
.
Zatim, main_arena + 0x68
nije toliko interesantan, pa ga modifikujemo tako da pokazuje na __malloc_hook
.
Imajte na umu da __memalign_hook
obično počinje sa 0x7f
i nulama ispred toga, pa je moguće lažirati ga kao vrednost u 0x70
fast binu. Budući da su poslednja 4 bita adrese nasumična, postoji 2^4=16
mogućnosti da vrednost završi tamo gde nas zanima. Zato se ovde vrši BF napad kako bi se chunk završio kao: 0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)
.
(Za više informacija o preostalim bajtovima proverite objašnjenje u how2heap primeru). Ako BF ne uspe, program jednostavno puca (pa počnite ponovo dok ne uspe).
Zatim, vrše se 2 malloc-a kako bi se uklonila 2 početna fast bin chunka, a zatim se alocira treći kako bi se dobio chunk u __malloc_hook:
Za više informacija možete proveriti:
Unsorted Bin AttackAli u osnovi omogućava pisanje main_arena + 0x68
na bilo koju lokaciju koja je određena u chunk->bk
. Za napad biramo __malloc_hook
. Zatim, nakon što ga prepisujemo, koristićemo relativno prepisivanje da bismo pokazali na one_gadget
.
Za to počinjemo dobijanjem chunk-a i smeštanjem ga u nesortiranu bin:
Iskoristite UAF u ovom delu da usmerite unsorted_bin_ptr->bk
na adresu __malloc_hook
(ovo smo prethodno grubo forsirali).
Imajte na umu da ovaj napad korumpira nesortiran bin (stoga i male i velike). Zato sada možemo koristiti alokacije iz brzog bina (kompleksniji programi mogu vršiti druge alokacije i srušiti se), i da bismo pokrenuli ovo moramo alocirati istu veličinu ili će program pucati.
Dakle, da bismo pokrenuli upis main_arena + 0x68
u __malloc_hook
, nakon postavljanja __malloc_hook
u unsorted_bin_ptr->bk
, jednostavno treba da uradimo: malloc(0x80)
U koraku jedan završili smo kontrolišući chunk koji sadrži __malloc_hook
(u promenljivoj malloc_hook_chunk
) i u drugom koraku uspeli smo da upišemo main_arena + 0x68
ovde.
Sada zloupotrebljavamo delimičan upis u malloc_hook_chunk
da bismo koristili libc adresu koju smo tamo napisali (main_arena + 0x68
) da usmerimo adresu one_gadget
.
Ovde je potrebno grubo forsirati 12 bita nasumičnosti (više informacija u how2heap primeru).
Na kraju, kada se ispravna adresa prepisuje, pozovite malloc
i pokrenite one_gadget
.
Naučite i vežbajte hakovanje AWS-a:HackTricks Training AWS Red Team Expert (ARTE) Naučite i vežbajte hakovanje GCP-a: HackTricks Training GCP Red Team Expert (GRTE)