House of Einherjar
Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Βασικές Πληροφορίες
Κώδικας
Ελέγξτε το παράδειγμα από 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)
Στόχος
Ο στόχος είναι η δέσμευση μνήμης σε σχεδόν οποιαδήποτε συγκεκριμένη διεύθυνση.
Απαιτήσεις
Δημιουργία ενός ψεύτικου κομματιού όταν θέλουμε να δεσμεύσουμε ένα κομμάτι:
Ορισμός δεικτών να δείχνουν στον εαυτό τους για να παρακάμψουν τους έλεγχους ακεραιότητας
Υπερχείλιση ενός byte με ένα μηδενικό byte από ένα κομμάτι στο επόμενο για να τροποποιήσει τη σημαία
PREV_INUSE
.Να υποδειχθεί στο
prev_size
του κομματιού που καταχρηστικά υπερβαίνει το μηδενικό byte η διαφορά μεταξύ του ίδιου κομματιού και του ψεύτικου κομματιούΤο μέγεθος του ψεύτικου κομματιού πρέπει επίσης να έχει οριστεί στο ίδιο μέγεθος για να παρακάμψει τους έλεγχους ακεραιότητας
Για τη δημιουργία αυτών των κομματιών, θα χρειαστείτε μια διαρροή στη στοίβα.
Επίθεση
Δημιουργείται ένα ψεύτικο κομμάτι μέσα σε ένα κομμάτι που ελέγχεται από τον επιτιθέμενο δείχνοντας με τους
fd
καιbk
στο αρχικό κομμάτι για να παρακάμψει τις προστασίεςΔεσμεύονται 2 άλλα κομμάτια (
B
καιC
)Χρησιμοποιώντας το off by one στο
B
, το bitprev in use
καθαρίζεται και τα δεδομέναprev_size
αντικαθίστανται με τη διαφορά μεταξύ του μέρους όπου δεσμεύεται το κομμάτιC
, με το ψεύτικο κομμάτιA
που δημιουργήθηκε πρινΑυτό το
prev_size
και το μέγεθος στο ψεύτικο κομμάτιA
πρέπει να είναι το ίδιο για να παρακάμψουν τους ελέγχους.Στη συνέχεια, γεμίζεται το tcache
Στη συνέχεια, απελευθερώνεται το
C
έτσι ώστε να συγχωνευτεί με το Ϩεύτικο κομμάτιA
Στη συνέχεια, δημιουργείται ένα νέο κομμάτι
D
που θα ξεκινά από το Ϩεύτικο κομμάτιA
και θα καλύπτει το κομμάτιB
Εδώ τελειώνει το house of Einherjar
Αυτό μπορεί να συνεχιστεί με μια επίθεση fast bin ή Tcache poisoning:
Απελευθερώστε το
B
για να το προσθέσετε στο fast bin / TcacheΤο
fd
τουB
αντικαθίσταται καθιστώντας το να δείχνει στην επιθυμητή διεύθυνση καταχρώμενο το κομμάτιD
(καθώς περιέχει τοB
μέσα)Στη συνέχεια, γίνονται 2 mallocs και το δεύτερο θα δεσμεύει την επιθυμητή διεύθυνση
Αναφορές και άλλα παραδείγματα
Αφού απελευθερωθούν οι δείκτες, δεν ακυρώνονται, οπότε είναι ακόμα δυνατή η πρόσβαση στα δεδομένα τους. Συνεπώς, τοποθετείται ένα κομμάτι στον ταξιναγμένο κάδο και διαρρέει τους δείκτες που περιέχει (διαρροή libc) και στη συνέχεια τοποθετείται ένα νέο κομμάτι στον ταξιναγμένο κάδο και διαρρέει μια διεύθυνση στη στοίβα από τον δείκτη που λαμβάνει.
Σφάλμα υπερχείλισης μηδενικού byte στο
strtok
.Χρησιμοποιήστε το House of Einherjar για να πάρετε μια κατάσταση επικάλυψης κομματιών και να τελειώσετε με Tcache poisoning για να πάρετε ένα πρωτεύον γράψιμο.
Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Last updated