# Kuća od narandžaste boje
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 [**Porodicu 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
### Kod
* Pronađite primer na [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c)
* Tehnika eksploatacije je popravljena u ovom [patch-u](https://sourceware.org/git/?p=glibc.git;a=blobdiff;f=stdlib/abort.c;h=117a507ff88d862445551f2c07abb6e45a716b75;hp=19882f3e3dc1ab830431506329c94dcf1d7cc252;hb=91e7cf982d0104f0e71770f5ae8e3faf352dea9f;hpb=0c25125780083cbba22ed627756548efe282d1a0) tako da ovo više ne radi (radi u verzijama pre 2.26)
* Isti primer **sa više komentara** na [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
### Cilj
* Zloupotreba funkcije `malloc_printerr`
### Zahtevi
* Prepisivanje veličine vrha bloka
* Curenje libc-a i hipa
### Pozadina
Neophodne informacije iz komentara iz [**ovog primera**](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)**:**
Stvar je u tome da su u starijim verzijama libc-a, kada je pozvana funkcija `malloc_printerr`, ona bi **iterirala kroz listu `_IO_FILE` struktura smeštenih u `_IO_list_all`**, i zapravo **izvršila** pokazivač instrukcije u toj strukturi.\
Ovaj napad će falsifikovati **lažnu `_IO_FILE` strukturu** koju ćemo upisati u **`_IO_list_all`**, i izazvati pokretanje `malloc_printerr`.\
Zatim će **izvršiti bilo koju adresu** koju smo sačuvali u **`_IO_FILE`** strukturama jump tabele, i dobićemo izvršenje koda
### Napad
Napad počinje tako što uspe da dobije **vrh bloka** unutar **neuređenog bin-a**. To se postiže pozivom `malloc` sa veličinom većom od trenutne veličine vrha bloka, ali manjom od **`mmp_.mmap_threshold`** (podrazumevano je 128K), što bi inače pokrenulo alokaciju `mmap`. Kada se veličina vrha bloka izmeni, važno je osigurati da je **vrh bloka + njegova veličina** poravnata sa stranicom i da je bit **prev\_inuse** vrha bloka uvek postavljen.
Da biste dobili vrh bloka unutar neuređenog bin-a, alocirajte deo kako biste kreirali vrh bloka, promenite veličinu vrha bloka (sa prelivanjem u alociranom delu) tako da je **vrh bloka + veličina** poravnata sa stranicom sa postavljenim bitom **prev\_inuse**. Zatim alocirajte deo veći od nove veličine vrha bloka. Imajte na umu da se `free` nikada ne poziva da bi se vrh bloka stavio u neuređeni bin.
Stari vrh bloka je sada u neuređenom bin-u. Pretpostavljajući da možemo čitati podatke unutar njega (možda zbog ranjivosti koja je takođe uzrokovala prelivanje), moguće je procuriti libc adrese iz njega i dobiti adresu **\_IO\_list\_all**.
Napad na neuređeni bin se izvodi zloupotrebom prelivanja kako bi se napisalo `topChunk->bk->fwd = _IO_list_all - 0x10`. Kada se alocira novi deo, stari vrh bloka će biti podeljen, i pokazivač na neuređeni bin će biti upisan u **`_IO_list_all`**.
Sledeći korak uključuje smanjenje veličine starog vrha bloka kako bi se uklopio u mali bin, posebno postavljanjem njegove veličine na **0x61**. Ovo ima dva cilja:
1. **Umetanje u Mali Bin 4**: Kada `malloc` skenira kroz neuređeni bin i vidi ovaj deo, pokušaće da ga ubaci u mali bin 4 zbog njegove male veličine. To će dovesti do toga da deo završi na početku liste malog bina 4, što je lokacija FD pokazivača dela **`_IO_list_all`** jer smo napisali blisku adresu u **`_IO_list_all`** putem napada na neuređeni bin.
2. **Pokretanje Malloc Provere**: Ova manipulacija veličinom dela će naterati `malloc` da izvrši interne provere. Kada proveri veličinu lažnog naprednog dela, koji će biti nula, izazvaće grešku i pozvati `malloc_printerr`.
Manipulacija malim binom će vam omogućiti kontrolu naprednog pokazivača dela. Preklapanje sa **\_IO\_list\_all** se koristi za izradu lažne **\_IO\_FILE** strukture. Struktura je pažljivo oblikovana da uključi ključna polja poput `_IO_write_base` i `_IO_write_ptr` postavljena na vrednosti koje prolaze interne provere u libc-u. Dodatno, unutar lažne strukture se kreira jump tabela, gde je pokazivač instrukcije postavljen na adresu gde se može izvršiti proizvoljan kod (npr. funkcija `system`).
Da sumiramo preostali deo tehnike:
* **Smanjite Stari Vrh Bloka**: Prilagodite veličinu starog vrha bloka na **0x61** kako biste ga uklopili u mali bin.
* **Postavite Lažnu `_IO_FILE` Strukturu**: Preklopite stari vrh bloka sa lažnom **\_IO\_FILE** strukturom i postavite polja na odgovarajući način da preuzmete kontrolu nad tokom izvršenja.
Sledeći korak uključuje izradu lažne **\_IO\_FILE** strukture koja se preklapa sa starim vrhom bloka koji se trenutno nalazi u neuređenom bin-u. Prvi bajtovi ove strukture pažljivo su oblikovani da uključe pokazivač na komandu (npr. "/bin/sh") koja će biti izvršena.
Ključna polja u lažnoj **\_IO\_FILE** strukturi, poput `_IO_write_base` i `_IO_write_ptr`, postavljaju se na vrednosti koje prolaze interne provere u libc-u. Dodatno, unutar lažne strukture se kreira jump tabela, gde je pokazivač instrukcije postavljen na adresu gde se može izvršiti proizvoljan kod. Tipično, to bi bila adresa funkcije `system` ili neke druge funkcije koja može izvršiti shell komande.
Napad kulminira kada poziv `malloc` pokrene izvršenje koda putem manipulisane **\_IO\_FILE** strukture. Ovo efikasno omogućava izvršenje proizvoljnog koda, što obično rezultira spawnovanjem shell-a ili izvršavanjem druge zlonamerne payload-a.
**Rezime Napada:**
1. **Postavite vrh bloka**: Alocirajte deo i promenite veličinu vrha bloka.
2. **Prisilite vrh bloka u neuređeni bin**: Alocirajte veći deo.
3. **Curenje libc adresa**: Iskoristite ranjivost da čitate iz neuređenog bin-a.
4. **Izvršite napad na neuređeni bin**: Upisujte u **\_IO\_list\_all** korišćenjem prelivanja.
5. **Smanjite stari vrh bloka**: Prilagodite njegovu veličinu da se uklopi u mali bin.
6. **Postavite lažnu \_IO\_FILE strukturu**: Napravite lažnu strukturu fajla da preuzmete kontrolu nad tokom izvršenja.
7. **Pokrenite izvršenje koda**: Alocirajte deo da izvršite napad i pokrenete proizvoljan kod.
Ovaj pristup iskorišćava mehanizme upravljanja hipom, curenje informacija libc-a i prelivanje hipa kako bi se postiglo izvršenje koda bez direktnog pozivanja `free`. Pažljivim oblikovanjem lažne **\_IO\_FILE** strukture i postavljanjem je na pravo mesto, napad može preuzeti kontrolu nad tokom izvršenja tokom standardnih operacija alokacije memorije. Ovo omogućava izvršenje proizvoljnog koda, što potencijalno rezultira shell-om ili drugim zlonamernim aktivnostima.
## Reference
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/)
* [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
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 PRETPLATU**](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.