mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-29 08:01:00 +00:00
8.1 KiB
8.1 KiB
House of Einherjar
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε 💬 στην ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Βασικές Πληροφορίες
Κώδικας
- Ελέγξτε το παράδειγμα από 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 και το δεύτερο θα δεσμεύει την επιθυμητή διεύθυνση
Αναφορές και άλλα παραδείγματα
- 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
- Αφού απελευθερωθούν οι δείκτες, δεν ακυρώνονται, οπότε είναι ακόμα δυνατή η πρόσβαση στα δεδομένα τους. Συνεπώς, τοποθετείται ένα κομμάτι στον ταξιναγμένο κάδο και διαρρέει τους δείκτες που περιέχει (διαρροή libc) και στη συνέχεια τοποθετείται ένα νέο κομμάτι στον ταξιναγμένο κάδο και διαρρέει μια διεύθυνση στη στοίβα από τον δείκτη που λαμβάνει.
- baby-talk. DiceCTF 2024
- Σφάλμα υπερχείλισης μηδενικού byte στο
strtok
. - Χρησιμοποιήστε το House of Einherjar για να πάρετε μια κατάσταση επικάλυψης κομματιών και να τελειώσετε με Tcache poisoning για να πάρετε ένα πρωτεύον γράψιμο.
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε 💬 στην ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.