# Tcache Bin Attack {% hint style="success" %} Μάθετε & εξασκηθείτε στο Hacking του AWS:[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Μάθετε & εξασκηθείτε στο Hacking του GCP: [**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Υποστηρίξτε το HackTricks * Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)! * **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Μοιραστείτε κόλπα χάκερ καταθέτοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
{% endhint %} ## Βασικές Πληροφορίες Για περισσότερες πληροφορίες σχετικά με το τι είναι ένα Tcache bin ελέγξτε αυτήν τη σελίδα: {% content-ref url="bins-and-memory-allocations.md" %} [bins-and-memory-allocations.md](bins-and-memory-allocations.md) {% endcontent-ref %} Καταρχάς, σημειώστε ότι το Tcache εισήχθη στην έκδοση Glibc 2.26. Η **επίθεση Tcache** (επίσης γνωστή ως **δηλητηρίαση Tcache**) που προτάθηκε στη σελίδα [**guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) είναι πολύ παρόμοια με την επίθεση fast bin όπου ο στόχος είναι να αντικατασταθεί ο δείκτης προς το επόμενο τμήμα στο bin μέσα σε ένα ελεύθερο τμήμα με μια τυχαία διεύθυνση, ώστε αργότερα να είναι δυνατή η **εκχώρηση αυτής της συγκεκριμένης διεύθυνσης και ενδεχομένως η αντικατάσταση δεικτών**. Ωστόσο, σήμερα, αν εκτελέσετε τον αναφερόμενο κώδικα, θα λάβετε το σφάλμα: **`malloc(): unaligned tcache chunk detected`**. Έτσι, είναι απαραίτητο να γράψετε ως διεύθυνση στον νέο δείκτη μια ευθυγραμμισμένη διεύθυνση (ή να εκτελέσετε αρκετές φορές το δυαδικό αρχείο ώστε η γραμμένη διεύθυνση να είναι πραγματικά ευθυγραμμισμένη). ### Επιθέσεις δεικτών Tcache Συνήθως είναι δυνατό να βρείτε στην αρχή της στοίβας ένα τμήμα που περιέχει τον **αριθμό τμημάτων ανά δείκτη** μέσα στο tcache και τη διεύθυνση του **κεφαλαίου τμήματος κάθε δείκτη tcache**. Αν για κάποιο λόγο είναι δυνατό να τροποποιηθούν αυτές οι πληροφορίες, θα ήταν δυνατό να **κάνετε το κεφάλαιο τμήμα κάποιου δείκτη να δείχνει σε μια επιθυμητή διεύθυνση** (όπως το `__malloc_hook`) ώστε στη συνέχεια να εκχωρηθεί ένα τμήμα με το μέγεθος του δείκτη και να αντικατασταθούν τα περιεχόμενα του `__malloc_hook` σε αυτήν την περίπτωση. ## Παραδείγματα * CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html](https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html) * **Διαρροή πληροφοριών Libc**: Είναι δυνατό να γεμίσετε τα tcaches, να προσθέσετε ένα τμήμα στη λίστα μη ταξινομημένων, να αδειάσετε το tcache και να **επανα-εκχωρήσετε το τμήμα από τη λίστα μη ταξινομημένων** αλλάζοντας μόνο τα πρώτα 8B, αφήνοντας τη **δεύτερη διεύθυνση προς το Libc από το τμήμα ακέραια** έτσι ώστε να μπορούμε να τη διαβάσουμε. * **Επίθεση Tcache**: Το δυαδικό αρχείο είναι ευάλωτο σε ένα 1B υπερχείλιση στη στοίβα. Αυτό θα εκμεταλλευτεί για να αλλάξει το **κεφαλίδα μεγέθους** ενός εκχωρημένου τμήματος κάνοντάς το μεγαλύτερο. Στη συνέχεια, αυτό το τμήμα θα **ελευθερωθεί**, προσθέτοντάς το στο tcache τμημάτων με το ψευδές μέγεθος. Στη συνέχεια, θα εκχωρηθεί ένα τμήμα με το πλαστό μέγεθος, και το προηγούμενο τμήμα θα **επιστραφεί γνωρίζοντας ότι αυτό το τμήμα ήταν πραγματικά μικρότερο** και αυτό προσφέρει τη δυνατότητα να **αντικατασταθεί ο επόμενος δείκτης στη μνήμη**.\ Θα εκμεταλλευτούμε αυτό για να **αντικαταστήσουμε τον δείκτη FD του επόμενου τμήματος** ώστε να δείχνει στο **`malloc_hook`**, έτσι ώστε είναι δυνατό να εκχωρηθούν 2 δείκτες: πρώτα ο νόμιμος δείκτης που μόλις τροποποιήσαμε, και στη συνέχεια η δεύτερη εκχώρηση θα επιστρέψει ένα τμήμα στο **`malloc_hook`** που είναι δυνατό να εκμεταλλευτεί για να γραφτεί ένα **one gadget**. * CTF [https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html) * **Διαρροή πληροφοριών Libc**: Υπάρχει ένα use after free και ένα double free. Σε αυτήν την ανάλυση ο συγγραφέας διέρρευσε μια διεύθυνση του Libc διαβάζοντας τη διεύθυνση ενός τμήματος που τοποθετήθηκε σε ένα μικρό bin (όπως να το διαρρεύσει από το unsorted bin αλλά από το μικρό). * **Επίθεση Tcache**: Μια Tcache πραγματοποιείται μέσω ενός **διπλού free**. Το ίδιο τμήμα ελευθερώνεται δύο φορές, έτσι μέσα στο Tcache το τμήμα θα δείχνει στον εαυτό του. Στη συνέχεια, εκχωρείται, ο δείκτης FD του τροποποιείται ώστε να δείχνει στο **free hook** και στη συνέχεια εκχωρείται ξανά, έτσι το επόμενο τμήμα στη λίστα θα βρίσκεται στο free hook. Στη συνέχεια, αυτό επίσης εκχωρείται και είναι δυνατό να γραφτεί η διεύθυνση του `system` εδώ, έτσι όταν ένα malloc που περιέχει `"/bin/sh"` ελευθερωθεί, λαμβάνουμε ένα κέλυφος. * 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) * Η κύρια ευπάθεια εδώ είναι η δυνατότητα να `ελευθερώσετε` οποιαδήποτε διεύθυνση στη στοίβα δηλώνοντας την οφσετ. * **Επίθεση δεικτών Tcache**: Είναι δυνατό να εκχωρηθεί και να ελευθερωθεί ένα τμήμα με μέγεθος που όταν αποθηκευτεί μέσα στο tcache τμήμα (το τμήμα με τις πληροφορίες των tcache bins) θα δημιουργήσει μια **διεύθυνση με την τιμή 0x100**. Αυτό συμβαίνει επειδή το tcache αποθηκεύει τον αριθμό των τμημάτων σε κάθε bin σε διαφορετικά bytes, επομένως ένα τμήμα σε ένα συγκεκριμένο δείκτη δημιουργεί την τιμή 0x100. * Στη συνέχεια, αυτή η τιμή μοιάζει ότι υπάρχει ένα τμήμα μεγέθους 0x100. Επιτρέποντας να εκμεταλ * **Συμμετέχετε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή την [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Κοινοποιήστε χάκινγκ κόλπα υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.