WWW2Exec - GOT/PLT
Βασικές Πληροφορίες
GOT: Πίνακας Παγκόσμιας Μετατόπισης
Ο Πίνακας Παγκόσμιας Μετατόπισης (GOT) είναι ένας μηχανισμός που χρησιμοποιείται σε δυναμικά συνδεδεμένα δυαδικά αρχεία για τη διαχείριση των διευθύνσεων εξωτερικών συναρτήσεων. Δεδομένου ότι αυτές οι διευθύνσεις δεν είναι γνωστές μέχρι την εκτέλεση (λόγω δυναμικής σύνδεσης), ο GOT παρέχει έναν τρόπο για τη δυναμική ενημέρωση των διευθύνσεων αυτών των εξωτερικών συμβόλων μόλις αυτά επιλυθούν.
Κάθε καταχώρηση στο GOT αντιστοιχεί σε ένα σύμβολο στις εξωτερικές βιβλιοθήκες που μπορεί να καλέσει το δυαδικό. Όταν μια συνάρτηση καλείται για πρώτη φορά, η πραγματική της διεύθυνση επιλύεται από το δυναμικό συνδέτη και αποθηκεύεται στο GOT. Οι επόμενες κλήσεις στην ίδια συνάρτηση χρησιμοποιούν τη διεύθυνση που αποθηκεύεται στο GOT, αποφεύγοντας έτσι την υπερβολική καθυστέρηση της επίλυσης της διεύθυνσης ξανά.
PLT: Πίνακας Σύνδεσης Διαδικασίας
Ο Πίνακας Σύνδεσης Διαδικασίας (PLT) λειτουργεί στενά με το GOT και λειτουργεί ως τραμπολίνα για τη διαχείριση κλήσεων σε εξωτερικές συναρτήσεις. Όταν ένα δυαδικό καλεί μια εξωτερική συνάρτηση για πρώτη φορά, η έλεγχος περνά σε μια καταχώρηση στο PLT που σχετίζεται με αυτή τη συνάρτηση. Αυτή η καταχώρηση PLT είναι υπεύθυνη για την κλήση του δυναμικού συνδέτη για την επίλυση της διεύθυνσης της συνάρτησης αν δεν έχει ήδη επιλυθεί. Αφού επιλυθεί η διεύθυνση, αποθηκεύεται στο GOT.
Συνεπώς, οι καταχωρήσεις GOT χρησιμοποιούνται απευθείας μόλις επιλυθεί η διεύθυνση μιας εξωτερικής συνάρτησης ή μεταβλητής. Οι καταχωρήσεις PLT χρησιμοποιούνται για να διευκολύνουν την αρχική επίλυση αυτών των διευθύνσεων μέσω του δυναμικού συνδέτη.
Λήψη Εκτέλεσης
Έλεγχος του GOT
Λάβετε τη διεύθυνση του πίνακα GOT με: objdump -s -j .got ./exec
Παρατηρήστε πώς μετά το φόρτωμα του εκτελέσιμου στο GEF μπορείτε να δείτε τις συναρτήσεις που βρίσκονται στο GOT: gef➤ x/20x 0xADDR_GOT
Χρησιμοποιώντας το GEF μπορείτε να ξεκινήσετε μια συνεδρία αποσφαλμάτωσης και να εκτελέσετε το got
για να δείτε τον πίνακα got:
GOT2Exec
Σε ένα δυαδικό ο GOT έχει τις διευθύνσεις των συναρτήσεων ή της ενότητας PLT που θα φορτώσει τη διεύθυνση της συνάρτησης. Ο στόχος αυτής της αυθαίρετης εγγραφής είναι να αντικαταστήσετε μια καταχώρηση GOT μιας συνάρτησης που θα εκτελεστεί αργότερα με τη διεύθυνση της PLT της συνάρτησης system
για παράδειγμα.
Ιδανικά, θα αντικαταστήσετε το GOT μιας συνάρτησης που θα κληθεί με παραμέτρους που ελέγχετε εσείς (ώστε να μπορείτε να ελέγξετε τις παραμέτρους που στέλνονται στη συνάρτηση συστήματος).
Αν η system
δεν χρησιμοποιείται από το δυαδικό, η συνάρτηση συστήματος δεν θα έχει μια καταχώρηση στο PLT. Σε αυτό το σενάριο, θα χρειαστεί να διαρρεύσετε πρώτα τη διεύθυνση της συνάρτησης system
και στη συνέχεια να αντικαταστήσετε το GOT για να δείχνει σε αυτή τη διεύθυνση.
Μπορείτε να δείτε τις διευθύνσεις PLT με objdump -j .plt -d ./vuln_binary
Καταχωρήσεις GOT της libc
Ο GOT της libc συνήθως συντάσσεται με μερικό RELRO, κάνοντάς το ένα καλό στόχο για αυτό υποθέτοντας ότι είναι δυνατό να βρεθεί η διεύθυνσή του (ASLR).
Συνήθεις συναρτήσεις της libc θα καλέσουν άλλες εσωτερικές συναρτήσεις των οποίων το GOT θα μπορούσε να αντικατασταθεί για να επιτευχθεί εκτέλεση κώδικα.
Βρείτε περισσότερες πληροφορίες για αυτή την τεχνική εδώ.
Free2system
Στις εκμετάλλευσεις στο σωρό είναι συνηθισμένο να είναι δυνατό να ελέγχετε το περιεχόμενο των κομματιών και σε κάποιο σημείο ακόμα να αντικαθιστάτε τον πίνακα GOT. Ένα απλό κόλπο για να πάρετε RCE αν δεν υπάρχουν διαθέσιμα gadgets είναι να αντικαταστήσετε τη διεύθυνση GOT του free
για να δείχνει στο system
και να γράψετε μέσα σε ένα κομμάτι "/bin/sh"
. Με αυτόν τον τρόπο, όταν αυτό το κομμάτι απελευθερωθεί, θα εκτελέσει την system("/bin/sh")
.
Strlen2system
Μια άλλη συνηθισμένη τεχνική είναι η αντικατάσταση της διεύθυνσης GOT της strlen
για να δείχνει στο system
, έτσι αν αυτή η συνάρτηση καλείται με είσοδο χρήστη είναι δυνατό να πε
Προστασίες
Η προστασία Full RELRO έχει σκοπό να προστατεύσει από αυτού του είδους τεχνικές, επιλύοντας όλες τις διευθύνσεις των συναρτήσεων όταν ξεκινάει το δυαδικό αρχείο και καθιστώντας τον πίνακα GOT μόνο για ανάγνωση μετά από αυτό:
RelroΑναφορές
Last updated