Fast Bin Attack
Last updated
Last updated
Μάθετε & εξασκηθείτε στο Hacking του AWS:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο Hacking του GCP: HackTricks Training GCP Red Team Expert (GRTE)
Για περισσότερες πληροφορίες σχετικά με το τι είναι ένα γρήγορο bin ελέγξτε αυτήν τη σελίδα:
Bins & Memory AllocationsΕπειδή το γρήγορο bin είναι μια λίστα με μονό κρίκο, υπάρχουν πολύ λιγότερες προστασίες από άλλα bins και απλά η τροποποίηση μιας διεύθυνσης σε ένα ελεύθερο fast bin τμήμα είναι αρκετή για να μπορέσετε να εκχωρήσετε αργότερα ένα τμήμα σε οποιαδήποτε διεύθυνση μνήμης.
Ως περίληψη:
Μπορείτε να βρείτε ένα πλήρες παράδειγμα σε έναν πολύ καλά εξηγημένο κώδικα από https://guyinatuxedo.github.io/28-fastbin_attack/explanation_fastbinAttack/index.html:
Εάν είναι δυνατόν να αντικατασταθεί η τιμή της καθολικής μεταβλητής global_max_fast
με ένα μεγάλο αριθμό, αυτό επιτρέπει τη δημιουργία γρήγορων τμημάτων fast bin με μεγαλύτερα μεγέθη, πιθανώς επιτρέποντας την εκτέλεση επιθέσεων fast bin σε σενάρια όπου δεν ήταν δυνατόν προηγουμένως. Αυτή η κατάσταση είναι χρήσιμη στο πλαίσιο της επίθεσης μεγάλου τμήματος και της επίθεσης αταξινόμητου τμήματος
Είναι δυνατόν να δεσμεύσετε τμήματα, να τα απελευθερώσετε, να διαβάσετε το περιεχόμενό τους και να τα γεμίσετε (με μια ευπάθεια υπερχείλισης).
Συγχώνευση τμήματος για διαρροή πληροφοριών: Η τεχνική βασικά είναι να καταχραστείτε την υπερχείλιση για να δημιουργήσετε ένα ψεύτικο prev_size
ώστε ένα προηγούμενο τμήμα να τοποθετηθεί μέσα σε ένα μεγαλύτερο, έτσι όταν διατίθεται το μεγαλύτερο που περιέχει άλλο ένα τμήμα, είναι δυνατόν να εκτυπωθούν τα δεδομένα του και να διαρρεύσει μια διεύθυνση στο libc (main_arena+88
).
Αντικατάσταση του malloc hook: Για αυτό, και καταχρηστικά την προηγούμενη κατάσταση επικάλυψης, ήταν δυνατό να υπάρχουν 2 τμήματα που έδειχναν στην ίδια μνήμη. Συνεπώς, απελευθερώνοντάς τα και τα δύο (απελευθερώνοντας ένα άλλο τμήμα μεταξύ τους για να αποφευχθούν προστασίες), ήταν δυνατό να υπάρχει το ίδιο τμήμα στο fast bin 2 φορές. Στη συνέχεια, ήταν δυνατό να το διατεθεί ξανά, να αντικατασταθεί η διεύθυνση του επόμενου τμήματος για να δείχνει λίγο πριν από το __malloc_hook
(έτσι ώστε να δείχνει σε έναν ακέραιο που το malloc νομίζει ότι είναι μέγεθος ελεύθερο - άλλη παράκαμψη), να το διατεθεί ξανά και στη συνέχεια να διατεθεί ένα άλλο τμήμα που θα λάβει μια διεύθυνση στους malloc hooks.
Τελικά ένα one gadget γράφτηκε εκεί.
Υπάρχει υπερχείλιση στη στοίβα και χρήση μετά την απελευθέρωση και διπλή απελευθέρωση επειδή όταν ένα τμήμα απελευθερώνεται είναι δυνατόν να επαναχρησιμοποιηθούν και να απελευθερωθούν ξανά οι δείκτες
Διαρροή πληροφοριών Libc: Απλώς απελευθερώστε μερικά τμήματα και θα λάβουν ένα δείκτη σε μέρος της τοποθεσίας του κύριου χώρου. Δεδομένου ότι μπορείτε να επαναχρησιμοποιήσετε απελευθερωμένους δείκτες, απλώς διαβάστε αυτήν τη διεύθυνση.
Επίθεση Fast bin: Όλοι οι δείκτες στις δεσμεύσεις αποθηκεύονται μέσα σε έναν πίνακα, έτσι μπορούμε να απελευθερώσουμε μερικά γρήγορα τμήματα fast bin και στο τελευταίο να αντικαταστήσουμε τη διεύθυνση για να δείχνει λίγο πριν από αυτόν τον πίνακα δεικτών. Στη συνέχεια, να δεσμεύσουμε μερικά τμήματα με το ίδιο μέγεθος και θα λάβουμε πρώτα το γνήσιο και στη συνέχεια το ψεύτικο που περιέχει τον πίνακα δεικτών. Τώρα μπορούμε να αντικαταστήσουμε αυτούς τους δείκτες δέσμευσης για να κάνουμε τη διεύθυνση GOT του free
να δείχνει στο system
και στη συνέχεια να γράψουμε "/bin/sh"
στο τμήμα 1 για να καλέσουμε στη συνέχεια το free(chunk1)
το οποίο αντ' αυτού θα εκτελέσει το system("/bin/sh")
.
Ένα άλλο παράδειγμα κατάχρησης μιας υπερχείλισης ενός byte για τη συγχώνευση τμημάτων στον αταξινόμητο bin και τη λήψη μιας διαρροής πληροφοριών Libc και στη συνέχεια την εκτέλεση μιας επίθεσης fast bin για την αντικατάσταση του malloc hook με μια διεύθυνση one gadget
Μετά από μια διαρροή πληροφοριών καταχρηστικά του αταξινόμητου bin με ένα UAF για να διαρρεύσει μια διεύθυνση Libc και μια διεύθυνση PIE, η εκμετάλλευση αυτού του CTF χρησιμοποίησε μια επίθεση fast bin για να δεσμεύσει ένα τμήμα σε ένα μέρος όπου βρίσκονταν οι δείκτες σε ελεγχόμενα τμήματα, έτσι ήταν δυνατό να αντικατασταθούν ορισμένοι δείκτες για να γραφτεί ένα one gadget στο GOT
Μπορείτε να βρείτε μια Fast Bin επίθεση που καταχρηστικά χρησιμοποιείται μέσω μιας επίθεσης αταξινόμητου bin:
Σημειώστε ότι είναι συνηθισμένο πριν εκτελέσετε επιθέσεις fast bin να καταχρηστικά χρησιμοποιείτε τις λίστες απελευθέρωσης για να διαρρεύσετε διευθύνσεις libc/heap (όταν απαιτείται).
Μπορούμε να δεσμεύσουμε μόνο τμήματα μεγαλύτερα από 0x100
.
Αντικατάσταση του global_max_fast
χρησιμοποιώντας μια επίθεση Unsorted Bin (λειτουργεί 1 στις 16 φορές λόγω ASLR, επειδή πρέπει να τροποποιήσουμε 12 bits, αλλά πρέπει να τροποποιήσουμε 16 bits).
Επίθεση Fast Bin για την τροποποίηση ενός παγκόσμιου πίνακα τμημάτων. Αυτό δίνει ένα αυθαίρετο ανάγνωσης/εγγραφής πρωτογενές, το οποίο επιτρέπει την τροποποίηση του GOT και την ρύθμιση κάποιας λειτουργίας να δείχνει στο system
.
Μάθετε & εξασκηθείτε στο AWS Hacking:[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Μάθετε & εξασκηθείτε στο GCP Hacking: [**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)