# Εκτέλεση Κώδικα με Αυθαίρετη Εγγραφή - \_\_malloc\_hook & \_\_free\_hook
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Μάθετε & εξασκηθείτε στο Hacking του GCP: [**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Υποστηρίξτε το HackTricks
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα 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.
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 ;<
0xf75deddd <free+29>: jne 0xf75dee50 <free+144>
Στην προαναφερθείσα διακοπή στον προηγούμενο κώδικα, στο `$eax` θα βρίσκεται η διεύθυνση του free hook.
Τώρα πραγματοποιείται μια **επίθεση fast bin**:
* Καταρχάς ανακαλύπτεται ότι είναι δυνατό να εργαστείτε με γρήγορα **κομμάτια μεγέθους 200** στη θέση **`__free_hook`**:
* gef➤ p &__free_hook
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook>
gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
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).