House of Einherjar
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)
Check the example from https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
Or the one from https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (you might need to fill the tcache)
Ο στόχος είναι να δεσμεύσουμε μνήμη σε σχεδόν οποιαδήποτε συγκεκριμένη διεύθυνση.
Δημιουργήστε ένα ψεύτικο chunk όταν θέλουμε να δεσμεύσουμε ένα chunk:
Ρυθμίστε δείκτες να δείχνουν στον εαυτό τους για να παρακάμψουν τους ελέγχους εγκυρότητας
Μία υπερχείλιση ενός byte με ένα null byte από ένα chunk στο επόμενο για να τροποποιήσουμε τη σημαία PREV_INUSE
.
Υποδείξτε στο prev_size
του chunk που έχει κακοποιηθεί με null τη διαφορά μεταξύ του εαυτού του και του ψεύτικου chunk
Το μέγεθος του ψεύτικου chunk πρέπει επίσης να έχει ρυθμιστεί στο ίδιο μέγεθος για να παρακάμψει τους ελέγχους εγκυρότητας
Για την κατασκευή αυτών των chunks, θα χρειαστείτε μια διαρροή heap.
Δημιουργείται ένα ψεύτικο chunk μέσα σε ένα chunk που ελέγχεται από τον επιτιθέμενο, δείχνοντας με fd
και bk
στο αρχικό chunk για να παρακάμψει τις προστασίες
2 άλλα chunks (B
και C
) δεσμεύονται
Κακοποιώντας το off by one στο B
, το bit prev in use
καθαρίζεται και τα δεδομένα prev_size
αντικαθίστανται με τη διαφορά μεταξύ της θέσης όπου δεσμεύεται το chunk C
, στο ψεύτικο chunk A
που δημιουργήθηκε προηγουμένως
Αυτό το prev_size
και το μέγεθος στο ψεύτικο chunk A
πρέπει να είναι τα ίδια για να παρακάμψουν τους ελέγχους.
Στη συνέχεια, γεμίζεται το tcache
Στη συνέχεια, το C
απελευθερώνεται ώστε να ενοποιηθεί με το ψεύτικο chunk A
Στη συνέχεια, δημιουργείται ένα νέο chunk D
το οποίο θα ξεκινά στο ψεύτικο chunk A
και θα καλύπτει το chunk B
Το house of Einherjar τελειώνει εδώ
Αυτό μπορεί να συνεχιστεί με μια γρήγορη επίθεση bin ή δηλητηρίαση Tcache:
Απελευθερώστε το B
για να το προσθέσετε στο γρήγορο bin / Tcache
Το fd
του B
αντικαθίσταται κάνοντάς το να δείχνει στη στοχευμένη διεύθυνση κακοποιώντας το chunk D
(καθώς περιέχει το B
)
Στη συνέχεια, γίνονται 2 mallocs και το δεύτερο θα είναι δεσμεύοντας τη στοχευμένη διεύθυνση
Μετά την απελευθέρωση των δεικτών τους δεν μηδενίζονται, οπότε είναι ακόμα δυνατή η πρόσβαση στα δεδομένα τους. Επομένως, ένα chunk τοποθετείται στο unsorted bin και διαρρέει τους δείκτες που περιέχει (libc leak) και στη συνέχεια μια νέα heap τοποθετείται στο unsorted bin και διαρρέει μια διεύθυνση heap από τον δείκτη που αποκτά.
Bug υπερχείλισης null-byte στο strtok
.
Χρησιμοποιήστε το House of Einherjar για να αποκτήσετε μια κατάσταση επικαλυπτόμενων chunks και να τελειώσετε με δηλητηρίαση Tcache για να αποκτήσετε μια αυθαίρετη γραφή primitive.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)