ld.so privesc exploit example
Προετοιμασία του περιβάλλοντος
Στην παρακάτω ενότητα μπορείτε να βρείτε τον κώδικα των αρχείων που θα χρησιμοποιήσουμε για να προετοιμάσουμε το περιβάλλον
Ο παρακάτω κώδικας δείχνει ένα παράδειγμα από ένα απλό αρχείο C που χρησιμοποιεί τη συνάρτηση system()
για να εκτελέσει μια εντολή στο σύστημα:
Αυτός ο κώδικας απλά εκτυπώνει το μήνυμα "Hello, world!" στην κονσόλα. Ωστόσο, η συνάρτηση system()
μπορεί να χρησιμοποιηθεί για να εκτελέσει οποιαδήποτε εντολή στο σύστημα, πράγμα που την καθιστά επικίνδυνη αν χρησιμοποιηθεί από κακόβουλο κώδικα.
Για να αποφευχθεί η κακόβουλη χρήση της συνάρτησης system()
, μπορεί να χρησιμοποιηθεί η συνάρτηση execve()
αντί για αυτήν. Η συνάρτηση execve()
εκτελεί μια εντολή στο σύστημα, αλλά απαιτεί την παροχή ενός πίνακα με τα ορίσματα της εντολής και των περιβαλλοντικών μεταβλητών. Αυτό καθιστά δυσκολότερη την εκτέλεση κακόβουλων εντολών.
Ο παρακάτω κώδικας δείχνει ένα παράδειγμα από ένα αρχείο C που χρησιμοποιεί τη συνάρτηση execve()
για να εκτελέσει μια εντολή στο σύστημα:
Αυτός ο κώδικας εκτελεί την εντολή echo Hello, world!
χρησιμοποιώντας τη συνάρτηση execve()
. Ο πίνακας args
περιέχει τα ορίσματα της εντολής και ο πίνακας env
περιέχει τις περιβαλλοντικές μεταβλητές. Αυτό εξασφαλίζει ότι η εντολή που εκτελείται είναι ακριβώς αυτή που προορίζεται, χωρίς τη δυνατότητα εκτέλεσης κακόβουλων εντολών.
Η χρήση της συνάρτησης execve()
αντί για τη συνάρτηση system()
είναι ένας τρόπος να ενισχυθεί η ασφάλεια του κώδικα και να αποτραπεί η εκτέλεση κακόβουλων εντολών.
Δημιουργήστε αυτά τα αρχεία στον υπολογιστή σας στον ίδιο φάκελο
Μεταγλωτίστε τη βιβλιοθήκη:
gcc -shared -o libcustom.so -fPIC libcustom.c
Αντιγράψτε το
libcustom.so
στο/usr/lib
:sudo cp libcustom.so /usr/lib
(δικαιώματα root)Μεταγλωτίστε το εκτελέσιμο:
gcc sharedvuln.c -o sharedvuln -lcustom
Ελέγξτε το περιβάλλον
Ελέγξτε ότι το libcustom.so φορτώνεται από το /usr/lib και ότι μπορείτε να εκτελέσετε το δυαδικό αρχείο.
Εκμετάλλευση
Σε αυτό το σενάριο θα υποθέσουμε ότι κάποιος έχει δημιουργήσει μια ευπάθη εγγραφή μέσα σε ένα αρχείο στο /etc/ld.so.conf/:
Ο ευάλωτος φάκελος είναι /home/ubuntu/lib (όπου έχουμε εγγράψιμη πρόσβαση). Κατεβάστε και μεταγλωττίστε τον παρακάτω κώδικα μέσα σε αυτήν τη διαδρομή:
Τώρα που έχουμε δημιουργήσει την κακόβουλη βιβλιοθήκη libcustom μέσα στο μη σωστά διαμορφωμένο μονοπάτι, πρέπει να περιμένουμε για ένα επανεκκίνηση ή για τον χρήστη root να εκτελέσει το ldconfig
(σε περίπτωση που μπορείτε να εκτελέσετε αυτό το δυαδικό αρχείο ως sudo ή έχει το suid bit, θα μπορείτε να το εκτελέσετε μόνοι σας).
Μόλις συμβεί αυτό, ελέγξτε ξανά από πού φορτώνει το εκτελέσιμο sharevuln
τη βιβλιοθήκη libcustom.so
:
Όπως μπορείτε να δείτε, το φορτώνει από το /home/ubuntu/lib
και αν οποιοσδήποτε χρήστης το εκτελέσει, θα εκτελεστεί ένα κέλυφος:
Σημείωση ότι σε αυτό το παράδειγμα δεν έχουμε αναβαθμίσει δικαιώματα, αλλά τροποποιώντας τις εντολές που εκτελούνται και περιμένοντας τον ριζικό χρήστη ή άλλο χρήστη με προνομιακά δικαιώματα να εκτελέσει το ευπάθειας binary θα μπορέσουμε να αναβαθμίσουμε τα δικαιώματα.
Άλλες λανθασμένες ρυθμίσεις - Ίδια ευπάθεια
Στο προηγούμενο παράδειγμα παραπλάνησαμε μια λανθασμένη ρύθμιση όπου ένας διαχειριστής έθεσε ένα μη προνομιούχο φάκελο μέσα σε ένα αρχείο ρύθμισης μέσα στο /etc/ld.so.conf.d/
.
Αλλά υπάρχουν και άλλες λανθασμένες ρυθμίσεις που μπορούν να προκαλέσουν την ίδια ευπάθεια, αν έχετε δικαιώματα εγγραφής σε κάποιο αρχείο ρύθμισης μέσα στο /etc/ld.so.conf.d
, στον φάκελο /etc/ld.so.conf.d
ή στο αρχείο /etc/ld.so.conf
μπορείτε να διαμορφώσετε την ίδια ευπάθεια και να την εκμεταλλευτείτε.
Εκμετάλλευση 2
Υποθέστε ότι έχετε προνομιακά δικαιώματα sudo πάνω στο ldconfig
.
Μπορείτε να υποδείξετε στο ldconfig
από πού να φορτώνει τα αρχεία ρυθμίσεων, έτσι μπορούμε να εκμεταλλευτούμε αυτό για να κάνουμε το ldconfig
να φορτώσει αυθαίρετους φακέλους.
Έτσι, ας δημιουργήσουμε τα απαραίτητα αρχεία και φακέλους για να φορτώσουμε το "/tmp":
Τώρα, όπως προκύπτει από την προηγούμενη εκμετάλλευση, δημιουργήστε την κακόβουλη βιβλιοθήκη μέσα στο /tmp
.
Και τέλος, ας φορτώσουμε τη διαδρομή και ας ελέγξουμε από πού φορτώνεται ο δυαδικός αρχείος της βιβλιοθήκης:
Όπως μπορείτε να δείτε, έχοντας δικαιώματα sudo πάνω στο ldconfig
, μπορείτε να εκμεταλλευτείτε την ίδια ευπάθεια.
Δεν βρήκα ένα αξιόπιστο τρόπο για να εκμεταλλευτώ αυτήν την ευπάθεια αν το ldconfig
έχει ρυθμιστεί με το suid bit. Εμφανίζεται το ακόλουθο σφάλμα: /sbin/ldconfig.real: Can't create temporary cache file /etc/ld.so.cache~: Permission denied
Αναφορές
Dab machine στο HTB
Last updated