# House of Orange
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)! Άλλοι τρόποι υποστήριξης του 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.
## Βασικές Πληροφορίες ### Κώδικας * Βρείτε ένα παράδειγμα στο [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c) * Η τεχνική εκμετάλλευσης διορθώθηκε σε αυτό το [patch](https://sourceware.org/git/?p=glibc.git;a=blobdiff;f=stdlib/abort.c;h=117a507ff88d862445551f2c07abb6e45a716b75;hp=19882f3e3dc1ab830431506329c94dcf1d7cc252;hb=91e7cf982d0104f0e71770f5ae8e3faf352dea9f;hpb=0c25125780083cbba22ed627756548efe282d1a0) οπότε αυτό δεν λειτουργεί πλέον (λειτουργεί σε παλαιότερες εκδόσεις από 2.26) * Ίδιο παράδειγμα **με περισσότερα σχόλια** στο [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html) ### Στόχος * Κατάχρηση της λειτουργίας `malloc_printerr` ### Απαιτήσεις * Αντικατάσταση του μεγέθους του κορυφαίου τμήματος (top chunk) * Διαρροή Libc και heap ### Υπόβαθρο Κάποιες απαραίτητες πληροφορίες από τα σχόλια από [**αυτό το παράδειγμα**](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)**:** Το θέμα είναι ότι, σε παλαιότερες εκδόσεις της libc, όταν καλούνταν η λειτουργία `malloc_printerr` θα **επαναλάμβανε μια λίστα από δομές `_IO_FILE` που αποθηκεύονταν στο `_IO_list_all`**, και πραγματικά **εκτελούσε** ένα δείκτη εντολών σε αυτή τη δομή.\ Αυτή η επίθεση θα δημιουργήσει μια **ψεύτικη δομή `_IO_FILE`** την οποία θα γράψουμε στο **`_IO_list_all`**, και θα προκαλέσει την εκτέλεση της `malloc_printerr`.\ Στη συνέχεια θα **εκτελέσει οποιαδήποτε διεύθυνση** έχουμε αποθηκευμένη στους δείκτες άλματος των δομών **`_IO_FILE`**, και θα λάβουμε εκτέλεση κώδικα ### Επίθεση Η επίθεση ξεκινά με τον χειρισμό για να πάρουμε το **top chunk** μέσα στο **unsorted bin**. Αυτό επιτυγχάνεται καλώντας την `malloc` με ένα μέγεθος μεγαλύτερο από το τρέχον μέγεθος του top chunk αλλά μικρότερο από το **`mmp_.mmap_threshold`** (προεπιλεγμένο είναι το 128ΚΒ), το οποίο αλλιώς θα ενεργοποιούσε την εκχώρηση `mmap`. Κάθε φορά που το μέγεθος του top chunk τροποποιείται, είναι σημαντικό να διασφαλιστεί ότι το **top chunk + το μέγεθός του** είναι σε σελιδοποίηση και ότι το bit **prev\_inuse** του top chunk είναι πάντα ορισμένο. Για να πάρουμε το top chunk μέσα στο unsorted bin, εκχωρήστε ένα κομμάτι για να δημιουργήσετε το top chunk, αλλάξτε το μέγεθος του top chunk (με έκρηξη στο εκχωρημένο κομμάτι) έτσι ώστε το **top chunk + μέγεθος** να είναι σε σελιδοποίηση με το bit **prev\_inuse** να είναι ορισμένο. Στη συνέχεια εκχωρήστε ένα κομμάτι μεγαλύτερο από το νέο μέγεθος του top chunk. Σημειώστε ότι το `free` δεν καλείται ποτέ για να πάρει το top chunk στο unsorted bin. Το παλιό top chunk είναι τώρα στο unsorted bin. Υποθέτοντας ότι μπορούμε να διαβάσουμε δεδομένα μέσα σε αυτό (πιθανώς λόγω μιας ευπάθειας που προκάλεσε επίσης την έκρηξη), είναι δυνατό να διαρρεύσουμε διευθύνσεις Libc από αυτό και να πάρουμε τη διεύθυνση του **\_IO\_list\_all**. Μια επίθεση στο unsorted bin πραγματοποιείται καταχρώμενη την έκρηξη για να γράψει `topChunk->bk->fwd = _IO_list_all - 0x10`. Όταν εκχωρηθεί ένα νέο κομμάτι, το παλιό top chunk θα χωριστεί, και ένας δείκτης στο unsorted bin θα γραφτεί στο **`_IO_list_all`**. Το επόμενο βήμα περιλαμβάνει τη συρρίκνωση του μεγέθους του παλιού top chunk για να χωρέσει σε ένα μικρό bin, συγκεκριμένα να ορίσει το μέγεθός του σε **0x61**. Αυτό εξυπηρετεί δύο σκοπούς: 1. **Εισαγωγή στο Small Bin 4**: Όταν η `malloc` σαρώνει το unsorted bin και βλέπει αυτό το κομμάτι, θα προσπαθήσει να το εισάγει στο small bin 4 λόγω του μικρού μεγέθους του. Αυτό κάνει το κομμάτι να καταλήξει στην κορυφή της λίστας small bin 4 που είναι η τοποθεσία του δείκτη FD του κομματιού του **`_IO_list_all`** καθώς γράψαμε μια κοντινή διεύθυνση στο **`_IO_list_all`** μέσω της επίθεσης στο unsorted bin. 2. **Ενεργοποίηση ελέγχου Malloc**: Αυτή η διαμόρφωση μεγέθους κομματιού θα προκαλέσει την `malloc` να πραγματοποιήσει εσωτερικούς ελέγχους. Όταν ελέγχει το μέγεθος του Ϩεύθος κομματιού που ακολουθεί, το οποίο θα είναι μηδέν, προκαλεί ένα σφάλμα και καλεί την `malloc_printerr`. Η διαχείριση του μικρού bin θα σας επιτρέψει να ελέγξετε τον μπροστινό δείκτη του κομματιού. Η επικάλυψη με το **\_IO\_list\_all** χρησιμοποιείται για να δημιουργήσετε μια ψεύτικη δομή **\_IO\_FILE**. Η δομή διαμορφώνεται προσεκτικά για να περιλαμβάνει βασικά πεδία όπως `_IO_write_base` και `_IO_write_ptr` που ορίζονται σε τιμές που περνούν εσωτερικούς ελέγχους στην libc. Επιπλέον, δημιουργείται ένας πίνακας άλματος μέσα στη ψεύτικη δομή, όπου ένας δείκτης εντολών ορίζεται στη διεύθυνση όπου μπορεί να εκτελεστεί αυθαίρετος κώδικας (π.χ., η λειτουργία `system`). Για να συνοψίσουμε το υπόλοιπο μέρος της τεχνικής: * **Συρρίκνωση του Παλιού Top Chunk**: Ρυθμίστε το μέγεθος του παλιού top chunk σε **0x61** για να το χωρέσετε σε ένα μικρό bin. * **Δημιουργ ## Αναφορές * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/) * [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)! Άλλοι τρόποι υποστήριξης του 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) αποθετήρια στο GitHub.