House of Einherjar
Reading time: 4 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
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.
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.