WWW2Exec - .dtors & .fini_array
Reading time: 4 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
.dtors
caution
Σήμερα είναι πολύ περίεργο να βρεις ένα δυαδικό αρχείο με τμήμα .dtors!
Οι καταστροφείς είναι συναρτήσεις που εκτελούνται πριν το πρόγραμμα τελειώσει (μετά την επιστροφή της συνάρτησης main
).
Οι διευθύνσεις αυτών των συναρτήσεων αποθηκεύονται μέσα στο .dtors
τμήμα του δυαδικού αρχείου και επομένως, αν καταφέρετε να γράψετε τη διεύθυνση σε ένα shellcode στο __DTOR_END__
, αυτό θα εκτελεστεί πριν το πρόγραμμα τελειώσει.
Πάρτε τη διεύθυνση αυτού του τμήματος με:
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
Συνήθως θα βρείτε τους DTOR δείκτες μεταξύ των τιμών ffffffff
και 00000000
. Έτσι, αν δείτε μόνο αυτές τις τιμές, σημαίνει ότι δεν υπάρχει καμία καταχωρημένη συνάρτηση. Έτσι, επικαλύψτε το 00000000
με τη διεύθυνση του shellcode για να το εκτελέσετε.
warning
Φυσικά, πρώτα πρέπει να βρείτε μια θέση για να αποθηκεύσετε το shellcode προκειμένου να το καλέσετε αργότερα.
.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
, μετακινείται στην επόμενη, οπότε δεν θα εκτελείται πολλές φορές (αποτρέποντας τους αιώνιους βρόχους), αλλά επίσης θα σας δώσει μόνο 1 εκτέλεση της συνάρτησης που τοποθετείται εδώ.
Σημειώστε ότι οι καταχωρίσεις στο .fini_array
καλούνται σε αντίστροφη σειρά, οπότε πιθανώς θέλετε να αρχίσετε να γράφετε από την τελευταία.
Αιώνιος βρόχος
Για να εκμεταλλευτείτε το .fini_array
για να αποκτήσετε έναν αιώνιο βρόχο μπορείτε να ελέγξετε τι έγινε εδώ: Εάν έχετε τουλάχιστον 2 καταχωρίσεις στο .fini_array
, μπορείτε να:
- Χρησιμοποιήσετε την πρώτη σας εγγραφή για να καλέσετε ξανά τη λειτουργία ευάλωτης αυθαίρετης εγγραφής
- Στη συνέχεια, υπολογίστε τη διεύθυνση επιστροφής στη στοίβα που αποθηκεύεται από το
__libc_csu_fini
(τη συνάρτηση που καλεί όλες τις συναρτήσεις του.fini_array
) και τοποθετήστε εκεί τη διεύθυνση του__libc_csu_fini
- Αυτό θα κάνει το
__libc_csu_fini
να καλέσει ξανά τον εαυτό του εκτελώντας ξανά τις συναρτήσεις του.fini_array
, οι οποίες θα καλέσουν τη ευάλωτη WWW συνάρτηση 2 φορές: μία για αυθαίρετη εγγραφή και μία άλλη για να ξαναγράψει τη διεύθυνση επιστροφής του__libc_csu_fini
στη στοίβα για να καλέσει ξανά τον εαυτό του.
caution
Σημειώστε ότι με Full RELRO, η ενότητα .fini_array
είναι μόνο για ανάγνωση.
Σε νεότερες εκδόσεις, ακόμη και με [Partial RELRO] η ενότητα .fini_array
είναι επίσης μόνο για ανάγνωση.
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.