12 KiB
Επίθεση Unsorted Bin
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Αν θέλετε να δείτε την εταιρεία σας διαφημισμένη στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα τηλεγραφήματος ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα αποθετήρια του HackTricks και του HackTricks Cloud στο GitHub.
Βασικές Πληροφορίες
Για περισσότερες πληροφορίες σχετικά με το τι είναι ένα unsorted bin ελέγξτε αυτήν τη σελίδα:
{% content-ref url="bins-and-memory-allocations.md" %} bins-and-memory-allocations.md {% endcontent-ref %}
Οι μη ταξινομημένες λίστες είναι σε θέση να γράψουν τη διεύθυνση στο unsorted_chunks (av)
στη διεύθυνση bk
του κομματιού. Επομένως, αν ένας επιτιθέμενος μπορεί να τροποποιήσει τη διεύθυνση του δείκτη bk σε ένα κομμάτι μέσα στο unsorted bin, θα μπορούσε να γράψει αυτήν τη διεύθυνση σε μια τυχαία διεύθυνση που θα μπορούσε να βοηθήσει στη διαρροή μιας διεύθυνσης της libc ή στην παράκαμψη κάποιας άμυνας.
Έτσι, βασικά, αυτή η επίθεση επέτρεπε να αντικαταστήσει κάποια τυχαία διεύθυνση με ένα μεγάλο αριθμό (μια διεύθυνση που θα μπορούσε να είναι μια διεύθυνση στο heap ή μια διεύθυνση της libc) όπως μια διεύθυνση του stack που θα μπορούσε να διαρρεύσει ή κάποιον περιορισμό όπως η γενική μεταβλητή global_max_fast
για να επιτρέψει τη δημιουργία γρήγορων bins με μεγαλύτερα μεγέθη (και να περάσει από μια επίθεση unsorted bin σε μια επίθεση fast bin).
{% hint style="success" %}
Κοιτάζοντας το παράδειγμα που παρέχεται στο https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle και χρησιμοποιώντας τα 0x4000 και 0x5000 αντί για τα 0x400 και 0x500 ως μεγέθη κομματιών (για να αποφευχθούν οι tcaches) είναι δυνατό να δούμε ότι σήμερα ενεργοποιείται το σφάλμα malloc(): unsorted double linked list corrupted
.
Επομένως, αυτή η επίθεση unsorted bin τώρα (μεταξύ άλλων ελέγχων) απαιτεί επίσης να είναι δυνατό να επισκευάσει τη διπλή συνδεδεμένη λίστα ώστε να παρακαμφθεί victim->bck->fd == victim
ή όχι victim->fd == av (arena)
. Που σημαίνει ότι η διεύθυνση όπου θέλουμε να γράψουμε πρέπει να έχει τη διεύθυνση του ψεύτικου κομματιού στη θέση του fd
και ότι το ψεύτικο κομμάτι fd
δείχνει στην αρένα.
{% endhint %}
{% hint style="danger" %} Σημειώστε ότι αυτή η επίθεση διαφθείρει το unsorted bin (επομένως και τα μικρά και τα μεγάλα). Έτσι, μπορούμε τώρα να χρησιμοποιήσουμε εκχωρήσεις από το fast bin (ένα πιο πολύπλοκο πρόγραμμα μπορεί να κάνει άλλες εκχωρήσεις και να καταρρεύσει), και για να ενεργοποιήσουμε αυτό πρέπει να εκχωρήσουμε το ίδιο μέγεθος ή το πρόγραμμα θα καταρρεύσει.
Σημειώστε ότι η καθορισμός του global_max_fast
μπορεί να βοηθήσει σε αυτήν την περίπτωση εμπιστευόμενος ότι το fast bin θα είναι σε θέση να φροντίσει όλες τις άλλες εκχωρήσεις μέχρι να ολοκληρωθεί η εκμετάλλευση.
{% endhint %}
Ο κώδικας από τον guyinatuxedo το εξηγεί πολύ καλά, αν και αν τροποποιήσετε τα mallocs για να εκχωρήσετε μνήμη αρκετά μεγάλη ώστε να μην καταλήξει σε tcache, μπορείτε να δείτε ότι εμφανίζεται το προαναφερθέν σφάλμα που αποτρέπει αυτήν την τεχνική: malloc(): unsorted double linked list corrupted
Επίθεση Unsorted Bin Infoleak
Αυτό είναι πραγματικά ένα πολύ βασικό έννοια. Τα κομμάτια στο unsorted bin θα έχουν διπλούς δείκτες για να δημιουργήσουν το bin. Το πρώτο κομμάτι στο unsorted bin θα έχει πραγματικά τους FD και BK συνδέσμους που δείχνουν σε ένα μέρος της κύριας αρένας (libc).
Επομένως, αν μπορείτε να βάλετε ένα κομμάτι μέσα σε ένα unsorted bin και να το διαβάσετε (χρήση μετά από απελευθέρωση) ή να το εκχωρήσετε ξανά χωρίς να αντικαταστήσετε τουλάχιστον 1 από τους δείκτες για να το διαβάσετε, μπορείτε να έχετε μια διαρροή πληροφοριών της libc.
Αναφορές & Άλλα παραδείγματα
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#hitcon-training-lab14-magic-heap
- Ο στόχος είναι να αντικατασταθεί μια παγκόσμια μεταβλητή με μια τιμή μεγαλύτερη από 4869 για να είναι δυνατή η λήψη της σημαίας και το PIE δεν είναι ενεργοποιημένο.
- Είναι δυνατό να δημιουργηθούν κομμάτια αυθαίρετων μεγεθών και υπάρχει υπερχείλιση στο heap με το επιθυμητό μέγεθος.
- Η επίθεση ξεκινά δημιουργώντας 3 κομμάτια: το κομμάτι0 για να εκμεταλλευτεί την υπερχείλιση, το κομμάτι1 για να υπερχειλιστεί και το κομμάτι2 ώστε το κομμάτι κορυφής να μην συγχωνεύσει τα προηγούμενα.
- Στη συνέχεια, το κομμάτι1 απελευθερώνεται και το κομμάτι0 υπερχειλίζεται ώστε ο δείκτης
bk
του κομματιού1 να δείχνει:bk = magic - 0x10
- Στη συνέχεια, εκχωρείται το κομμάτι3 με το ίδιο μέγεθος με το κομμάτι1, το οποίο θα ενεργοποιήσει την επίθεση unsorted bin και θα τροποποιήσει την τιμή της παγκόσμιας μεταβλητής, καθιστώντας δυνατή τη λήψη της σημαίας.
- [https://guyinatuxedo.github.io/31-unsortedbin_attack/0ctf16_zerostorage/index.html](https://guyinatuxedo.github.io/31-unsortedbin_attack
- Εάν καταφέρουμε να αποκτήσουμε ένα γρήγορο κομμάτι μεγέθους 0x200 σε αυτή τη θέση, θα είναι δυνατό να αντικαταστήσουμε ένα δείκτη συνάρτησης που θα εκτελεστεί.
- Για αυτό, δημιουργείται ένα νέο κομμάτι μεγέθους
0xfc
και καλείται η συνάρτηση συγχώνευσης με αυτόν τον δείκτη δύο φορές, με αυτόν τον τρόπο αποκτούμε ένα δείκτη προς ένα ελεύθερο κομμάτι μεγέθους0xfc*2 = 0x1f8
στο γρήγορο κάδο. - Στη συνέχεια, καλείται η συνάρτηση επεξεργασίας σε αυτό το κομμάτι για να τροποποιήσει τη διεύθυνση
fd
αυτού του γρήγορου κάδου ώστε να δείχνει στην προηγούμενη συνάρτηση__free_hook
. - Στη συνέχεια, δημιουργείται ένα κομμάτι μεγέθους
0x1f8
για να ανακτήσει από τον γρήγορο κάδο το προηγούμενο άχρηστο κομμάτι, έτσι δημιουργείται άλλο ένα κομμάτι μεγέθους0x1f8
για να λάβει ένα κομμάτι γρήγορου κάδου στο__free_hook
το οποίο αντικαθίσταται με τη διεύθυνση της συνάρτησηςsystem
. - Και τελικά ένα κομμάτι που περιέχει τη συμβολοσειρά
/bin/sh\x00
απελευθερώνεται καλώντας τη συνάρτηση διαγραφής, ενεργοποιώντας τη συνάρτηση__free_hook
που δείχνει στο σύστημα με το/bin/sh\x00
ως παράμετρο.
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας διαφημισμένη στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα τηλεγραφήματος ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.