# Kuća Romana
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! Drugi načini podrške HackTricks-u: * Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)! * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * Otkrijte [**Porodičnu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
## Osnovne informacije Ovo je vrlo interesantna tehnika koja je omogućila RCE bez otkrivanja putem lažnih fastbin-ova, napada na unsorted\_bin i relativnih prepisivanja. Međutim, ovo je [**popravljeno**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b90ddd08f6dd688e651df9ee89ca3a69ff88cd0c). ### Kod * Primer možete pronaći na [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) ### Cilj * RCE zloupotrebom relativnih pokazivača ### Zahtevi * Izmena pokazivača fastbin-a i unsorted bin-a * Potrebno je da se proba 12 bita nasumičnosti (0.02% šanse) da bi uspelo ## Koraci napada ### Deo 1: Fastbin Chunk pokazuje na \_\_malloc\_hook Kreirajte nekoliko chunk-ova: * `fastbin_victim` (0x60, offset 0): UAF chunk kasnije za uređivanje pokazivača heap-a kako bi pokazivao na vrednost LibC-a. * `chunk2` (0x80, offset 0x70): Za dobro poravnanje * `main_arena_use` (0x80, offset 0x100) * `relative_offset_heap` (0x60, offset 0x190): relativni offset na chunk-u 'main\_arena\_use' Zatim `free(main_arena_use)` što će postaviti ovaj chunk u nesortiranu 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 su oslobođeni `relative_offset_heap` i `fastbin_victim`. ```c /* Current heap layout: 0x0: fastbin_victim - size 0x70 0x70: alignment_filler - size 0x90 0x100: fake_libc_chunk - size 0x70 (contains a fd ptr to main_arena + 0x68) 0x170: leftover_main - size 0x20 0x190: relative_offset_heap - size 0x70 bin layout: fastbin: fastbin_victim -> relative_offset_heap unsorted: leftover_main */ ``` * `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 izmeni 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 ishodilo da chunk završi kao: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.** (Za više informacija o preostalim bajtovima proverite objašnjenje u [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)[ primeru](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)). 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:`** ```c malloc(0x60); malloc(0x60); uint8_t* malloc_hook_chunk = malloc(0x60); ``` ### Deo 2: Napad na nesortiran bin Za više informacija možete proveriti: {% content-ref url="unsorted-bin-attack.md" %} [unsorted-bin-attack.md](unsorted-bin-attack.md) {% endcontent-ref %} Ali 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 **nesortirani bin**: ```c uint8_t* unsorted_bin_ptr = malloc(0x80); malloc(0x30); // Don't want to consolidate puts("Put chunk into unsorted_bin\n"); // Free the chunk to create the UAF free(unsorted_bin_ptr); ``` Iskoristite UAF u ovom delu da usmerite `unsorted_bin_ptr->bk` na adresu `__malloc_hook` (ovo smo prethodno grubo forsirali). {% hint style="danger" %} Imajte na umu da ovaj napad korumpira unsorted bin (takođe i small i large). Zato sada možemo **koristiti alokacije iz fast 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 pasti.** {% endhint %} 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)`** ### Korak 3: Postavljanje \_\_malloc\_hook na system U koraku jedan smo završili kontrolišući chunk koji sadrži `__malloc_hook` (u promenljivoj `malloc_hook_chunk`) i u drugom koraku smo uspeli 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](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)[ primeru](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)). Na kraju, kada se ispravna adresa prepiše, **pozovite `malloc` i pokrenite `one_gadget`**. ## Reference * [https://github.com/shellphish/how2heap](https://github.com/shellphish/how2heap) * [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/)
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! Drugi načini podrške HackTricks-u: * Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)! * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili **telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.