mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
Translated ['binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc
This commit is contained in:
parent
c8cc9fa954
commit
e22acd5727
2 changed files with 83 additions and 55 deletions
|
@ -9,18 +9,18 @@
|
|||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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).
|
||||
* **Εγγραφείτε στη** 💬 [**ομάδα 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>
|
||||
|
||||
## **Malloc Hook**
|
||||
|
||||
Όπως μπορείτε να δείτε στην [επίσημη ιστοσελίδα του GNU](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html), η μεταβλητή **`__malloc_hook`** είναι ένας δείκτης που δείχνει στη **διεύθυνση μιας συνάρτησης που θα κληθεί** κάθε φορά που καλείται η `malloc()` **αποθηκευμένη στην ενότητα δεδομένων της βιβλιοθήκης libc**. Επομένως, αν αυτή η διεύθυνση αντικατασταθεί με ένα **One Gadget** για παράδειγμα και κληθεί η `malloc`, το **One Gadget θα κληθεί**.
|
||||
Όπως μπορείτε να δείτε στην [επίσημη σελίδα του GNU](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html), η μεταβλητή **`__malloc_hook`** είναι ένας δείκτης που δείχνει στη **διεύθυνση μιας συνάρτησης που θα κληθεί** κάθε φορά που καλείται η `malloc()` **αποθηκευμένη στην ενότητα δεδομένων της βιβλιοθήκης libc**. Επομένως, αν αυτή η διεύθυνση αντικατασταθεί με ένα **One Gadget** για παράδειγμα και κληθεί η `malloc`, το **One Gadget θα κληθεί**.
|
||||
|
||||
Για να κληθεί η malloc είναι δυνατόν να περιμένουμε το πρόγραμμα να την καλέσει ή με το **να καλέσουμε `printf("%10000$c")`** το οποίο δεσμεύει πολλά bytes και καλεί την `malloc` να τα δεσμεύσει στη στοίβα.
|
||||
Για να κληθεί η malloc είναι δυνατόν να περιμένετε το πρόγραμμα να την καλέσει ή με το **να καλέσετε `printf("%10000$c")`** το οποίο δεσμεύει πολλά bytes κάνοντας την `libc` να καλέσει την malloc για να τα δεσμεύσει στη στοίβα.
|
||||
|
||||
Περισσότερες πληροφορίες για το One Gadget στο:
|
||||
Περισσότερες πληροφορίες σχετικά με το One Gadget:
|
||||
|
||||
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %}
|
||||
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
|
||||
|
@ -38,38 +38,50 @@
|
|||
[unsorted-bin-attack.md](../heap/unsorted-bin-attack.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Τώρα πραγματοποιείται μια **επίθεση γρήγορου bin**:
|
||||
Ένα ωραίο κόλπο (από [**εδώ**](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html)) για να βρείτε τη θέση του free hook αν το δυαδικό έχει σύμβολα είναι να **κάνετε κάτι σαν**:
|
||||
```
|
||||
gef➤ set __free_hook = 0xfacade
|
||||
gef➤ search-pattern 0xfacade
|
||||
```
|
||||
Στην ίδια ανάρτηση μπορείτε να βρείτε έναν οδηγό βήμα προς βήμα για τον εντοπισμό της διεύθυνσης του free hook χωρίς σύμβολα. Ως περίληψη, στη συνάρτηση free:
|
||||
|
||||
* Καταρχάς ανακαλύπτεται ότι είναι δυνατόν να δουλέψουμε με γρήγορα **κομμάτια μεγέθους 200** στη θέση του **`__free_hook`**:
|
||||
* <pre class="language-c"><code class="lang-c">gef➤ p &__free_hook
|
||||
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook>
|
||||
```armasm
|
||||
gef➤ x/20i free
|
||||
0xf75dedc0 <free>: push ebx
|
||||
0xf75dedc1 <free+1>: call 0xf768f625
|
||||
0xf75dedc6 <free+6>: add ebx,0x14323a
|
||||
0xf75dedcc <free+12>: sub esp,0x8
|
||||
0xf75dedcf <free+15>: mov eax,DWORD PTR [ebx-0x98]
|
||||
0xf75dedd5 <free+21>: mov ecx,DWORD PTR [esp+0x10]
|
||||
0xf75dedd9 <free+25>: mov eax,DWORD PTR [eax]
|
||||
0xf75deddb <free+27>: test eax,eax ;<--- BREAK HERE
|
||||
0xf75deddd <free+29>: jne 0xf75dee50 <free+144>
|
||||
```
|
||||
|
||||
Στο σημείο διακοπής που αναφέρθηκε στον προηγούμενο κώδικα, στο `$eax` θα βρίσκεται η διεύθυνση του free hook.
|
||||
|
||||
Τώρα πραγματοποιείται μια **επίθεση fast bin**:
|
||||
|
||||
- Καταρχάς ανακαλύπτεται ότι είναι δυνατό να εργαστείτε με γρήγορα **κομμάτια μεγέθους 200** στη θέση **`__free_hook`**:
|
||||
-
|
||||
|
||||
```c
|
||||
gef➤ p &__free_hook
|
||||
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook>
|
||||
gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
|
||||
<strong>0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200
|
||||
</strong>0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000
|
||||
0x7ff1e9e6076f <list_all_lock+15>: 0x0000000000000000 0x0000000000000000
|
||||
0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
|
||||
</code></pre>
|
||||
* Αν καταφέρουμε να αποκτήσουμε ένα γρήγορο κομμάτι μεγέθους 0x200 σε αυτή τη θέση, θα είναι δυνατό να αντικατασταθεί ένας δείκτης συνάρτησης που θα εκτελεστεί
|
||||
* Γι' αυτό, δημιουργείται ένα νέο κομμάτι μεγέθους `0xfc` και καλείται η συνάρτηση συγχώνευσης με αυτόν τον δείκτη δύο φορές, με αυτόν τον τρόπο αποκτούμε ένα δείκτη σε ένα ελεύθερο κομμάτι μεγέθους `0xfc*2 = 0x1f8` στον γρήγορο bin.
|
||||
* Στη συνέχεια, καλείται η συνάρτηση επεξεργασίας σε αυτό το κομμάτι για να τροποποιήσει τη διεύθυνση **`fd`** αυτού του γρήγορου bin ώστε να δείχνει στην προηγούμενη συνάρτηση **`__free_hook`**.
|
||||
* Στη συνέχεια, δημιουργείται ένα κομμάτι μεγέθους `0x1f8` για να ανακτήσει από τον γρήγορο bin το προηγούμενο άχρηστο κομμάτι, έτσι δημιουργείται ένα άλλο κομμάτι μεγέθους `0x1f8` για να αποκτήσει ένα κομμάτι γρήγορου bin στο **`__free_hook`** το οποίο αντικαθίσταται με τη διεύθυνση της συνάρτησης **`system`**.
|
||||
* Και τέλος ένα κομμάτι που περιέχει τη συμβολοσειρά `/bin/sh\x00` απελευθερώνεται καλώντας τη συνάρτηση διαγραφής, ενεργοποιώντας τη συνάρτηση **`__free_hook`** που δείχνει στη συνάρτηση system με το `/bin/sh\x00` ως παράμετρο.
|
||||
0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200
|
||||
0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000
|
||||
0x7ff1e9e6076f <list_all_lock+15>: 0x0000000000000000 0x0000000000000000
|
||||
0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
|
||||
```
|
||||
|
||||
- Αν καταφέρουμε να αποκτήσουμε ένα γρήγορο κομμάτι μεγέθους 0x200 σε αυτή τη θέση, θα είναι δυνατό να αντικαταστήσουμε ένα δείκτη συνάρτησης που θα εκτελεστεί.
|
||||
- Για αυτό, δημιουργείται ένα νέο κομμάτι μεγέθους `0xfc` και καλείται η συνάρτηση συγχώνευσης με αυτόν τον δείκτη δύο φορές, με αυτόν τον τρόπο αποκτούμε ένα δείκτη σε ένα ελεύθερο κομμάτι μεγέθους `0xfc*2 = 0x1f8` στο fast bin.
|
||||
- Στη συνέχεια, καλείται η συνάρτηση επεξεργασίας σε αυτό το κομμάτι για να τροποποιήσει τη διεύθυνση **`fd`** αυτού του fast bin ώστε να δείχνει στην προηγούμενη συνάρτηση **`__free_hook`**.
|
||||
- Στη συνέχεια, δημιουργείται ένα κομμάτι μεγέθους `0x1f8` για να ανακτήσει από το fast bin το προηγούμενο άχρηστο κομμάτι, έτσι δημιουργείται ένα άλλο κομμάτι μεγέθους `0x1f8` για να αποκτήσει ένα κομμάτι fast bin στο **`__free_hook`** το οποίο αντικαθίσταται με τη διεύθυνση της συνάρτησης **`system`**.
|
||||
- Και τέλος, ένα κομμάτι που περιέχει τη συμβολοσειρά `/bin/sh\x00` απελευθερώνεται καλώντας τη συνάρτηση διαγραφής, ενεργοποιώντας τη συνάρτηση **`__free_hook`** που δείχνει στο σύστημα με το `/bin/sh\x00` ως παράμετρο.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
|
||||
* [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md).
|
||||
|
||||
<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).
|
||||
|
||||
</details>
|
||||
- [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
|
||||
- [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md).
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
# House of Force
|
||||
|
||||
|
||||
|
||||
<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)!
|
||||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο 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)**.**
|
||||
|
@ -21,6 +19,7 @@
|
|||
### Κώδικας
|
||||
|
||||
* Αυτή η τεχνική επιδιορθώθηκε ([**εδώ**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=30a17d8c95fbfb15c52d1115803b63aaa73a285c)) και παράγει αυτό το σφάλμα: `malloc(): corrupted top size`
|
||||
* Μπορείτε να δοκιμάσετε τον [**κώδικα από εδώ**](https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html) για να τον δοκιμάσετε αν θέλετε.
|
||||
|
||||
### Στόχος
|
||||
|
||||
|
@ -28,29 +27,46 @@
|
|||
|
||||
### Απαιτήσεις
|
||||
|
||||
* Ένας υπερχείλισης που επιτρέπει την αντικατάσταση του μεγέθους του κεφαλαίου του κορυφαίου κομματιού (π.χ. -1).
|
||||
* Ένας υπερχείλιση που επιτρέπει την αντικατάσταση του μεγέθους του κεφαλαίου του κορυφαίου κομματιοϋ (π.χ. -1).
|
||||
* Να είναι δυνατόν να ελέγχεται το μέγεθος της δέσμευσης της στοίβας
|
||||
|
||||
### Επίθεση
|
||||
|
||||
Αν ένας εισβολέας θέλει να έχει ένα κομμάτι στη διεύθυνση P, έχοντας αντικαταστήσει το μέγεθος του κορυφαίου κομματιού με -1, πρώτα απ' όλα χρειάζεται ένα malloc του (\&top\_chunk - P). Σημειώστε ότι αυτό το δείκτης μπορεί να είναι πριν ή μετά το top\_chunk καθώς οποιοδήποτε μέγεθος θα είναι μικρότερο από -1 (0xFFFFFFFFFFFFFFFF). Στη συνέχεια, μετά τη δέσμευση αυτού του αρχικού κομματιού, το κορυφαίο κομμάτι θα μετακινηθεί στην επιθυμητή διεύθυνση P και το επόμενο κομμάτι θα είναι από αυτή τη διεύθυνση.
|
||||
Αν ένας εισβολέας θέλει να δεσμεύσει ένα κομμάτι στη διεύθυνση P για να αντικαταστήσει μια τιμή εδώ. Ξεκινάει αντικαθιστώντας το μέγεθος του κορυφαίου κομματιού με `-1` (ίσως με ένα υπερχείλιση). Αυτό εξασφαλίζει ότι το malloc δεν θα χρησιμοποιεί το mmap για κάθε δέσμευση καθώς το Top chunk θα έχει πάντα αρκετό χώρο.
|
||||
|
||||
### Αναφορές
|
||||
Στη συνέχεια, υπολογίζει την απόσταση μεταξύ της διεύθυνσης του κορυφαίου κομματιού και του χώρου στόχου για να δεσμεύσει. Αυτό γίνεται επειδή μια δέσμευση με αυτό το μέγεθος θα πραγματοποιηθεί για να μετακινηθεί το κορυφαίο κομμάτι σε αυτή τη θέση. Έτσι η διαφορά/μέγεθος μπορεί να υπολογιστεί εύκολα:
|
||||
```c
|
||||
// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
|
||||
/*
|
||||
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
|
||||
* new_top = old_top + nb
|
||||
* nb = new_top - old_top
|
||||
* req + 2sizeof(long) = new_top - old_top
|
||||
* req = new_top - old_top - 2sizeof(long)
|
||||
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
|
||||
* req = target - old_top - 4*sizeof(long)
|
||||
*/
|
||||
```
|
||||
Συνεπώς, η δέσμευση μεγέθους `target - old_top - 4*sizeof(long)` (τα 4 longs είναι λόγω των μεταδεδομένων του κορυφαίου κομματιού και του νέου κομματιού όταν γίνεται δέσμευση) θα μετακινήσει το κορυφαίο κομμάτι στη διεύθυνση που θέλουμε να αντικαταστήσουμε.\
|
||||
Στη συνέχεια, κάντε ένα ακόμα malloc για να λάβετε ένα κομμάτι που περιέχει την αρχή των δεδομένων για να γράψετε τη διεύθυνση στόχο.
|
||||
|
||||
### Αναφορές & Άλλα Παραδείγματα
|
||||
|
||||
* [https://github.com/shellphish/how2heap/tree/master](https://github.com/shellphish/how2heap/tree/master?tab=readme-ov-file)
|
||||
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/)
|
||||
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_force](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_force)
|
||||
|
||||
<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.27/house\_of\_force.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.27/house\_of\_force.c)
|
||||
* [https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html)
|
||||
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11)
|
||||
* Ο στόχος αυτού του σεναρίου είναι ένα ret2win όπου πρέπει να τροποποιήσουμε τη διεύθυνση μιας συνάρτησης που θα κληθεί από τη διεύθυνση της συνάρτησης ret2win
|
||||
* Το δυαδικό έχει ένα υπερχείλιση που μπορεί να εκμεταλλευτεί για να τροποποιήσει το μέγεθος του κορυφαίου κομματιού, το οποίο τροποποιείται σε -1 ή p64(0xffffffffffffffff)
|
||||
* Στη συνέχεια, υπολογίζεται η διεύθυνση του μέρους όπου υπάρχει ο δείκτης που θα αντικατασταθεί, και η διαφορά από την τρέχουσα θέση του κορυφαίου κομματιού εκεί δεσμεύεται με `malloc`
|
||||
* Τέλος, δεσμεύεται ένα νέο κομμάτι που θα περιέχει αυτόν τον επιθυμητό στόχο μέσα στον οποίο θα αντικατασταθεί από τη συνάρτηση ret2win
|
||||
* [https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp](https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp)
|
||||
* Στο `Input your name:` υπάρχει μια αρχική ευπάθεια που επιτρέπει τη διαρροή μιας διεύθυνσης από τη στοίβα
|
||||
* Στη συνέχεια, στις λειτουργίες `Org:` και `Host:`, είναι δυνατό να γεμίσετε τα 64B του δείκτη `s` όταν ζητείται το **όνομα org**, το οποίο στη στοίβα ακολουθείται από τη διεύθυνση του v2, η οποία στη συνέχεια ακολουθείται από το **όνομα host** που υποδεικνύεται. Καθώς στη συνέχεια το strcpy θα αντιγράφει τα περιεχόμενα του s σε ένα κομμάτι μεγέθους 64B, είναι δυνατό να **αντικατασταθεί το μέγεθος του κορυφαίου κομματιού** με τα δεδομένα που τοποθετούνται μέσα στο **όνομα host**.
|
||||
* Τώρα που είναι δυνατή η αυθαίρετη εγγραφή, το GOT του `atoi` αντικαταστάθηκε με τη διεύθυνση του printf. Στη συνέχεια, ήταν δυνατό να διαρρεύσει η διεύθυνση του `IO_2_1_stderr` _με_ `%24$p`. Και με αυτή τη διαρροή της libc ήταν δυνατό να αντικατασταθεί ξανά το GOT του `atoi` με τη διεύθυνση του `system` και να κληθεί με παράμετρο `/bin/sh`
|
||||
* Μια εναλλακτική μέθοδος [που προτάθηκε σε αυτήν την άλλη ανάλυση](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#2016-bctf-bcloud), είναι να αντικατασταθεί το `free` με `puts`, και στη συνέχεια να προστεθεί η διεύθυνση του `atoi@got`, στον δείκτη που αργότερα θα ελευθερωθεί ώστε να διαρρεύσει και με αυτή τη διαρροή να αντικατασταθεί ξανά το `atoi@got` με το `system` και να κληθεί με `/bin/sh`.
|
||||
* [https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html)
|
||||
* Υπάρχει ένα UAF που επιτρέπει την επαναχρησιμοποίηση ενός κομματιού που απελευθερώθηκε χωρίς να καθαριστεί ο δείκτης. Επειδή υπάρχουν μερικές μέθοδοι ανάγνωσης, είναι δυνατό να διαρρεύσει μια διεύθυνση libc γράφοντας ένα δείκτη στη συνάρτηση free στο GOT εδώ και στη συνέχεια καλώντας τη συνάρτηση read.
|
||||
* Στη συνέχεια, χρησιμοποιήθηκε το House of force (καταχρηστεύοντας το UAF) για να αντικατασταθεί το μέγεθος του αριστερού χώρου με -1, να δεσμευτεί ένα κομμάτι αρκετά μεγάλο για να φτάσει στο free hook, και στη συνέχεια να δεσμευτεί ένα άλλο κομμάτι που θα περιέχει το free hook. Στη συνέχεια, γράψτε στο hook τη διεύθυνση του `system`, γράψτε σε ένα κομμάτι `"/bin/sh"` και τέλος ελευθερώστε το κομμάτι με αυτό το περιεχόμενο συμβολοσειράς.
|
||||
|
|
Loading…
Reference in a new issue