House of Roman
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ovo je bila veoma zanimljiva tehnika koja je omogućila RCE bez leak-ova putem lažnih fastbins, napada na unsorted_bin i relativnih prepisivanja. Međutim, to je zakrpljeno.
You can find an example in https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c
RCE zloupotrebom relativnih pokazivača
Urediti fastbin i unsorted bin pokazivače
12 bita nasumičnosti mora biti brute forced (0.02% šanse) da uspe
Kreirajte nekoliko chunk-ova:
fastbin_victim
(0x60, offset 0): UAF chunk koji će kasnije urediti pokazivač na heap da pokazuje na LibC vrednost.
chunk2
(0x80, offset 0x70): Za dobru poravnanje
main_arena_use
(0x80, offset 0x100)
relative_offset_heap
(0x60, offset 0x190): relativni offset na 'main_arena_use' chunk
Zatim free(main_arena_use)
koji će staviti ovaj chunk u unsorted listu i dobiti pokazivač na main_arena + 0x68
u oba fd
i bk
pokazivače.
Sada se alocira novi chunk fake_libc_chunk(0x60)
jer će sadržati pokazivače na main_arena + 0x68
u fd
i bk
.
Zatim se relative_offset_heap
i fastbin_victim
oslobađaju.
fastbin_victim
ima fd
koji pokazuje na relative_offset_heap
relative_offset_heap
je ofset udaljenosti od fake_libc_chunk
, koji sadrži pokazivač na main_arena + 0x68
Samo menjajući poslednji bajt fastbin_victim.fd
moguće je da fastbin_victim
pokazuje na main_arena + 0x68
Za prethodne akcije, napadač treba da bude sposoban da modifikuje fd pokazivač fastbin_victim
.
Zatim, main_arena + 0x68
nije toliko zanimljiv, pa hajde da ga modifikujemo tako da pokazivač pokazuje na __malloc_hook
.
Napomena da __memalign_hook
obično počinje sa 0x7f
i nulama pre njega, tako da je moguće da se lažno predstavi kao vrednost u 0x70
brzom binu. Pošto su poslednja 4 bita adrese nasumična, postoji 2^4=16
mogućnosti za vrednost da završi pokazujući gde nas zanima. Tako se ovde izvodi BF napad tako da se komad završi kao: 0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)
.
(Za više informacija o ostalim bajtovima proverite objašnjenje u how2heap primeru). Ako BF ne uspe, program se jednostavno sruši (tako da ponovo pokušajte dok ne uspe).
Zatim, izvršavaju se 2 malloc-a da se uklone 2 inicijalna fast bin komada, a treći se alocira da dobije komad u __malloc_hook:
Za više informacija možete proveriti:
Unsorted Bin AttackAli u suštini, to omogućava pisanje main_arena + 0x68
na bilo koju lokaciju koju odredimo u chunk->bk
. I za napad biramo __malloc_hook
. Zatim, nakon prepisivanja, koristićemo relativno prepisivanje da bismo ukazali na one_gadget
.
Za ovo počinjemo da dobijamo chunk i stavljamo ga u unsorted bin:
Iskoristite UAF u ovom delu da usmerite unsorted_bin_ptr->bk
na adresu __malloc_hook
(to smo prethodno brute-forced).
Imajte na umu da ovaj napad korumpira nesortirani bin (takođe mali i veliki). Dakle, možemo samo koristiti alokacije iz brzog bina sada (kompleksniji program može izvršiti druge alokacije i srušiti se), a da bismo to pokrenuli, moramo alokirati istu veličinu ili će se program srušiti.
Dakle, da bismo pokrenuli pisanje main_arena + 0x68
u __malloc_hook
, nakon postavljanja __malloc_hook
u unsorted_bin_ptr->bk
, samo treba da uradimo: malloc(0x80)
U prvom koraku smo završili kontrolišući deo koji sadrži __malloc_hook
(u varijabli malloc_hook_chunk
), a u drugom koraku smo uspeli da napišemo main_arena + 0x68
ovde.
Sada zlorabimo delimično prepisivanje u malloc_hook_chunk
da bismo koristili libc adresu koju smo napisali tamo (main_arena + 0x68
) da usmerimo adresu one_gadget
.
Ovde je potrebno brute-force-ovati 12 bita nasumičnosti (više informacija u how2heap primeru).
Na kraju, kada je ispravna adresa prepisana, pozovite malloc
i pokrenite one_gadget
.
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)