Tcache Bin Attack
Reading time: 5 minutes
tip
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)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne informacije
Za više informacija o tome šta je Tcache bin, proverite ovu stranicu:
Prvo, imajte na umu da je Tcache uveden u Glibc verziji 2.26.
Tcache napad (poznat i kao Tcache trovanje) predložen na guyinatuxido stranici je veoma sličan fast bin napadu gde je cilj prepisati pokazivač na sledeći deo u binu unutar oslobođenog dela na proizvoljnu adresu kako bi kasnije bilo moguće alokovati tu specifičnu adresu i potencijalno prepisati pokazivače.
Međutim, danas, ako pokrenete pomenuti kod dobićete grešku: malloc(): unaligned tcache chunk detected
. Dakle, potrebno je napisati kao adresu u novom pokazivaču usklađenu adresu (ili izvršiti binarni kod dovoljno puta tako da je napisana adresa zapravo usklađena).
Tcache indeksi napad
Obično je moguće pronaći na početku heap-a deo koji sadrži broj delova po indeksu unutar tcache-a i adresu do glavnog dela svakog tcache indeksa. Ako iz nekog razloga bude moguće izmeniti ove informacije, bilo bi moguće naterati glavni deo nekog indeksa da pokazuje na željenu adresu (kao što je __malloc_hook
) kako bi se zatim alokovao deo veličine indeksa i prepisali sadržaji __malloc_hook
u ovom slučaju.
Primeri
- CTF https://guyinatuxedo.github.io/29-tcache/dcquals19_babyheap/index.html
- Libc info leak: Moguće je napuniti tcache, dodati deo u nesortiranu listu, isprazniti tcache i ponovo alocirati deo iz nesortiranog bina samo prepisujući prvih 8B, ostavljajući drugom adresom do libc iz dela netaknutu kako bismo mogli da je pročitamo.
- Tcache napad: Binarni kod je ranjiv na 1B heap overflow. Ovo će se iskoristiti da se promeni header veličine alociranog dela čineći ga većim. Zatim, ovaj deo će biti oslobođen, dodajući ga u tcache delova lažne veličine. Zatim ćemo alocirati deo sa lažnom veličinom, a prethodni deo će biti vraćen znajući da je ovaj deo zapravo manji i to pruža priliku da prepišemo sledeći deo u memoriji.
Iskoristićemo ovo da prepišemo FD pokazivač sledećeg dela da pokazuje namalloc_hook
, tako da je moguće alocirati 2 pokazivača: prvo legitiman pokazivač koji smo upravo izmenili, a zatim će druga alokacija vratiti deo umalloc_hook
koji je moguće iskoristiti za pisanje one gadget. - CTF https://guyinatuxedo.github.io/29-tcache/plaid19_cpp/index.html
- Libc info leak: Postoji korišćenje nakon oslobađanja i dvostruko oslobađanje. U ovom izveštaju autor je otkrio adresu libc čitajući adresu dela smeštenog u malom binu (kao da je otkrio iz nesortiranog bina, ali iz malog).
- Tcache napad: Tcache se vrši putem dvostrukog oslobađanja. Isti deo se oslobađa dva puta, tako da unutar Tcache-a deo pokazuje na sebe. Zatim se alocira, njegov FD pokazivač se menja da pokazuje na free hook i zatim se ponovo alocira tako da će sledeći deo na listi biti u free hook-u. Zatim se ovo takođe alocira i moguće je ovde napisati adresu
system
tako da kada se oslobodi malloc koji sadrži"/bin/sh"
dobijamo shell. - CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps0/index.html
- Glavna ranjivost ovde je sposobnost da se
free
bilo koja adresa u heap-u ukazivanjem na njen offset. - Tcache indeksi napad: Moguće je alocirati i osloboditi deo veličine koja kada se čuva unutar tcache dela (deo sa informacijama o tcache binovima) generiše adresu sa vrednošću 0x100. Ovo je zato što tcache čuva broj delova u svakom binu u različitim bajtovima, stoga jedan deo u jednom specifičnom indeksu generiše vrednost 0x100.
- Zatim, ova vrednost izgleda kao da postoji deo veličine 0x100. Omogućavajući da se iskoristi tako što se
free
ova adresa. Ovo će dodati tu adresu u indeks delova veličine 0x100 u tcache. - Zatim, alokacija dela veličine 0x100, prethodna adresa će biti vraćena kao deo, omogućavajući prepisivanje drugih tcache indeksa.
Na primer, stavljajući adresu malloc hook u jedan od njih i alocirajući deo veličine tog indeksa dobićemo deo u calloc hook-u, što omogućava pisanje one gadget za dobijanje shell-a. - CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps1/index.html
- Ista ranjivost kao pre sa jednom dodatnom restrikcijom.
- Tcache indeksi napad: Sličan napad kao prethodni, ali koristeći manje koraka oslobađanjem dela koji sadrži tcache informacije tako da se njegova adresa dodaje u tcache indeks njegove veličine, tako da je moguće alocirati tu veličinu i dobiti tcache informacije kao deo, što omogućava dodavanje free hook kao adresu jednog indeksa, alocirati ga i napisati one gadget na njemu.
- Math Door. HTB Cyber Apocalypse CTF 2023
- Write After Free da se doda broj u
fd
pokazivač. - Puno heap feng-shui je potrebno u ovom izazovu. Izveštaj pokazuje kako je kontrola glave Tcache free-liste veoma korisna.
- Glibc leak kroz
stdout
(FSOP). - Tcache trovanje za dobijanje proizvoljne write primitive.
tip
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)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.