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 εισήχθη στην έκδοση 2.26 της Glibc.
Η επίθεση Tcache (γνωστή και ως δηλητηρίαση Tcache) που προτάθηκε στη σελίδα guyinatuxido είναι πολύ παρόμοια με την επίθεση fast bin, όπου ο στόχος είναι να αντικατασταθεί ο δείκτης στο επόμενο chunk μέσα σε ένα ελεύθερο chunk με μια αυθαίρετη διεύθυνση, ώστε αργότερα να είναι δυνατή η κατανομή αυτής της συγκεκριμένης διεύθυνσης και πιθανώς η αντικατάσταση των δεικτών.
Ωστόσο, σήμερα, αν εκτελέσετε τον αναφερόμενο κώδικα, θα λάβετε το σφάλμα: malloc(): unaligned tcache chunk detected
. Έτσι, είναι απαραίτητο να γράψετε ως διεύθυνση στον νέο δείκτη μια ευθυγραμμισμένη διεύθυνση (ή να εκτελέσετε αρκετές φορές το δυαδικό ώστε η γραμμένη διεύθυνση να είναι στην πραγματικότητα ευθυγραμμισμένη).
Tcache indexes attack
Συνήθως είναι δυνατό να βρείτε στην αρχή του heap ένα chunk που περιέχει την ποσότητα των chunks ανά δείκτη μέσα στο tcache και τη διεύθυνση του κεφαλιού chunk κάθε δείκτη tcache. Αν για κάποιο λόγο είναι δυνατό να τροποποιηθεί αυτή η πληροφορία, θα ήταν δυνατό να κατευθυνθεί το κεφάλι 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. Αυτό θα εκμεταλλευτεί για να αλλάξει το μέγεθος κεφαλίδας ενός κατανεμημένου 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 (όπως η διαρροή από τη μη ταξινομημένη 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 ενός μεγέθους που όταν αποθηκευτεί μέσα στο chunk tcache (το 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 του μεγέθους του, έτσι ώστε να είναι δυνατό να κατανεμηθεί αυτό το μέγεθος και να αποκτηθούν οι πληροφορίες του chunk tcache ως 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.