hacktricks/binary-exploitation/heap/house-of-einherjar.md

57 lines
6.5 KiB
Markdown
Raw Permalink Normal View History

# Σπίτι των Einherjar
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
</details>
## Βασικές Πληροφορίες
### Κώδικας
* Ελέγξτε το παράδειγμα από [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](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](https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation) (μπορεί να χρειαστεί να γεμίσετε το tcache)
### Στόχος
* Ο στόχος είναι η δέσμευση μνήμης σε σχεδόν οποιαδήποτε συγκεκριμένη διεύθυνση.
### Απαιτήσεις
* Δημιουργία ενός ψεύτικου κομματιού όταν θέλουμε να δεσμεύσουμε ένα κομμάτι:
* Ορισμός δεικτών να δείχνουν στον εαυτό τους για να παρακάμψουν τους έλεγχους ακεραιότητας
* Λάθος κατά ένα από ένα κομμάτι σε άλλο για να τροποποιήσουμε το προηγούμενο σε χρήση
* Να υποδεικνύεται στο `prev_size` του κομματιού που καταχράστηκε το λάθος κατά ένα τη διαφορά μεταξύ του ίδιου και του ψεύτικου κομματιού
* Το μέγεθος του ψεύτικου κομματιού πρέπει επίσης να έχει οριστεί στο ίδιο μέγεθος για να παρακάμψει τους έλεγχους ακεραιότητας
* Για τη δημιουργία αυτών των κομματιών, θα χρειαστείτε μια διαρροή στο σωρό.
### Επίθεση
* Δημιουργείται ένα ψεύτικο κομμάτι μέσα σε ένα κομμάτι που ελέγχεται από τον επιτιθέμενο δείχνοντας με τους `fd` και `bk` στο αρχικό κομμάτι για να παρακάμψει τις προστασίες
* Δεσμεύονται 2 άλλα κομμάτια (`B` και `C`)
* Κατάχρηση του λάθους κατά ένα στο `B` όπου το bit `prev in use` καθαρίζεται και τα δεδομένα `prev_size` αντικαθίστανται με τη διαφορά μεταξύ του μέρους όπου δεσμεύεται το κομμάτι `C`, με το ψεύτικο κομμάτι `A` που δημιουργήθηκε πριν
* Αυτό το `prev_size` και το μέγεθος στο ψεύτικο κομμάτι `A` πρέπει να είναι το ίδιο για να παρακάμψουν τους ελέγχους.
* Στη συνέχεια, γεμίζεται το tcache
* Στη συνέχεια, το `C` ελευθερώνεται έτσι ώστε να συγχωνευτεί με το ψεύτικο κομμάτι `A`
* Στη συνέχεια, δημιουργείται ένα νέο κομμάτι `D` που θα ξεκινά από το ψεύτικο κομμάτι `A` και θα καλύπτει το κομμάτι `B`
* Το σπίτι των Einherjar τελειώνει εδώ
* Αυτό μπορεί να συνεχιστεί με μια επίθεση fast bin:
* Απελευθερώστε το `B` για να το προσθέσετε στο fast bin
* Το `fd` του `B` αντικαθίσταται καθιστώντας το να δείχνει στην επιθυμητή διεύθυνση καταχρώμενο το κομμάτι `D` (καθώς περιέχει το `B` μέσα)&#x20;
* Στη συνέχεια, γίνονται 2 mallocs και το δεύτερο θα **δεσμεύει την επιθυμητή διεύθυνση**
## Αναφορές και άλλα παραδείγματα
* [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c)
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad)
* Αφού απελευθερωθούν οι δείκτες, δεν ακυρώνονται, επομένως είναι ακόμα δυνατή η πρόσβαση στα δεδομένα τους. Επομένως, ένα κομμάτι τοποθετείται στον μη ταξινομημένο κάδο και διαρρέει τους δείκτες που περιέχει (διαρροή libc) και στη συνέχεια τοποθετείται ένας νέος σωρός στον μη ταξινομημένο κάδο και διαρρέει μια διεύθυνση σωρού από τον δείκτη που λαμβάνει.