Tcache Bin Attack
Reading time: 6 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Basic Information
Για περισσότερες πληροφορίες σχετικά με το τι είναι ένα Tcache bin, ελέγξτε αυτή τη σελίδα:
Πρώτα απ' όλα, σημειώστε ότι το Tcache εισήχθη στην έκδοση Glibc 2.26.
Η επίθεση Tcache (γνωστή και ως δηλητηρίαση Tcache) που προτάθηκε στη σελίδα guyinatuxido είναι πολύ παρόμοια με την επίθεση fast bin, όπου ο στόχος είναι να αντικατασταθεί ο δείκτης στο επόμενο chunk μέσα σε ένα ελεύθερο chunk με μια αυθαίρετη διεύθυνση, ώστε αργότερα να είναι δυνατή η κατανομή αυτής της συγκεκριμένης διεύθυνσης και πιθανώς η αντικατάσταση των δεικτών.
Ωστόσο, σήμερα, αν εκτελέσετε τον αναφερόμενο κώδικα, θα λάβετε το σφάλμα: malloc(): unaligned tcache chunk detected
. Έτσι, είναι απαραίτητο να γράψετε ως διεύθυνση στον νέο δείκτη μια ευθυγραμμισμένη διεύθυνση (ή να εκτελέσετε αρκετές φορές το δυαδικό αρχείο ώστε η γραμμένη διεύθυνση να είναι στην πραγματικότητα ευθυγραμμισμένη).
Tcache indexes attack
Συνήθως είναι δυνατό να βρείτε στην αρχή του heap ένα chunk που περιέχει την ποσότητα των chunks ανά δείκτη μέσα στο tcache και τη διεύθυνση του head chunk κάθε δείκτη tcache. Αν για κάποιο λόγο είναι δυνατό να τροποποιηθεί αυτή η πληροφορία, θα ήταν δυνατό να καταστήσουμε το head chunk κάποιου δείκτη να δείχνει σε μια επιθυμητή διεύθυνση (όπως το __malloc_hook
) ώστε στη συνέχεια να κατανεμηθεί ένα chunk του μεγέθους του δείκτη και να αντικατασταθούν τα περιεχόμενα του __malloc_hook
σε αυτή την περίπτωση.
Examples
- CTF https://guyinatuxedo.github.io/29-tcache/dcquals19_babyheap/index.html
- Libc info leak: Είναι δυνατό να γεμίσετε τα tcaches, να προσθέσετε ένα chunk στη μη ταξινομημένη λίστα, να αδειάσετε το tcache και να ξανακατανείμετε το chunk από το unsorted bin μόνο αντικαθιστώντας τα πρώτα 8B, αφήνοντας τη δεύτερη διεύθυνση στη libc από το chunk ανέγγιχτη ώστε να μπορούμε να την διαβάσουμε.
- Tcache attack: Το δυαδικό αρχείο είναι ευάλωτο σε 1B heap overflow. Αυτό θα εκμεταλλευτεί για να αλλάξει το size header ενός κατανεμημένου chunk κάνοντάς το μεγαλύτερο. Στη συνέχεια, αυτό το chunk θα απελευθερωθεί, προσθέτοντάς το στο tcache των chunks ψεύτικου μεγέθους. Στη συνέχεια, θα κατανεμηθεί ένα chunk με το ψεύτικο μέγεθος, και το προηγούμενο chunk θα επιστραφεί γνωρίζοντας ότι αυτό το chunk ήταν στην πραγματικότητα μικρότερο και αυτό παρέχει την ευκαιρία να αντικατασταθεί ο δείκτης FD του επόμενου chunk στη μνήμη.
Θα εκμεταλλευτούμε αυτό για να αντικαταστήσουμε τον δείκτη FD του επόμενου chunk ώστε να δείχνει στοmalloc_hook
, έτσι ώστε να είναι δυνατή η κατανομή 2 δεικτών: πρώτα ο νόμιμος δείκτης που μόλις τροποποιήσαμε, και στη συνέχεια η δεύτερη κατανομή θα επιστρέψει ένα chunk στοmalloc_hook
που είναι δυνατό να εκμεταλλευτεί για να γράψει ένα one gadget. - CTF https://guyinatuxedo.github.io/29-tcache/plaid19_cpp/index.html
- Libc info leak: Υπάρχει χρήση μετά από απελευθέρωση και διπλή απελευθέρωση. Σε αυτή την αναφορά, ο συγγραφέας διέρρευσε μια διεύθυνση της libc διαβάζοντας τη διεύθυνση ενός chunk που τοποθετήθηκε σε ένα μικρό bin (όπως η διαρροή από το unsorted bin αλλά από το μικρό).
- Tcache attack: Μια Tcache εκτελείται μέσω μιας διπλής απελευθέρωσης. Το ίδιο chunk απελευθερώνεται δύο φορές, έτσι μέσα στο Tcache το chunk θα δείχνει στον εαυτό του. Στη συνέχεια, κατανεμηθεί, ο δείκτης FD του τροποποιείται ώστε να δείχνει στο free hook και στη συνέχεια κατανεμηθεί ξανά ώστε το επόμενο chunk στη λίστα να είναι στο free hook. Στη συνέχεια, αυτό επίσης κατανεμηθεί και είναι δυνατό να γραφτεί η διεύθυνση του
system
εδώ ώστε όταν ένα malloc που περιέχει"/bin/sh"
απελευθερωθεί, να αποκτήσουμε ένα shell. - CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps0/index.html
- Η κύρια ευπάθεια εδώ είναι η ικανότητα να
free
οποιαδήποτε διεύθυνση στο heap υποδεικνύοντας την απόστασή της. - Tcache indexes attack: Είναι δυνατό να κατανεμηθεί και να απελευθερωθεί ένα chunk ενός μεγέθους που όταν αποθηκευτεί μέσα στο tcache chunk (το chunk με τις πληροφορίες των tcache bins) θα δημιουργήσει μια διεύθυνση με την τιμή 0x100. Αυτό συμβαίνει επειδή το tcache αποθηκεύει την ποσότητα των chunks σε κάθε bin σε διαφορετικά bytes, επομένως ένα chunk σε έναν συγκεκριμένο δείκτη δημιουργεί την τιμή 0x100.
- Στη συνέχεια, αυτή η τιμή φαίνεται να υπάρχει ένα chunk μεγέθους 0x100. Επιτρέποντας να εκμεταλλευτεί με
free
αυτή τη διεύθυνση. Αυτό θα προσθέσει αυτή τη διεύθυνση στον δείκτη των chunks μεγέθους 0x100 στο tcache. - Στη συνέχεια, κατανεμίζοντας ένα chunk μεγέθους 0x100, η προηγούμενη διεύθυνση θα επιστραφεί ως chunk, επιτρέποντας την αντικατάσταση άλλων tcache indexes.
Για παράδειγμα, τοποθετώντας τη διεύθυνση του malloc hook σε έναν από αυτούς και κατανεμίζοντας ένα chunk του μεγέθους αυτού του δείκτη θα παραχωρήσει ένα chunk στο calloc hook, το οποίο επιτρέπει τη γραφή ενός one gadget για να αποκτήσουμε ένα shell. - CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps1/index.html
- Η ίδια ευπάθεια όπως πριν με έναν επιπλέον περιορισμό.
- Tcache indexes attack: Παρόμοια επίθεση με την προηγούμενη αλλά χρησιμοποιώντας λιγότερα βήματα απελευθερώνοντας το chunk που περιέχει τις πληροφορίες tcache ώστε η διεύθυνσή του να προστεθεί στον δείκτη tcache του μεγέθους του, έτσι ώστε να είναι δυνατό να κατανεμηθεί αυτό το μέγεθος και να αποκτηθούν οι πληροφορίες του tcache chunk ως chunk, το οποίο επιτρέπει την προσθήκη του free hook ως διεύθυνση ενός δείκτη, να το κατανεμηθεί και να γραφτεί ένα one gadget πάνω του.
- Math Door. HTB Cyber Apocalypse CTF 2023
- Write After Free για να προσθέσετε έναν αριθμό στον δείκτη
fd
. - Χρειάζεται πολύ heap feng-shui σε αυτή την πρόκληση. Η αναφορά δείχνει πώς η διαχείριση της κεφαλής της λίστας ελεύθερων Tcache είναι πολύ χρήσιμη.
- Glibc leak μέσω
stdout
(FSOP). - Tcache poisoning για να αποκτήσετε μια αυθαίρετη γραφή primitive.
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.