# Atak na Tcache Bin
Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)! Inne sposoby wsparcia HackTricks: * Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)! * Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
## Podstawowe informacje Aby uzyskać więcej informacji na temat tego, co to jest tcache bin, sprawdź tę stronę: {% content-ref url="bins-and-memory-allocations.md" %} [bins-and-memory-allocations.md](bins-and-memory-allocations.md) {% endcontent-ref %} Po pierwsze, zauważ, że Tcache został wprowadzony w wersji glibc 2.26. Atak **Tcache** zaproponowany na stronie [**guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) jest bardzo podobny do ataku na fast bin, gdzie celem jest nadpisanie wskaźnika do następnego fragmentu w binie wewnątrz zwolnionego fragmentu na dowolny adres, aby później było możliwe **zaalokowanie tego konkretnego adresu i potencjalne nadpisanie wskaźników**. Jednak obecnie, jeśli uruchomisz wspomniany kod, otrzymasz błąd: **`malloc(): unaligned tcache chunk detected`**. Dlatego konieczne jest wpisanie jako adresu w nowy wskaźnik adresu wyrównanego (lub wystarczająco wiele razy uruchomienie binarnego pliku, aby wpisany adres był faktycznie wyrównany). ### Atak na indeksy Tcache Zazwyczaj na początku sterty można znaleźć fragment zawierający **liczbę fragmentów na indeks** wewnątrz tcache oraz adres do **głównego fragmentu każdego indeksu tcache**. Jeśli z jakiegoś powodu możliwe jest zmodyfikowanie tych informacji, można **spowodować, że główny fragment pewnego indeksu wskaże na pożądany adres** (np. hak malloc) aby następnie zaalokować fragment o rozmiarze indeksu i nadpisać zawartość hakera malloc w tym przypadku. ## Przykłady * CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html](https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html) * **Wyciek informacji z libc**: Możliwe jest zapełnienie tcaches, dodanie fragmentu do listy nieuporządkowanej, opróżnienie tcache i **ponowne zaalokowanie fragmentu z listy nieuporządkowanej** nadpisując tylko pierwsze 8B, pozostawiając **drugi adres do libc z fragmentu nietknięty, dzięki czemu możemy go odczytać**. * **Atak Tcache**: Binarny plik jest podatny na przepełnienie sterty o 1B. Zostanie to wykorzystane do zmiany **nagłówka rozmiaru** zaalokowanego fragmentu, zwiększając go. Następnie ten fragment zostanie **zwolniony**, dodając go do tcache fragmentów o fałszywym rozmiarze. Następnie zaalokujemy fragment o fałszywym rozmiarze, a poprzedni fragment zostanie **zwrócony, wiedząc, że ten fragment był faktycznie mniejszy**, co daje możliwość **nadpisania następnego fragmentu w pamięci**.\ Będziemy wykorzystywać to do **nadpisania wskaźnika FD następnego fragmentu** wskazującego na **`malloc_hook`**, dzięki czemu możliwe będzie zaalokowanie 2 wskaźników: najpierw prawidłowy wskaźnik, który właśnie zmodyfikowaliśmy, a następnie druga alokacja zwróci fragment w **`malloc_hook`**, który można wykorzystać do napisania **one gadget**. * CTF [https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html) * **Wyciek informacji z libc**: Występuje tu użycie po zwolnieniu i podwójne zwolnienie. W tym rozwiązaniu autor wyciekł adres libc, odczytując adres fragmentu umieszczonego w małym binie (podobnie jak wyciek z nieuporządkowanego binu, ale z małego). * **Atak Tcache**: Wykonuje się Tcache poprzez **podwójne zwolnienie**. Ten sam fragment jest zwalniany dwukrotnie, więc wewnątrz Tcache fragment ten będzie wskazywał na siebie. Następnie jest on alokowany, jego wskaźnik FD jest modyfikowany, aby wskazywał na **free hook**, a następnie jest ponownie alokowany, więc następny fragment na liście będzie w free hook. Następnie ten fragment również jest alokowany i możliwe jest zapisanie adresu `system` tutaj, więc gdy zostanie zwolniony malloc zawierający `"/bin/sh"`, otrzymamy powłokę. * CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html) * Główną luką jest możliwość `zwolnienia` dowolnego adresu na stercie, wskazując jego przesunięcie * **Atak na indeksy Tcache**: Możliwe jest zaalokowanie i zwolnienie fragmentu o rozmiarze, który przechowywany wewnątrz fragmentu tcache (fragment z informacjami o binach tcache) spowoduje wygenerowanie **adresu o wartości 0x100**. Wynika to z faktu, że tcache przechowuje liczbę fragmentów w każdym binie w różnych bajtach, dlatego jeden fragment w jednym konkretnym indeksie generuje wartość 0x100. * Następnie ta wartość wygląda na to, jakby istniał fragment o rozmiarze 0x100. Pozwala to na wykorzystanie go poprzez `zwolnienie` tego adresu. Spowoduje to **dodanie tego adresu do indeksu fragmentów o rozmiarze 0x100 w tcache**. * Następnie, **zaalokowanie** fragmentu o rozmiarze **0x100**, poprzedni adres zostanie zwrócony jako fragment, co pozwala na nadpisanie innych indeksów tcache.\ Na przykład umieszczenie adresu hakera malloc w jednym z nich i zaalokowanie fragmentu o rozmiarze tego indeksu umożliwi uzyskanie fragmentu w hakera calloc, co pozwala na napisanie one gadgeta, aby uzyskać powłokę. * CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html) * Ta sama podatność co wcześniej z jednym dodatkowym ograniczeniem * **Atak na indeksy Tcache**: Podobny atak do poprzedniego, ale z użyciem mniejszej liczby kroków poprzez **zwolnienie fragmentu zawierającego informacje o tcache**, dzięki czemu jego adres zostaje dodany do indeksu tcache jego rozmiaru, co umożliwia zaalokowanie tego rozmiaru i uzyskanie informacji o fragmencie tcache jako fragmentu, co pozwala dodać free hook jako adres jednego indeksu, zaalokować go i zapisać na nim one gadgeta.
Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)! Inne sposoby wsparcia HackTricks: * Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)! * Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.