mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
61 lines
5.7 KiB
Markdown
61 lines
5.7 KiB
Markdown
|
# WWW2Exec - .dtors & .fini\_array
|
|||
|
|
|||
|
<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) ή στη [**ομάδα 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>
|
|||
|
|
|||
|
## .dtors
|
|||
|
|
|||
|
{% hint style="danger" %}
|
|||
|
Σήμερα είναι πολύ **παράξενο να βρείτε ένα δυαδικό με τμήμα .dtors!**
|
|||
|
{% endhint %}
|
|||
|
|
|||
|
Οι καταστροφείς είναι συναρτήσεις που **εκτελούνται πριν το πρόγραμμα τελειώσει** (μετά την επιστροφή της συνάρτησης `main`).\
|
|||
|
Οι διευθύνσεις αυτών των συναρτήσεων αποθηκεύονται μέσα στο **`.dtors`** τμήμα του δυαδικού και επομένως, αν καταφέρετε να **γράψετε** τη **διεύθυνση** ενός **shellcode** στο **`__DTOR_END__`**, αυτό θα **εκτελεστεί** πριν το πρόγραμμα τελειώσει.
|
|||
|
|
|||
|
Αποκτήστε τη διεύθυνση αυτού του τμήματος με:
|
|||
|
```bash
|
|||
|
objdump -s -j .dtors /exec
|
|||
|
rabin -s /exec | grep “__DTOR”
|
|||
|
```
|
|||
|
Συνήθως θα βρείτε τα **σήματα DTOR** **μεταξύ** των τιμών `ffffffff` και `00000000`. Έτσι αν βλέπετε μόνο αυτές τις τιμές, σημαίνει ότι **δεν υπάρχει καμία συνάρτηση που έχει καταχωρηθεί**. Επομένως, **αντικαταστήστε** το **`00000000`** με τη **διεύθυνση** του **shellcode** για να το εκτελέσετε.
|
|||
|
|
|||
|
{% hint style="warning" %}
|
|||
|
Φυσικά, πρώτα πρέπει να βρείτε ένα **μέρος για να αποθηκεύσετε το shellcode** ώστε να το καλέσετε αργότερα.
|
|||
|
{% endhint %}
|
|||
|
|
|||
|
## **.fini\_array**
|
|||
|
|
|||
|
Ουσιαστικά αυτή είναι μια δομή με **συναρτήσεις που θα κληθούν** πριν το πρόγραμμα ολοκληρωθεί, όπως η **`.dtors`**. Αυτό είναι ενδιαφέρον όταν μπορείτε να καλέσετε το **shellcode απλά με ένα άλμα σε μια διεύθυνση**, ή σε περιπτώσεις όπου χρειάζεται να πάτε **πίσω στο `main`** ξανά για να **εκμεταλλευτείτε την ευπάθεια μια δεύτερη φορά**.
|
|||
|
```bash
|
|||
|
objdump -s -j .fini_array ./greeting
|
|||
|
|
|||
|
./greeting: file format elf32-i386
|
|||
|
|
|||
|
Contents of section .fini_array:
|
|||
|
8049934 a0850408
|
|||
|
|
|||
|
#Put your address in 0x8049934
|
|||
|
```
|
|||
|
#### Αιώνιος βρόχος
|
|||
|
|
|||
|
Για να εκμεταλλευτείτε το **`.fini_array`** για να έχετε έναν αιώνιο βρόχο μπορείτε να [**ελέγξετε τι έγινε εδώ**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** Αν έχετε τουλάχιστον 2 καταχωρήσεις στο **`.fini_array`**, μπορείτε:
|
|||
|
|
|||
|
* Χρησιμοποιήστε την πρώτη εγγραφή σας για να **καλέσετε ξανά την ευπάθεια της αυθαίρετης εγγραφής**
|
|||
|
* Στη συνέχεια, υπολογίστε τη διεύθυνση επιστροφής στη στοίβα που αποθηκεύεται από το **`__libc_csu_fini`** (η συνάρτηση που καλεί όλες τις συναρτήσεις του `.fini_array`) και τοποθετήστε εκεί τη **διεύθυνση του `__libc_csu_fini`**
|
|||
|
* Αυτό θα κάνει το **`__libc_csu_fini`** να καλέσει ξανά τον εαυτό του εκτελώντας τις συναρτήσεις του **`.fini_array`** ξανά, οι οποίες θα καλέσουν την ευάθεια της συνάρτησης WWW 2 φορές: μία για την **αυθαίρετη εγγραφή** και μια για να αντικαταστήσει ξανά τη **διεύθυνση επιστροφής του `__libc_csu_fini`** στη στοίβα για να καλέσει ξανά τον εαυτό του.
|
|||
|
|
|||
|
{% hint style="danger" %}
|
|||
|
Σημειώστε ότι με [**Full RELRO**](../common-binary-protections-and-bypasses/relro.md)**,** η ενότητα **`.fini_array`** γίνεται **μόνο για ανάγνωση**.
|
|||
|
{% endhint %}
|