Translated ['binary-exploitation/heap/house-of-einherjar.md', 'binary-ex

This commit is contained in:
Translator 2024-06-13 15:14:34 +00:00
parent 40d9fed43a
commit c8cc9fa954
5 changed files with 130 additions and 70 deletions

View file

@ -740,7 +740,7 @@
* [Tcache Bin Attack](binary-exploitation/heap/tcache-bin-attack.md)
* [Off by one overflow](binary-exploitation/heap/off-by-one-overflow.md)
* [House of Spirit](binary-exploitation/heap/house-of-spirit.md)
* [House of Lore](binary-exploitation/heap/house-of-lore.md)
* [House of Lore | Small bin Attack](binary-exploitation/heap/house-of-lore.md)
* [House of Einherjar](binary-exploitation/heap/house-of-einherjar.md)
* [House of Force](binary-exploitation/heap/house-of-force.md)
* [House of Orange](binary-exploitation/heap/house-of-orange.md)

View file

@ -10,7 +10,7 @@
* Αποκτήστε το [**επίσημο 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).
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
</details>
@ -19,6 +19,7 @@
### Κώδικας
* Ελέγξτε το παράδειγμα από [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)
### Στόχος
@ -26,36 +27,30 @@
### Απαιτήσεις
* Off by one πάνω από την κεφαλίδα του επόμενου κομματιού για να τροποποιήσετε το προηγούμενο σε χρήση
* Να είστε σε θέση να τροποποιήσετε τα δεδομένα `prev_size`, τα οποία αποτελούν μέρος του τρέχοντος κομματιού (στο τέλος)
* Διαρροή στο σωρό
* Δημιουργία ενός ψεύτικου κομματιού όταν θέλουμε να δεσμεύσουμε ένα κομμάτι:
* Ορισμός δεικτών να δείχνουν στον εαυτό τους για να παρακάμψουν τους έλεγχους ακεραιότητας
* Λάθος κατά ένα από ένα κομμάτι σε άλλο για να τροποποιήσουμε το προηγούμενο σε χρήση
* Να υποδεικνύεται στο `prev_size` του κομματιού που καταχράστηκε το λάθος κατά ένα τη διαφορά μεταξύ του ίδιου και του ψεύτικου κομματιού
* Το μέγεθος του ψεύτικου κομματιού πρέπει επίσης να έχει οριστεί στο ίδιο μέγεθος για να παρακάμψει τους έλεγχους ακεραιότητας
* Για τη δημιουργία αυτών των κομματιών, θα χρειαστείτε μια διαρροή στο σωρό.
### Επίθεση
* Δημιουργείται ένα ψεύτικο κομμάτι μέσα σε ένα κομμάτι που ελέγχεται από τον εισβολέα, δείχνοντας με τα `fd` και `bk` στο αρχικό κομμάτι για να παρακάμψει προστασίες
* Δημιουργούνται 2 άλλα κομμάτια (`B` και `C`).
* Εκμεταλλευόμενοι το off by one στο `B`, το bit `prev in use` καθαρίζεται και τα δεδομένα `prev_size` αντικαθίστανται με τη διαφορά μεταξύ του μέρους όπου δεσμεύεται το κομμάτι `C`, με το ψεύτικο κομμάτι `A` που δημιουργήθηκε πριν.
* Αυτό το `prev_size` και το μέγεθος του ψεύτικου κομματιού `A` πρέπει να είναι τα ίδια για να παρακάμψουν τους ελέγχους.
* Στη συνέχεια, γεμίζεται το Tcache
* Δημιουργείται ένα ψεύτικο κομμάτι μέσα σε ένα κομμάτι που ελέγχεται από τον επιτιθέμενο δείχνοντας με τους `fd` και `bk` στο αρχικό κομμάτι για να παρακάμψει τις προστασίες
* Δεσμεύονται 2 άλλα κομμάτια (`B` και `C`)
* Κατάχρηση του λάθους κατά ένα στο `B` όπου το bit `prev in use` καθαρίζεται και τα δεδομένα `prev_size` αντικαθίστανται με τη διαφορά μεταξύ του μέρους όπου δεσμεύεται το κομμάτι `C`, με το ψεύτικο κομμάτι `A` που δημιουργήθηκε πριν
* Αυτό το `prev_size` και το μέγεθος στο ψεύτικο κομμάτι `A` πρέπει να είναι το ίδιο για να παρακάμψουν τους ελέγχους.
* Στη συνέχεια, γεμίζεται το tcache
* Στη συνέχεια, το `C` ελευθερώνεται έτσι ώστε να συγχωνευτεί με το ψεύτικο κομμάτι `A`
* Στη συνέχεια, δημιουργείται ένα νέο κομμάτι `D` που θα ξεκινά από το ψεύτικο κομμάτι `A` και θα καλύπτει το κομμάτι `B`
* Στη συνέχεια, το `B` ελευθερώνεται και το `fd` του αντικαθίσταται με την επιθυμητή διεύθυνση κάνοντάς το να δείχνει στην επιθυμητή διεύθυνση εκμεταλλευόμενο το κομμάτι `D` που το περιέχει.
* Στη συνέχεια, γίνονται 2 mallocs επειδή το δεύτερο θα περιέχει την επιθυμητή διεύθυνση
* Το σπίτι των 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)
<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).
</details>
* [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) και στη συνέχεια τοποθετείται ένας νέος σωρός στον μη ταξινομημένο κάδο και διαρρέει μια διεύθυνση σωρού από τον δείκτη που λαμβάνει.

View file

@ -1,16 +1,16 @@
# House of Lore
# House of Lore | Επίθεση Small bin
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<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) ή στην [**ομάδα telegram**](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).
* **Εγγραφείτε** στην 💬 [**ομάδα 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>
@ -18,44 +18,54 @@
### Κώδικας
* Αυτό δεν λειτουργεί
* Ελέγξτε αυτόν από [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/)
* Αυτό δεν λειτουργεί
* Ή: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c)
* Αυτό δεν λειτουργεί ακόμα κι αν προσπαθεί να παρακάμψει μερικούς ελέγχους παίρνοντας το σφάλμα: `malloc(): unaligned tcache chunk detected`
* Αυτό το παράδειγμα εξακολουθεί να λειτουργεί**:** [**https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html**](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html)&#x20;
### Στόχος
* Εισαγωγή ενός ψεύτικου μικρού κομματιού στο μικρό bin ώστε να είναι δυνατή η εκχώρησή του.
* Εισαγωγή ενός **ψεύτικου μικρού κομματιού στον μικρό κάδο ώστε να είναι δυνατή η εκχώρησή του**.\
Σημειώστε ότι το μικρό κομμάτι που προστέθηκε είναι το Ϩεύτικο που δημιουργεί ο επιτιθέμενος και όχι ένα πραγματικό σε μια αυθαίρετη θέση.
### Απαιτήσεις
* Δημιουργία ψεύτικων κομματιών
* Γνώση της διεύθυνσης του κομματιού θύματος και των ψεύτικων κομματιών
* Να είναι δυνατή η τροποποίηση των δεικτών `bk` και `fd`
* Δημιουργία 2 ψεύτικων κομματιών και σύνδεσή τους μεταξύ τους και με το νόμιμο κομμάτι στον μικρό κάδο:
* `fake0.bk` -> `fake1`
* `fake1.fd` -> `fake0`
* `fake0.fd` -> `legit` (χρειάζεται να τροποποιήσετε ένα δείκτη στο απελευθερωμένο μικρό κομμάτι του μικρού κάδου μέσω κάποιας άλλης ευπάθειας)
* `legit.bk` -> `fake0`
Έτσι θα μπορείτε να εκχωρήσετε το `fake0`.
### Επίθεση
* Ένα μικρό κομμάτι θύματος εκχωρείται
* Ένας επιτιθέμενος δημιουργεί μερικά ψεύτικα μικρά κομμάτια και κάνει τον πρώτο ψεύτικο δείκτη `fd` να δείχνει σε ένα πραγματικό κομμάτι και τον `bk` να δείχνει στο δεύτερο ψεύτικο κομμάτι. Επίσης, κάνει τον δεύτερο ψεύτικο δείκτη `bk` να δείχνει στον πρώτο.
* Στη συνέχεια, εκχωρείται ένα νέο μεγάλο κομμάτι για να αποτρέψει το πρώτο να συγχωνευτεί στο κορυφαίο κομμάτι όταν απελευθερωθεί
* Στη συνέχεια, απελευθερώνεται ο αρχικός δείκτης και εκχωρείται ένας δεύτερος δείκτης μεγαλύτερου μεγέθους ώστε το απελευθερωμένο αρχικό μικρό κομμάτι να τοποθετηθεί στο μικρό bin.
* Το πραγματικό μικρό κομμάτι τροποποιείται ϭστε ο δείκτης `bk` να δείχνει στο ψεύτικο κομμάτι.
* Στη συνέχεια, όταν εκχωρούνται 2 κομμάτια αυτού του μεγέθους, λαμβάνουν πρώτα το έγκυρο κομμάτι και στη συνέχεια το μη έγκυρο κομμάτι που ελέγχεται κάπως από τον επιτιθέμενο.
* Ένα μικρό κομμάτι (`legit`) εκχωρείται, στη συνέχεια εκχωρείται ένα άλλο για να αποτρέψει τη συγχώνευση με το κομμάτι κορυφής. Στη συνέχεια, το `legit` απελευθερώνεται (μετακίνηση στη λίστα αταξινόμητων) και εκχωρείται ένα μεγαλύτερο κομμάτι, **μετακινώντας το `legit` στον μικρό κάδο.**
* Ένας επιτιθέμενος δημιουργεί μερικά ψεύτικα μικρά κομμάτια και κάνει την απαραίτητη σύνδεση για να παρακάμψει τους έλεγχους ακεραιότητας:
* `fake0.bk` -> `fake1`
* `fake1.fd` -> `fake0`
* `fake0.fd` -> `legit` (χρειάζεται να τροποποιήσετε ένα δείκτη στο απελευθερωμένο μικρό κομμάτι του μικρού κάδου μέσω κάποιας άλλης ευπάθειας)
* `legit.bk` -> `fake0`
* Εκχωρείται ένα μικρό κομμάτι για να πάρει το `legit`, κάνοντας το **`fake0`** στην κορυφαία λίστα των μικρών κάδων
* Εκχωρείται άλλο ένα μικρό κομμάτι, παίρνοντας το `fake0` ως ένα κομμάτι, επιτρέποντας ενδεχομένως την ανάγνωση/εγγραφή δεικτών μέσα σε αυτό.
## Αναφορές
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/)
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore)
* [https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<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) ή στην [**ομάδα telegram**](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).
* **Εγγραφείτε** στην 💬 [**ομάδα 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>

View file

@ -2,15 +2,15 @@
<details>
<summary><strong>Μάθετε χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο 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) ή στην [**ομάδα telegram**](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.
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](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>
@ -69,16 +69,51 @@ return 0;
### Στόχος
* Να είναι δυνατή η προσθήκη ενός αυθαίρετου διευθύνσεως στο tcache / fast bin ώστε όταν καλείται η malloc να χρησιμοποιείται σε ένα κομμάτι
* Να είναι δυνατή η προσθήκη ενός διευθύνσεως στο tcache / fast bin ώστε αργότερα να είναι δυνατή η εκχώρησή του
### Απαιτήσεις
* Αυτή η επίθεση απαιτεί από τον εισβολέα να μπορεί να δημιουργήσει μερικά ψεύτικα γρήγορα κομμάτια δεδομένων που υποδεικνύουν σωστά την τιμή μεγέθους τους και να αντικαταστήσει ένα γρήγορο κομμάτι μεγέθους που θα ελευθερωθεί, έτσι ώστε το κομμάτι του εισβολέα είναι πραγματικά αυτό που μπαίνει στο fast bin.
* Αυτή η επίθεση απαιτεί από τον εισβολέα να μπορεί να δημιουργήσει μερικά ψεύτικα fast chunks που υποδεικνύουν σωστά την τιμή του μεγέθους τους και στη συνέχεια να μπορεί να ελευθερώσει το πρώτο ψεύτικο chunk ώστε να μπει στο bin.
### Επίθεση
* Δημιουργήστε ένα ψεύτικο κομμάτι που παρακάμπτει τους ελέγχους ασφαλείας (θα χρειαστείτε 2 ψεύτικα κομμάτια)
* Πριν από τον απελευθερωθεί ένας δείκτης, αντικαταστήστε τον με το ψεύτικο κομμάτι ώστε αυτός να μπει στο bin
* Δημιουργήστε ψεύτικα chunks που παρακάμπτουν τους ελέγχους ασφαλείας: θα χρειαστείτε 2 ψεύτικα chunks που υποδεικνύουν στις σωστές θέσεις τις σωστές τιμές μεγέθους
* Κάπως διαχειριστείτε να ελευθερώσετε το πρώτο ψεύτικο chunk ώστε να μπει στο γρήγορο ή tcache bin και στη συνέχεια να το εκχωρήσετε για να αντικαταστήσετε αυτή τη διεύθυνση
**Ο κώδικας από τον** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **είναι εξαιρετικός για να κατανοήσετε την επίθεση.** Παρόλο που αυτό το σχήμα από τον κώδικα το περιλαμβάνει αρκετά καλά:
```c
/*
this will be the structure of our two fake chunks:
assuming that you compiled it for x64
+-------+---------------------+------+
| 0x00: | Chunk # 0 prev size | 0x00 |
+-------+---------------------+------+
| 0x08: | Chunk # 0 size | 0x60 |
+-------+---------------------+------+
| 0x10: | Chunk # 0 content | 0x00 |
+-------+---------------------+------+
| 0x60: | Chunk # 1 prev size | 0x00 |
+-------+---------------------+------+
| 0x68: | Chunk # 1 size | 0x40 |
+-------+---------------------+------+
| 0x70: | Chunk # 1 content | 0x00 |
+-------+---------------------+------+
for what we are doing the prev size values don't matter too much
the important thing is the size values of the heap headers for our fake chunks
*/
```
{% hint style="info" %}
Σημειώστε ότι είναι απαραίτητο να δημιουργήσετε το δεύτερο κομμάτι προκειμένου να παρακάμψετε μερικούς ελέγχους σωστής λειτουργίας.
{% endhint %}
## Παραδείγματα
* CTF [https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html](https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html)
* **Διαρροή πληροφοριών Libc**: Μέσω ενός υπερχείλισης είναι δυνατό να αλλάξετε ένα δείκτη ώστε να δείχνει σε μια διεύθυνση GOT προκειμένου να διαρρεύσει μια διεύθυνση Libc μέσω της ενέργειας ανάγνωσης του CTF
* **House of Spirit**: Εκμεταλλευόμενοι ένα μετρητή που μετρά τον αριθμό των "ριφλών" είναι δυνατό να δημιουργήσετε μια ψεύτικη μέγεθος του πρώτου ψεύτικου κομματιού, στη συνέχεια εκμεταλλευόμενοι ένα "μήνυμα" είναι δυνατό να δημιουργήσετε το δεύτερο μέγεθος ενός κομματιού και τελικά εκμεταλλευόμενοι μια υπερχείλιση είναι δυνατό να αλλάξετε ένα δείκτη που θα απελευθερωθεί έτσι ώστε το πρώτο ψεύτικο κομμάτι μας να απελευθερωθεί. Στη συνέχεια, μπορούμε να το εκχωρήσουμε και μέσα σε αυτό θα υπάρχει η διεύθυνση όπου αποθηκεύεται το "μήνυμα". Στη συνέχεια, είναι δυνατό να κατευθύνουμε αυτό προς την είσοδο `scanf` μέσα στον πίνακα GOT, έτσι ώστε να το αντικαταστήσουμε με τη διεύθυνση προς το σύστημα.\
Την επόμενη φορά που καλείται το `scanf`, μπορούμε να στείλουμε την είσοδο `"/bin/sh"` και να λάβουμε ένα κέλυφος.
## Αναφορές
@ -86,14 +121,14 @@ return 0;
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</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.
* **Εγγραφείτε στη** 💬 [**ομάδα 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>

View file

@ -6,11 +6,11 @@
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο 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.
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
@ -24,23 +24,43 @@
Καταρχάς, σημειώστε ότι το Tcache εισήχθη στην έκδοση glibc 2.26.
Η επίθεση **Tcache** που προτάθηκε στη σελίδα [**guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) είναι πολύ παρόμοια με την επίθεση fast bin όπου ο στόχος είναι να αντικατασταθεί ο δείκτης προς το επόμενο τμήμα στο bin μέσα σε ένα ελεύθερο τμήμα με μια τυχαία διεύθυνση, ώστε αργότερα να είναι δυνατή η **εκχώρηση αυτής της συγκεκριμένης διεύθυνσης και ενδεχομένως η αντικατάσταση δεικτών**.
Η επίθεση **Tcache** που προτάθηκε στη [**σελίδα guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) είναι πολύ παρόμοια με την επίθεση fast bin όπου ο στόχος είναι να αντικατασταθεί ο δείκτης προς το επόμενο τμήμα στο bin μέσα σε ένα ελεύθερο τμήμα με μια τυχαία διεύθυνση, έτσι ώστε αργότερα να είναι δυνατή η **εκχώρηση αυτής της συγκεκριμένης διεύθυνσης και ενδεχομένως η αντικατάσταση δεικτών**.
Ωστόσο, σήμερα, αν εκτελέσετε το αναφερόμενο κώδικα, θα λάβετε το σφάλμα: **`malloc(): unaligned tcache chunk detected`**. Έτσι, είναι απαραίτητο να γράψετε ως διεύθυνση στον νέο δείκτη μια ευθυγραμμισμένη διεύθυνση (ή να εκτελέσετε αρκετές φορές το δυαδικό αρχείο ώστε η γραμμένη διεύθυνση να είναι πραγματικά ευθυγραμμισμένη).
Ωστόσο, σήμερα, αν εκτελέσετε τον αναφερόμενο κώδικα, θα λάβετε το σφάλμα: **`malloc(): unaligned tcache chunk detected`**. Έτσι, είναι απαραίτητο να γράψετε ως διεύθυνση στον νέο δείκτη μια ευθυγραμμισμένη διεύθυνση (ή να εκτελέσετε αρκετές φορές το δυαδικό αρχείο ώστε η γραμμένη διεύθυνση να είναι πράγματι ευθυγραμμισμένη).
### Επιθέσεις δεικτών Tcache
### Επίθεση δεικτών tcache indexes
Συνήθως είναι δυνατό να βρείτε στην αρχή της στοίβας ένα τμήμα που περιέχει τον **αριθμό των τμημάτων ανά δείκτη** μέσα στο tcache και τη διεύθυνση του **κεφαλαίου τμήματος κάθε δείκτη tcache**. Αν για κάποιο λόγο είναι δυνατό να τροποποιηθούν αυτές οι πληροφορίες, θα ήταν δυνατό να **κάνετε το κεφάλαιο τμήμα κάποιου δείκτη να δείχνει σε μια επιθυμητή διεύθυνση** (όπως το malloc hook) για να εκχωρηθεί αργότερα ένα τμήμα με το μέγεθος του δείκτη και να αντικατασταθούν τα περιεχόμενα του malloc hook σε αυτήν την περίπτωση.
Συνήθως είναι δυνατόν να βρεθεί στην αρχή της στοίβας ένα τμήμα που περιέχει τον **αριθμό των τμημάτων ανά δείκτη** μέσα στο tcache και τη διεύθυνση του **κεφαλαίου τμήματος κάθε δείκτη tcache**. Αν για κάποιο λόγο είναι δυνατόν να τροποποιηθούν αυτές οι πληροφορίες, θα ήταν δυνατό να **κάνετε το κεφάλαιο τμήμα κάποιου δείκτη να δείχνει σε μια επιθυμητή διεύθυνση** (όπως το malloc hook) για να εκχωρηθεί στη συνέχεια ένα τμήμα μεγέθους του δείκτη και να αντικατασταθούν τα περιεχόμενα του malloc hook σε αυτήν την περίπτωση.
## Παραδείγματα
## Examples
* CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html](https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html)
* **Διαρροή πληροφοριών Libc**: Είναι δυνατό να γεμίσετε τα tcaches, να προσθέσετε ένα τμήμα στη λίστα unsorted, να αδειάσετε το tcache και να **επανα-εκχωρήσετε το τμήμα από τη λίστα unsorted** αλλάζοντας μόνο τα πρώτα 8B, αφήνοντας τη **δεύτερη διεύθυνση προς το libc από το τμήμα ακέραια ώστε να μπορούμε να τη διαβάσουμε**.
* **Επίθεση Tcache**: Το δυαδικό είναι ευάλωτο σε ένα 1B υπερχείλιση στη στοίβα. Αυτό θα εκμεταλλευτείται για να αλλάξει το **κεφαλίδα μεγέθους** ενός εκχωρημένου τμήματος κάνοντάς το μεγαλύτερο. Στη συνέχεια, αυτό το τμήμα θα **ελευθερωθεί**, προσθέτοντάς το στο tcache τμημάτων με το ψευδές μέγεθος. Στη συνέχεια, θα εκχωρηθεί ένα τμήμα με το πλαστό μέγεθος, και το προηγούμενο τμήμα θα **επιστραφεί γνωρίζοντας ότι αυτό το τμήμα ήταν πραγματικά μικρότερο** και αυτό προσφέρει τη δυνατότητα να **αντικατασταθεί ο επόμενος δείκτης στη μνήμη**.\
Αυτό θα εκμεταλλευτείται για να **αντικαταστήσει τον δείκτη FD του επόμενου τμήματος** ώστε να δείχνει στο **`malloc_hook`**, έτσι είναι δυνατό να εκχωρηθούν 2 δείκτες: πρώτα ο νόμιμος δείκτης που μόλις τροποποιήσαμε, και στη συνέχεια η δεύτερη εκχώρηση θα επιστρέψει ένα τμήμα στο **`malloc_hook`** που είναι δυνατό να εκμεταλλευτείται για να γράψει ένα **one gadget**.
* **Libc info leak**: It's possible to fill the tcaches, add a chunk into the unsorted list, empty the tcache and **re-allocate the chunk from the unsorted bin** only overwriting the first 8B, leaving the **second address to libc from the chunk intact so we can read it**.
* **Tcache attack**: The binary is vulnerable a 1B heap overflow. This will be abuse to change the **size header** of an allocated chunk making it bigger. Then, this chunk will be **freed**, adding it to the tcache of chunks of the fake size. Then, we will allocate a chunk with the faked size, and the previous chunk will be **returned knowing that this chunk was actually smaller** and this grants up the opportunity to **overwrite the next chunk in memory**.\
We will abuse this to **overwrite the next chunk's FD pointer** to point to **`malloc_hook`**, so then its possible to alloc 2 pointers: first the legit pointer we just modified, and then the second allocation will return a chunk in **`malloc_hook`** that it's possible to abuse to write a **one gadget**.
* CTF [https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html)
* **Διαρροή πληροφοριών Libc**: Υπάρχει ένα use after free και ένα double free. Σε αυτήν την ανάλυση, ο συγγραφέας διέρρευσε μια διεύθυνση του libc διαβάζοντας τη διεύθυνση ενός τμήματος που τοποθετήθηκε σε ένα μικρό bin (όπως διαρροή από το unsorted bin αλλά από το μικρό).
* **Επίθεση Tcache**: Μια Tcache πραγματοποιείται μέσω ενός **double free**. Το ίδιο τμήμα ελευθερώνεται δύο φορές, έτσι μέσα στο Tcache το τμήμα θα δείχνει στον εαυτό του. Στη συνέχεια, εκχωρείται, ο δείκτης FD του τροποποιείται ώστε να δείχνει στο **free hook** και στη συνέχεια εκχωρείται ξανά, έτσι το επόμενο τμήμα στη λίστα θα βρίσκεται στο free hook. Στη συνέχεια, αυτό επίσης εκχωρείται και είναι δυνατό να γραφτεί η διεύθυνση του `system` εδώ, έτσι όταν ένα malloc που περιέχει `"/bin/sh"` ελευθερωθεί, λαμβάνουμε ένα κέλυφος.
* **Libc info leak**: There is a use after free and a double free. In this writeup the author leaked an address of libc by readnig the address of a chunk placed in a small bin (like leaking it from the unsorted bin but from the small one)
* **Tcache attack**: A Tcache is performed via a **double free**. The same chunk is freed twice, so inside the Tcache the chunk will point to itself. Then, it's allocated, its FD pointer is modified to point to the **free hook** and then it's allocated again so the next chunk in the list is going to be in the free hook. Then, this is also allocated and it's possible to write a the address of `system` here so when a malloc containing `"/bin/sh"` is freed we get a shell.
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html)
* **Επίθεση δεικτών Tcache**: Είναι δυνατό να εκχωρηθεί και να ελευθερωθεί ένα τμήμα με μέγεθος που όταν αποθηκευτεί μέσα στις πληροφορίες tcache θα δημιουργήσει μια **θέση με τιμή 0x100** (επειδή το byte που υποδηλώνει πόσα τμήματα σε αυτόν τον δείκτη αποθηκεύονται). Στη συνέχεια, εκμεταλλευόμενοι αυτήν την τιμή είναι δυνατό να `ελευθερώσετε` αυτήν τη διεύθυνση καθώς φαίνεται ότι είναι ένα τμήμα μεγέθους 0x100. Αυτό θα προσθέσει αυτήν τη διεύθυνση στον δείκτη τμημάτων μεγέθους 0x100 στο tcache.\
Στη συνέχεια, εκχωρώντας ένα τμήμα μεγέθους 0x100, είναι δυνατό
* The main vuln here is the capacity to `free` any address in the heap by indicating its offset
* **Tcache indexes attack**: It's possible to allocate and free a chunk of a size that when stored inside the tcache chunk (the chunk with the info of the tcache bins) will generate an **address with the value 0x100**. This is because the tcache stores the amount of chunks on each bin in different bytes, therefore one chunk in one specific index generates the value 0x100.
* Then, this value looks like there is a chunk of size 0x100. Allowing to abuse it by `free` this address. This will **add that address to the index of chunks of size 0x100 in the tcache**.
* Then, **allocating** a chunk of size **0x100**, the previous address will be returned as a chunk, allowing to overwrite other tcache indexes.\
For example putting the address of malloc hook in one of them and allocating a chunk of the size of that index will grant a chunk in calloc hook, which allows for writing a one gadget to get a s shell.
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html)
* Same vulnerability as before with one extra restriction
* **Tcache indexes attack**: Similar attack to the previous one but using less steps by **freeing the chunk that contains the tcache info** so it's address is added to the tcache index of its size so it's possible to allocate that size and get the tcache chunk info as a chunk, which allows to add free hook as the address of one index, alloc it, and write a one gadget on it.
<details>
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Other ways to support HackTricks:
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>