Tcache Bin Attack
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Για περισσότερες πληροφορίες σχετικά με το τι είναι ένα Tcache bin, ελέγξτε αυτή τη σελίδα:
Bins & Memory AllocationsΠρώτα απ' όλα, σημειώστε ότι το Tcache εισήχθη στην έκδοση Glibc 2.26.
Η επίθεση Tcache (γνωστή και ως δηλητηρίαση Tcache) που προτάθηκε στη σελίδα guyinatuxido είναι πολύ παρόμοια με την επίθεση γρήγορης bin όπου ο στόχος είναι να αντικατασταθεί ο δείκτης στο επόμενο chunk μέσα σε ένα ελεύθερο chunk σε μια αυθαίρετη διεύθυνση, ώστε αργότερα να είναι δυνατή η κατανομή αυτής της συγκεκριμένης διεύθυνσης και πιθανώς να αντικατασταθούν οι δείκτες.
Ωστόσο, σήμερα, αν εκτελέσετε τον αναφερόμενο κώδικα, θα λάβετε το σφάλμα: malloc(): unaligned tcache chunk detected
. Έτσι, είναι απαραίτητο να γράψετε ως διεύθυνση στον νέο δείκτη μια ευθυγραμμισμένη διεύθυνση (ή να εκτελέσετε αρκετές φορές το δυαδικό ώστε η γραμμένη διεύθυνση να είναι στην πραγματικότητα ευθυγραμμισμένη).
Συνήθως είναι δυνατό να βρείτε στην αρχή του heap ένα chunk που περιέχει την ποσότητα των chunks ανά δείκτη μέσα στο tcache και τη διεύθυνση προς το head chunk κάθε δείκτη tcache. Αν για κάποιο λόγο είναι δυνατό να τροποποιηθεί αυτή η πληροφορία, θα ήταν δυνατό να καταστήσουμε το head chunk κάποιου δείκτη να δείχνει σε μια επιθυμητή διεύθυνση (όπως __malloc_hook
) για να κατανεμηθεί στη συνέχεια ένα chunk του μεγέθους του δείκτη και να αντικατασταθούν τα περιεχόμενα του __malloc_hook
σε αυτή την περίπτωση.
Libc info leak: Είναι δυνατό να γεμίσετε τα tcaches, να προσθέσετε ένα chunk στη μη ταξινομημένη λίστα, να αδειάσετε το tcache και να ανακατανείμετε το chunk από τη μη ταξινομημένη bin μόνο αντικαθιστώντας τα πρώτα 8B, αφήνοντας τη δεύτερη διεύθυνση προς libc από το chunk ανέπαφη ώστε να μπορέσουμε να την διαβάσουμε.
Tcache attack: Το δυαδικό είναι ευάλωτο σε 1B heap overflow. Αυτό θα καταχραστεί για να αλλάξει το size header ενός κατανεμημένου chunk κάνοντάς το μεγαλύτερο. Στη συνέχεια, αυτό το chunk θα απελευθερωθεί, προσθέτοντάς το στο tcache των chunks ψεύτικου μεγέθους. Στη συνέχεια, θα κατανεμηθεί ένα chunk με το ψεύτικο μέγεθος, και το προηγούμενο chunk θα επιστραφεί γνωρίζοντας ότι αυτό το chunk ήταν στην πραγματικότητα μικρότερο και αυτό παρέχει την ευκαιρία να αντικατασταθεί ο επόμενος δείκτης chunk στη μνήμη.
Θα καταχραστούμε αυτό για να αντικαταστήσουμε τον δείκτη FD του επόμενου chunk ώστε να δείχνει στο malloc_hook
, έτσι ώστε να είναι δυνατή η κατανομή 2 δεικτών: πρώτα ο νόμιμος δείκτης που μόλις τροποποιήσαμε, και στη συνέχεια η δεύτερη κατανομή θα επιστρέψει ένα chunk στο malloc_hook
που είναι δυνατό να καταχραστεί για να γράψει ένα one gadget.
Libc info leak: Υπάρχει χρήση μετά από απελευθέρωση και διπλή απελευθέρωση. Σε αυτή την αναφορά, ο συγγραφέας διέρρευσε μια διεύθυνση της libc διαβάζοντας τη διεύθυνση ενός chunk που τοποθετήθηκε σε μια μικρή bin (όπως η διαρροή από τη μη ταξινομημένη bin αλλά από τη μικρή).
Tcache attack: Μια Tcache εκτελείται μέσω μιας διπλής απελευθέρωσης. Το ίδιο chunk απελευθερώνεται δύο φορές, έτσι μέσα στο Tcache το chunk θα δείχνει στον εαυτό του. Στη συνέχεια, κατανεμήθηκε, ο δείκτης FD του τροποποιείται ώστε να δείχνει στο free hook και στη συνέχεια κατανεμήθηκε ξανά, έτσι ώστε το επόμενο chunk στη λίστα να είναι στο free hook. Στη συνέχεια, αυτό επίσης κατανεμήθηκε και είναι δυνατό να γραφτεί η διεύθυνση του system
εδώ, έτσι ώστε όταν μια malloc που περιέχει "/bin/sh"
απελευθερωθεί, να αποκτήσουμε ένα shell.
Η κύρια ευπάθεια εδώ είναι η ικανότητα να 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. Για παράδειγμα, τοποθετώντας τη διεύθυνση του malloc hook σε έναν από αυτούς και κατανεμόντας ένα chunk του μεγέθους αυτού του δείκτη θα παραχωρήσει ένα chunk στο calloc hook, το οποίο επιτρέπει τη γραφή ενός one gadget για να αποκτήσουμε ένα shell.
Η ίδια ευπάθεια όπως πριν με μια επιπλέον περιοριστική προϋπόθεση.
Tcache indexes attack: Παρόμοια επίθεση με την προηγούμενη αλλά χρησιμοποιώντας λιγότερα βήματα απελευθερώνοντας το chunk που περιέχει τις πληροφορίες tcache ώστε η διεύθυνσή του να προστεθεί στον δείκτη tcache του μεγέθους του, έτσι ώστε να είναι δυνατό να κατανεμηθεί αυτό το μέγεθος και να αποκτηθούν οι πληροφορίες chunk tcache ως chunk, το οποίο επιτρέπει την προσθήκη του free hook ως διεύθυνση ενός δείκτη, την κατανομή του και τη γραφή ενός one gadget σε αυτό.
Write After Free για να προσθέσετε έναν αριθμό στον δείκτη fd
.
Χρειάζεται πολύ heap feng-shui σε αυτή την πρόκληση. Η αναφορά δείχνει πώς η διαχείριση της κεφαλής της λίστας ελεύθερων Tcache είναι πολύ χρήσιμη.
Glibc leak μέσω stdout
(FSOP).
Tcache poisoning για να αποκτήσετε μια αυθαίρετη γραφή primitive.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)