Large Bin Attack
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Για περισσότερες πληροφορίες σχετικά με το τι είναι ένα μεγάλο bin ελέγξτε αυτήν τη σελίδα:
Bins & Memory AllocationsΕίναι δυνατόν να βρείτε ένα εξαιρετικό παράδειγμα στο how2heap - large bin attack.
Βασικά εδώ μπορείτε να δείτε πώς, στην τελευταία "τρέχουσα" έκδοση του glibc (2.35), δεν γίνεται έλεγχος: P->bk_nextsize
επιτρέποντας την τροποποίηση μιας αυθαίρετης διεύθυνσης με την τιμή ενός κομματιού μεγάλου bin αν πληρούνται συγκεκριμένες συνθήκες.
Σε εκείνο το παράδειγμα μπορείτε να βρείτε τις ακόλουθες συνθήκες:
Ένα μεγάλο κομμάτι είναι εκχωρημένο
Ένα μεγάλο κομμάτι μικρότερο από το πρώτο αλλά στον ίδιο δείκτη είναι εκχωρημένο
Πρέπει να είναι μικρότερο ώστε στο bin να πάει πρώτο
(Δημιουργείται ένα κομμάτι για να αποτρέψει τη συγχώνευση με το κομμάτι στην κορυφή)
Στη συνέχεια, το πρώτο μεγάλο κομμάτι απελευθερώνεται και εκχωρείται ένα νέο κομμάτι μεγαλύτερο από αυτό -> Το Κομμάτι1 πηγαίνει στο μεγάλο bin
Στη συνέχεια, το δεύτερο μεγάλο κομμάτι απελευθερώνεται
Τώρα, η ευπάθεια: Ο επιτιθέμενος μπορεί να τροποποιήσει το chunk1->bk_nextsize
σε [target-0x20]
Στη συνέχεια, εκχωρείται ένα μεγαλύτερο κομμάτι από το κομμάτι 2, έτσι το κομμάτι2 εισάγεται στο μεγάλο bin αντικαθιστώντας τη διεύθυνση chunk1->bk_nextsize->fd_nextsize
με τη διεύθυνση του κομματιού 2
Υπάρχουν και άλλα πιθανά σενάρια, το θέμα είναι να προστεθεί στο μεγάλο bin ένα κομμάτι που είναι μικρότερο από ένα τρέχον X κομμάτι στο bin, έτσι πρέπει να εισαχθεί ακριβώς πριν από αυτό στο bin, και πρέπει να μπορούμε να τροποποιήσουμε το bk_nextsize
του X καθώς εκεί θα γραφτεί η διεύθυνση του μικρότερου κομματιού.
Αυτός είναι ο σχετικός κώδικας από το malloc. Έχουν προστεθεί σχόλια για καλύτερη κατανόηση του πώς έγινε η αντικατάσταση της διεύθυνσης:
Αυτό μπορεί να χρησιμοποιηθεί για να αντικαταστήσετε την καθολική μεταβλητή global_max_fast
της libc για να εκμεταλλευτείτε έπειτα μια επίθεση fast bin με μεγαλύτερα κομμάτια.
Μπορείτε να βρείτε μια άλλη εξαιρετική εξήγηση αυτής της επίθεσης στο guyinatuxedo.
Επίθεση large bin στην ίδια κατάσταση όπως εμφανίζεται στο how2heap.
Η γραφή primitive είναι πιο πολύπλοκη, επειδή η global_max_fast
είναι άχρηστη εδώ.
Απαιτείται FSOP για να ολοκληρωθεί η εκμετάλλευση.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)