Dll Hijacking
Συμβουλή για bug bounty: Εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα bug bounty δημιουργημένη από χάκερς, για χάκερς! Γίνετε μέλος στο https://go.intigriti.com/hacktricks σήμερα, και αρχίστε να κερδίζετε αμοιβές έως $100,000!
Βασικές Πληροφορίες
Η DLL Hijacking περιλαμβάνει τη χειραγώγηση μιας αξιόπιστης εφαρμογής για να φορτώσει μια κακόβουλη DLL. Αυτός ο όρος περιλαμβάνει αρκετές τακτικές όπως DLL Spoofing, Injection, και Side-Loading. Χρησιμοποιείται κυρίως για εκτέλεση κώδικα, επίτευξη διατήρησης και, λιγότερο συχνά, ανάδειξη προνομίων. Παρά την εστίαση στην ανάδειξη εδώ, η μέθοδος της απαγωγής παραμένει συνεπής σε όλους τους στόχους.
Κοινές Τεχνικές
Χρησιμοποιούνται αρκετές μέθοδοι για την απαγωγή DLL, με την αποτελεσματικότητά τους να εξαρτάται από τη στρατηγική φόρτωσης DLL της εφαρμογής:
Αντικατάσταση DLL: Αντικατάσταση μιας γνήσιας DLL με μια κακόβουλη, προαιρετικά χρησιμοποιώντας DLL Proxying για να διατηρηθεί η λειτουργικότητα της αρχικής DLL.
Απαγωγή Σειράς Αναζήτησης DLL: Τοποθέτηση της κακόβουλης DLL σε ένα μονοπάτι αναζήτησης μπροστά από τη γνήσια, εκμεταλλευόμενη το πρότυπο αναζήτησης της εφαρμογής.
Απαγωγή Phantom DLL: Δημιουργία μιας κακόβουλης DLL για να φορτώσει μια εφαρμογή, νομίζοντας ότι είναι μια μη υπαρκτή απαιτούμενη DLL.
Ανακατεύθυνση DLL: Τροποποίηση παραμέτρων αναζήτησης όπως
%PATH%
ή αρχεία.exe.manifest
/.exe.local
για να κατευθύνει την εφαρμογή στην κακόβουλη DLL.Αντικατάσταση WinSxS DLL: Αντικατάσταση της γνήσιας DLL με μια κακόβουλη αντίστοιχη στον κατάλογο WinSxS, μια μέθοδος συχνά συνδεδεμένη με την πλευρική φόρτωση DLL.
Αναζήτηση Σχετικής Διαδρομής DLL: Τοποθέτηση της κακόβουλης DLL σε έναν κατάλογο που ελέγχεται από τον χρήστη με την αντιγραφή της εφαρμογής, μοιάζοντας με τεχνικές εκτέλεσης διαμεσολάβησης δυαδικών αρχείων.
Εύρεση λείπουσων Dlls
Ο πιο συνηθισμένος τρόπος να βρείτε λείπουσες Dlls μέσα σε ένα σύστημα είναι να εκτελέσετε το procmon από τα sysinternals, ρυθμίζοντας τα ακόλουθα 2 φίλτρα:
και να εμφανίσετε μόνο τη Δραστηριότητα του Συστήματος Αρχείων:
Αν ψάχνετε για λείπουσες dlls γενικά αφήνετε αυτό να τρέχει για μερικά δευτερόλεπτα. Αν Ϩάζετε για μια λείπουσα dll μέσα σε μια συγκεκριμένη εκτελέσιμη πρέπει να ρυθμίσετε ένα άλλο φίλτρο όπως "Όνομα Διεργασίας" "περιέχει" "<όνομα εκτέλεσης>", να την εκτελέσετε και να σταματήσετε την καταγραφή συμβάντων.
Εκμετάλλευση λείπουσων Dlls
Για να αναδείξουμε προνόμια, η καλύτερη ευκαιρία που έχουμε είναι να μπορούμε να γράψουμε μια dll που μια διαδικασία προνομίων θα προσπαθήσει να φορτώσει σε κάποιο μέρος όπου θα αναζητηθεί. Έτσι, θα μπορούμε να γράψουμε μια dll σε ένα φάκελο όπου η dll αναζητείται πριν ο φάκελος όπου η πρωτότυπη dll είναι (περίεργη περίπτωση), ή θα μπορούμε να γράψουμε σε κάποιο φάκελο όπου η dll θα αναζητηθεί και η πρωτότυπη dll δεν υπάρχει σε κανένα φάκελο.
Αναζήτηση Σειράς DLL
Μέσα στην τεκμηρίωση της Microsoft μπορείτε να βρείτε πώς φορτώνονται ειδικά οι Dlls.
Οι εφαρμογές Windows ψάχνουν για DLL ακολουθώντας ένα σύνολο προκαθορισμένων διαδρομών αναζήτησης, τηρώντας μια συγκεκριμένη ακολουθία. Το πρόβλημα της απαγωγής DLL προκύπτει όταν μια επιβλαβής DLL τοποθετείται στον έναν από αυτούς τους καταλόγους, εξασφαλίζοντας ότι φορτώνεται πριν από την αυθεντική DLL. Μια λύση για να αποτραπεί αυτό είναι να διασφαλιστεί ότι η εφαρμογή χρησιμοποιεί απόλυτες διαδρομές όταν αναφέρεται στις DLL που απαιτεί.
Μπορείτε να δείτε τη σειρά αναζήτησης DLL σε 32-bit συστήματα παρακάτω:
Ο κατάλογος από τον οποίο φορτώθηκε η εφαρμογή.
Ο κατάλογος του συστήματος. Χρησιμοποιήστε τη συνάρτηση GetSystemDirectory για να λάβετε τη διαδρομή αυτού του καταλόγου.(C:\Windows\System32)
Ο κατάλογος 16-bit του συστήματος. Δεν υπάρχει συνάρτηση που να ανακτά τη διαδρομή αυτού του καταλόγου, αλλά αναζητείται. (C:\Windows\System)
Ο κατάλογος των Windows. Χρησιμοποιήστε τη συνάρτηση GetWindowsDirectory για να λάβετε τη διαδρομή αυτού του καταλ
Εξαιρέσεις στη σειρά αναζήτησης dll από τα έγγραφα των Windows
Σύμφωνα με τα έγγραφα των Windows, υπάρχουν ορισμένες εξαιρέσεις στην κανονική σειρά αναζήτησης DLL:
Όταν συναντηθεί μια DLL που μοιράζεται το όνομά της με μια ήδη φορτωμένη στη μνήμη DLL, το σύστημα παρακάμπτει τη συνήθη αναζήτηση. Αντίθετα, πραγματοποιεί έλεγχο για ανακατεύθυνση και ένα αρχείο μεταφοράς πριν προεπιλέξει την DLL που είναι ήδη στη μνήμη. Σε αυτό το σενάριο, το σύστημα δεν πραγματοποιεί αναζήτηση για την DLL.
Σε περιπτώσεις όπου η DLL αναγνωρίζεται ως γνωστή DLL για την τρέχουσα έκδοση των Windows, το σύστημα θα χρησιμοποιήσει την έκδοσή της της γνωστής DLL, μαζί με οποιεσδήποτε εξαρτώμενες DLLs της, παραλείποντας τη διαδικασία αναζήτησης. Το κλειδί του μητρώου HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs περιέχει μια λίστα αυτών των γνωστών DLLs.
Αν μια DLL έχει εξαρτήσεις, η αναζήτηση για αυτές τις εξαρτώμενες DLL πραγματοποιείται ως να υποδεικνύονταν μόνο από τα ονόματα των μονάδων τους, ανεξάρτητα από το εάν η αρχική DLL εντοπίστηκε μέσω πλήρους διαδρομής.
Ανάδειξη Προνομίων
Απαιτήσεις:
Εντοπίστε ένα διεργασία που λειτουργεί ή θα λειτουργήσει με διαφορετικά προνόμια (οριζόντια ή κάθετη μετακίνηση), η οποία λείπει από μια DLL.
Βεβαιωθείτε ότι η εγγραφή πρόσβασης είναι διαθέσιμη για οποιονδήποτε κατάλογο στον οποίο θα γίνει αναζήτηση για την DLL. Αυτή η τοποθεσία μπορεί να είναι ο κατάλογος του εκτελέσιμου αρχείου ή ένας κατάλογος εντός της διαδρομής του συστήματος.
Ναι, οι προϋποθέσεις είναι περίπλοκες να βρεθούν καθώς από προεπιλογή είναι λίγο παράξενο να βρείτε ένα προνομιούχο εκτελέσιμο που λείπει μια dll και είναι ακόμα πιο παράξενο να έχετε δικαιώματα εγγραφής σε έναν κατάλογο διαδρομής του συστήματος (δεν μπορείτε από προεπιλογή). Ωστόσο, σε μη διαμορφωμένα περιβάλλοντα αυτό είναι δυνατό. Στην περίπτωση που είστε τυχεροί και πληρούνται οι προϋποθέσεις, μπορείτε να ελέγξετε το έργο UACME. Ακόμα κι αν ο κύριος στόχος του έργου είναι η παράκαμψη του UAC, εκεί μπορείτε να βρείτε ένα PoC ενός Dll hijaking για την έκδοση των Windows που μπορείτε να χρησιμοποιήσετε (πιθανότατα αλλάζοντας μόνο τη διαδρομή του καταλόγου όπου έχετε δικαιώματα εγγραφής).
Σημειώστε ότι μπορείτε να ελέγξετε τα δικαιώματά σας σε έναν κατάλογο με την εντολή:
Και ελέγξτε τα δικαιώματα όλων των φακέλων μέσα στο PATH:
Μπορείτε επίσης να ελέγξετε τις εισαγωγές ενός εκτελέσιμου αρχείου και τις εξαγωγές ενός dll με:
Για οδηγίες για κατάχρηση του Dll Hijacking για ανάδειξη δικαιωμάτων με άδειες εγγραφής σε έναν φάκελο System Path, ελέγξτε:
Αυτοματοποιημένα εργαλεία
Winpeas θα ελέγξει αν έχετε δικαιώματα εγγραφής σε οποιονδήποτε φάκελο μέσα στον φάκελο συστήματος PATH. Άλλα ενδιαφέροντα αυτοματοποιημένα εργαλεία για την ανακάλυψη αυτής της ευπάθειας είναι οι PowerSploit functions: Find-ProcessDLLHijack, Find-PathDLLHijack και Write-HijackDll.
Παράδειγμα
Σε περίπτωση που βρείτε ένα εκμεταλλεύσιμο σενάριο, ένα από τα πιο σημαντικά πράγματα για να εκμεταλλευτείτε με επιτυχία θα είναι να δημιουργήσετε ένα dll που εξάγει τουλάχιστον όλες τις λειτουργίες που το εκτελέσιμο θα εισάγει από αυτό. Πάντως, σημειώστε ότι το Dll Hijacking είναι χρήσιμο για την ανάδειξη από το επίπεδο Μεσαίας Ακεραιότητας στο Υψηλό (παράκαμψη UAC) ή από Υψηλή Ακεραιότητα σε SYSTEM. Μπορείτε να βρείτε ένα παράδειγμα πώς να δημιουργήσετε ένα έγκυρο dll μέσα σε αυτή τη μελέτη Dll Hijacking που επικεντρώνεται στο dll hijacking για εκτέλεση: https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows. Επιπλέον, στην επόμενη ενότητα μπορείτε να βρείτε μερικούς βασικούς κώδικες dll που μπορεί να είναι χρήσιμοι ως πρότυπα ή για τη δημιουργία ενός dll με μη απαιτούμενες λειτουργίες που εξάγονται.
Δημιουργία και συνταγογράφηση Dlls
Διαμεσολάβηση Dll
Βασικά, ένα Dll proxy είναι ένα Dll ικανό να εκτελέσει το κακόβουλο κώδικά σας όταν φορτώνεται αλλά επίσης να εκθέτει και να λειτουργεί όπως αναμένεται με το προώθηση όλων των κλήσεων στην πραγματική βιβλιοθήκη.
Με το εργαλείο DLLirant ή Spartacus μπορείτε πραγματικά να υποδείξετε ένα εκτελέσιμο και να επιλέξετε τη βιβλιοθήκη που θέλετε να διαμεσολαβήσετε και να δημιουργήσετε ένα διαμεσολαβημένο dll ή να υποδείξετε το Dll και να δημιουργήσετε ένα διαμεσολαβημένο dll.
Αποκτήστε έναν meterpreter (x86):
Δημιουργία χρήστη (x86 δεν είδα μια x64 έκδοση):
Το δικό σας
Σημειώστε ότι σε πολλές περιπτώσεις το Dll που μεταγλωτίζετε πρέπει να εξάγει πολλές συναρτήσεις που θα φορτωθούν από τη διεργασία θύμα, αν αυτές οι συναρτήσεις δεν υπάρχουν το δυαδικό αρχείο δεν θα μπορέσει να τις φορτώσει και το εκμετάλλευση θα αποτύχει.
Αναφορές
Συμβουλή για αμοιβή ευρημάτων: Εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα αμοιβής ευρημάτων δημιουργημένη από χάκερς, για χάκερς! Γίνετε μέλος στο https://go.intigriti.com/hacktricks σήμερα και αρχίστε να κερδίζετε αμοιβές έως και $100,000!
Last updated