# 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.