mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
6.5 KiB
6.5 KiB
Σπίτι των Einherjar
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Red Team του HackTricks AWS)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Αν θέλετε να δείτε την εταιρεία σας διαφημισμένη στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα τηλεγραφήματος ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του GitHub.
Βασικές Πληροφορίες
Κώδικας
- Ελέγξτε το παράδειγμα από https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- Ή αυτό από https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (μπορεί να χρειαστεί να γεμίσετε το tcache)
Στόχος
- Ο στόχος είναι η δέσμευση μνήμης σε σχεδόν οποιαδήποτε συγκεκριμένη διεύθυνση.
Απαιτήσεις
- Δημιουργία ενός ψεύτικου κομματιού όταν θέλουμε να δεσμεύσουμε ένα κομμάτι:
- Ορισμός δεικτών να δείχνουν στον εαυτό τους για να παρακάμψουν τους έλεγχους ακεραιότητας
- Λάθος κατά ένα από ένα κομμάτι σε άλλο για να τροποποιήσουμε το προηγούμενο σε χρήση
- Να υποδεικνύεται στο
prev_size
του κομματιού που καταχράστηκε το λάθος κατά ένα τη διαφορά μεταξύ του ίδιου και του ψεύτικου κομματιού - Το μέγεθος του ψεύτικου κομματιού πρέπει επίσης να έχει οριστεί στο ίδιο μέγεθος για να παρακάμψει τους έλεγχους ακεραιότητας
- Για τη δημιουργία αυτών των κομματιών, θα χρειαστείτε μια διαρροή στο σωρό.
Επίθεση
- Δημιουργείται ένα ψεύτικο κομμάτι μέσα σε ένα κομμάτι που ελέγχεται από τον επιτιθέμενο δείχνοντας με τους
fd
καιbk
στο αρχικό κομμάτι για να παρακάμψει τις προστασίες - Δεσμεύονται 2 άλλα κομμάτια (
B
καιC
) - Κατάχρηση του λάθους κατά ένα στο
B
όπου το bitprev in use
καθαρίζεται και τα δεδομέναprev_size
αντικαθίστανται με τη διαφορά μεταξύ του μέρους όπου δεσμεύεται το κομμάτιC
, με το ψεύτικο κομμάτιA
που δημιουργήθηκε πριν - Αυτό το
prev_size
και το μέγεθος στο ψεύτικο κομμάτιA
πρέπει να είναι το ίδιο για να παρακάμψουν τους ελέγχους. - Στη συνέχεια, γεμίζεται το tcache
- Στη συνέχεια, το
C
ελευθερώνεται έτσι ώστε να συγχωνευτεί με το ψεύτικο κομμάτιA
- Στη συνέχεια, δημιουργείται ένα νέο κομμάτι
D
που θα ξεκινά από το ψεύτικο κομμάτιA
και θα καλύπτει το κομμάτιB
- Το σπίτι των Einherjar τελειώνει εδώ
- Αυτό μπορεί να συνεχιστεί με μια επίθεση fast bin:
- Απελευθερώστε το
B
για να το προσθέσετε στο fast bin - Το
fd
τουB
αντικαθίσταται καθιστώντας το να δείχνει στην επιθυμητή διεύθυνση καταχρώμενο το κομμάτιD
(καθώς περιέχει τοB
μέσα) - Στη συνέχεια, γίνονται 2 mallocs και το δεύτερο θα δεσμεύει την επιθυμητή διεύθυνση
Αναφορές και άλλα παραδείγματα
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- Αφού απελευθερωθούν οι δείκτες, δεν ακυρώνονται, επομένως είναι ακόμα δυνατή η πρόσβαση στα δεδομένα τους. Επομένως, ένα κομμάτι τοποθετείται στον μη ταξινομημένο κάδο και διαρρέει τους δείκτες που περιέχει (διαρροή libc) και στη συνέχεια τοποθετείται ένας νέος σωρός στον μη ταξινομημένο κάδο και διαρρέει μια διεύθυνση σωρού από τον δείκτη που λαμβάνει.