House of Einherjar
Last updated
Last updated
Μάθετε & εξασκηθείτε στο 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
, το bit prev 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)