mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
5.1 KiB
5.1 KiB
House of Einherjar
{{#include ../../banners/hacktricks-training.md}}
Basic Information
Code
- Δείτε το παράδειγμα από 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)
Goal
- Ο στόχος είναι να δεσμεύσετε μνήμη σε σχεδόν οποιαδήποτε συγκεκριμένη διεύθυνση.
Requirements
- Δημιουργήστε ένα ψεύτικο chunk όταν θέλουμε να δεσμεύσουμε ένα chunk:
- Ρυθμίστε δείκτες να δείχνουν στον εαυτό τους για να παρακάμψουν τους ελέγχους εγκυρότητας
- Μία-byte overflow με ένα null byte από ένα chunk στο επόμενο για να τροποποιήσετε τη σημαία
PREV_INUSE. - Υποδείξτε στο
prev_sizeτου chunk που έχει κακοποιηθεί με off-by-null τη διαφορά μεταξύ του εαυτού του και του ψεύτικου chunk - Το μέγεθος του ψεύτικου chunk πρέπει επίσης να έχει ρυθμιστεί στο ίδιο μέγεθος για να παρακάμψει τους ελέγχους εγκυρότητας
- Για την κατασκευή αυτών των chunks, θα χρειαστείτε ένα heap leak.
Attack
- Δημιουργείται ένα ψεύτικο chunk μέσα σε ένα chunk που ελέγχεται από τον επιτιθέμενο, δείχνοντας με
fdκαιbkστο αρχικό chunk για να παρακάμψει τις προστασίες - 2 άλλα chunks (
BκαιC) δεσμεύονται - Κακοποιώντας το off by one στο
B, το bitprev in useκαθαρίζεται και τα δεδομέναprev_sizeαντικαθίστανται με τη διαφορά μεταξύ του σημείου όπου δεσμεύεται το chunkC, στο ψεύτικο chunkAπου δημιουργήθηκε προηγουμένως - Αυτό το
prev_sizeκαι το μέγεθος στο ψεύτικο chunkAπρέπει να είναι τα ίδια για να παρακάμψουν τους ελέγχους. - Στη συνέχεια, γεμίζεται το tcache
- Στη συνέχεια, το
Cαπελευθερώνεται ώστε να ενοποιηθεί με το ψεύτικο chunkA - Στη συνέχεια, δημιουργείται ένα νέο chunk
Dτο οποίο θα ξεκινά στο ψεύτικο chunkAκαι θα καλύπτει το chunkB - Το house of Einherjar τελειώνει εδώ
- Αυτό μπορεί να συνεχιστεί με μια γρήγορη επίθεση bin ή Tcache poisoning:
- Απελευθερώστε το
Bγια να το προσθέσετε στο γρήγορο bin / Tcache - Το
fdτουBαντικαθίσταται κάνοντάς το να δείχνει στη στοχευμένη διεύθυνση κακοποιώντας το chunkD(καθώς περιέχει τοBμέσα) - Στη συνέχεια, γίνονται 2 mallocs και το δεύτερο θα είναι δεσμεύοντας τη στοχευμένη διεύθυνση
References and other examples
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- CTF https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- Μετά την απελευθέρωση των δεικτών τους δεν μηδενίζονται, οπότε είναι ακόμα δυνατή η πρόσβαση στα δεδομένα τους. Επομένως, ένα chunk τοποθετείται στο unsorted bin και διαρρέει τους δείκτες που περιέχει (libc leak) και στη συνέχεια μια νέα heap τοποθετείται στο unsorted bin και διαρρέει μια διεύθυνση heap από τον δείκτη που αποκτά.
- baby-talk. DiceCTF 2024
- Null-byte overflow bug στο
strtok. - Χρησιμοποιήστε το House of Einherjar για να αποκτήσετε μια κατάσταση επικαλυπτόμενων chunks και να τελειώσετε με Tcache poisoning για να αποκτήσετε μια αυθαίρετη γραφή primitive.
{{#include ../../banners/hacktricks-training.md}}