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