5.7 KiB
WWW2Exec - .dtors & .fini_array
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Αν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια στο GitHub.
.dtors
{% hint style="danger" %} Σήμερα είναι πολύ παράξενο να βρείτε ένα δυαδικό με τμήμα .dtors! {% endhint %}
Οι καταστροφείς είναι συναρτήσεις που εκτελούνται πριν το πρόγραμμα τελειώσει (μετά την επιστροφή της συνάρτησης main
).
Οι διευθύνσεις αυτών των συναρτήσεων αποθηκεύονται μέσα στο .dtors
τμήμα του δυαδικού και επομένως, αν καταφέρετε να γράψετε τη διεύθυνση ενός shellcode στο __DTOR_END__
, αυτό θα εκτελεστεί πριν το πρόγραμμα τελειώσει.
Αποκτήστε τη διεύθυνση αυτού του τμήματος με:
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
ξανά για να εκμεταλλευτείτε την ευπάθεια μια δεύτερη φορά.
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
για να έχετε έναν αιώνιο βρόχο μπορείτε να ελέγξετε τι έγινε εδώ: Αν έχετε τουλάχιστον 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, η ενότητα .fini_array
γίνεται μόνο για ανάγνωση.
{% endhint %}