Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
**Bug bounty tip**: **sign up** for **Intigriti**, a premium **bug bounty platform created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
Η εκμετάλλευση DLL περιλαμβάνει την παραποίηση μιας αξιόπιστης εφαρμογής ώστε να φορτώσει μια κακόβουλη DLL. Αυτός ο όρος περιλαμβάνει πολλές τακτικές όπως **DLL Spoofing, Injection, και Side-Loading**. Χρησιμοποιείται κυρίως για εκτέλεση κώδικα, επίτευξη επιμονής και, λιγότερο συχνά, κλιμάκωση δικαιωμάτων. Παρά την εστίαση στην κλιμάκωση εδώ, η μέθοδος της εκμετάλλευσης παραμένει συνεπής σε όλους τους στόχους.
1.**DLL Replacement**: Αντικατάσταση μιας γνήσιας DLL με μια κακόβουλη, προαιρετικά χρησιμοποιώντας DLL Proxying γιανα διατηρηθεί η λειτουργικότητα της αρχικής DLL.
2.**DLL Search Order Hijacking**: Τοποθέτηση της κακόβουλης DLL σε μια διαδρομή αναζήτησης πριν από τη νόμιμη, εκμεταλλευόμενοι το μοτίβο αναζήτησης της εφαρμογής.
3.**Phantom DLL Hijacking**: Δημιουργία μιας κακόβουλης DLL γιανα φορτωθεί από μια εφαρμογή, νομίζοντας ότι είναι μια ανύπαρκτη απαιτούμενη DLL.
4.**DLL Redirection**: Τροποποίηση παραμέτρων αναζήτησης όπως το `%PATH%` ή τα αρχεία `.exe.manifest` / `.exe.local`γιανα κατευθυνθεί η εφαρμογή στην κακόβουλη DLL.
5.**WinSxS DLL Replacement**: Αντικατάσταση της νόμιμης DLL με μια κακόβουλη στο φάκελο WinSxS, μια μέθοδος που συχνά σχετίζεται με την πλευρική φόρτωση DLL.
6.**Relative Path DLL Hijacking**: Τοποθέτηση της κακόβουλης DLL σε έναν φάκελο που ελέγχεται από τον χρήστη με την αντιγραμμένη εφαρμογή, που μοιάζει με τις τεχνικές Binary Proxy Execution.
Ο πιο κοινός τρόπος γιανα βρείτε ελλείπουσες DLL σε ένα σύστημα είναι να εκτελέσετε [procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) από sysinternals, **ορίζοντας** τους **ακόλουθους 2 φίλτρους**:
Αν ψάχνετε για**ελλείπουσες dll γενικά** μπορείτε να**αφήσετε** αυτό να τρέχει για μερικά **δευτερόλεπτα**.\
Αν ψάχνετε για μια **ελλείπουσα dll μέσα σε μια συγκεκριμένη εκτελέσιμη** θα πρέπει να ορίσετε **ένα άλλο φίλτρο όπως "Process Name" "contains" "\<exec name>", να το εκτελέσετε και να σταματήσετε την καταγραφή γεγονότων**.
Για να κλιμακώσουμε δικαιώματα, η καλύτερη ευκαιρία που έχουμε είναι να μπορέσουμε να**γράψουμε μια dll που μια διαδικασία με δικαιώματα θα προσπαθήσει να φορτώσει** σε κάποιο **μέρος όπου θα αναζητηθεί**. Επομένως, θα μπορέσουμε να**γράψουμε** μια dll σε έναν **φάκελο** όπου η **dll αναζητείται πριν** από τον φάκελο όπου βρίσκεται η **αρχική dll** (παράξενος περίπτωση), ή θα μπορέσουμε να**γράψουμε σε κάποιο φάκελο όπου η dll θα αναζητηθεί** και η αρχική **dll δεν υπάρχει** σε κανέναν φάκελο.
**Μέσα στην** [**τεκμηρίωση της Microsoft**](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching) **μπορείτε να βρείτε πώς φορτώνονται οι DLL συγκεκριμένα.**
**Οι εφαρμογές των Windows** αναζητούν DLL ακολουθώντας ένα σύνολο **προκαθορισμένων διαδρομών αναζήτησης**, τηρώντας μια συγκεκριμένη ακολουθία. Το ζήτημα της εκμετάλλευσης DLL προκύπτει όταν μια επιβλαβής DLL τοποθετείται στρατηγικά σε έναν από αυτούς τους καταλόγους, διασφαλίζοντας ότι θα φορτωθεί πριν από την αυθεντική DLL. Μια λύση γιανα αποτραπεί αυτό είναι να διασφαλιστεί ότι η εφαρμογή χρησιμοποιεί απόλυτες διαδρομές όταν αναφέρεται στις DLL που απαιτεί.
2.Ο φάκελος συστήματος. Χρησιμοποιήστε τη λειτουργία [**GetSystemDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemdirectorya) γιανα αποκτήσετε τη διαδρομή αυτού του φακέλου.(_C:\Windows\System32_)
3.Ο φάκελος 16-bit συστήματος. Δεν υπάρχει λειτουργία που να αποκτά τη διαδρομή αυτού του φακέλου, αλλά αναζητείται. (_C:\Windows\System_)
4.Ο φάκελος των Windows. Χρησιμοποιήστε τη λειτουργία [**GetWindowsDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya) γιανα αποκτήσετε τη διαδρομή αυτού του φακέλου.
1. (_C:\Windows_)
5.Ο τρέχων φάκελος.
6.Οι φάκελοι που αναφέρονται στη μεταβλητή περιβάλλοντος PATH. Σημειώστε ότι αυτό δεν περιλαμβάνει τη διαδρομή ανά εφαρμογή που καθορίζεται από το κλειδί μητρώου **App Paths**. Το κλειδί **App Paths** δεν χρησιμοποιείται κατά τον υπολογισμό της διαδρομής αναζήτησης DLL.
Αυτή είναι η **προεπιλεγμένη** σειρά αναζήτησης με ενεργοποιημένο το **SafeDllSearchMode**. Όταν είναι απενεργοποιημένο, ο τρέχων φάκελος ανεβαίνει στη δεύτερη θέση. Για να απενεργοποιήσετε αυτή τη δυνατότητα, δημιουργήστε την τιμή μητρώου **HKEY\_LOCAL\_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** και ορίστε την σε 0 (η προεπιλογή είναι ενεργοποιημένη).
Αν η λειτουργία [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) καλείται με **LOAD\_WITH\_ALTERED\_SEARCH\_PATH**, η αναζήτηση αρχίζει στον φάκελο του εκτελέσιμου μοντέλου που **φορτώνει το LoadLibraryEx**.
Τέλος, σημειώστε ότι **μια dll θα μπορούσε να φορτωθεί υποδεικνύοντας την απόλυτη διαδρομή αντί για το όνομα**. Σε αυτή την περίπτωση, η dll θα **αναζητηθεί μόνο σε αυτή τη διαδρομή** (αν η dll έχει εξαρτήσεις, θα αναζητηθούν όπως φορτώθηκαν μόνο με το όνομα).
Υπάρχουν άλλοι τρόποι γιανα τροποποιήσετε τις μεθόδους αναζήτησης, αλλά δεν θα τους εξηγήσω εδώ.
* Όταν συναντηθεί μια **DLL που μοιράζεται το όνομά της με μία που έχει ήδη φορτωθεί στη μνήμη**, το σύστημα παρακάμπτει τη συνήθη αναζήτηση. Αντίθετα, εκτελεί έναν έλεγχο για ανακατεύθυνση και ένα μανιφέστο πριν επιστρέψει στη DLL που είναι ήδη στη μνήμη. **Σε αυτό το σενάριο, το σύστημα δεν διεξάγει αναζήτηση για τη DLL**.
* Σε περιπτώσεις όπου η DLL αναγνωρίζεται ως **γνωστή DLL**για την τρέχουσα έκδοση των Windows, το σύστημα θα χρησιμοποιήσει την έκδοση της γνωστής DLL, μαζί με οποιαδήποτε από τις εξαρτώμενες DLL της, **παρακάμπτοντας τη διαδικασία αναζήτησης**. Το κλειδί μητρώου **HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** περιέχει μια λίστα με αυτές τις γνωστές DLL.
*Αν μια **DLL έχει εξαρτήσεις**, η αναζήτηση για αυτές τις εξαρτώμενες DLL διεξάγεται σαννα υποδεικνύονταν μόνο με τα **ονόματα των μονάδων τους**, ανεξάρτητα από το αν η αρχική DLL αναγνωρίστηκε μέσω πλήρους διαδρομής.
* Εντοπίστε μια διαδικασία που λειτουργεί ή θα λειτουργήσει με **διαφορετικά δικαιώματα** (οριζόντια ή πλευρική κίνηση), η οποία **λείπει μια DLL**.
* Διασφαλίστε ότι υπάρχει **πρόσβαση εγγραφής**για οποιονδήποτε **φάκελο** στον οποίο θα **αναζητηθεί η DLL**. Αυτή η τοποθεσία μπορεί να είναι ο φάκελος της εκτελέσιμης ή ένας φάκελος εντός της διαδρομής του συστήματος.
Ναι, οι απαιτήσεις είναι περίπλοκες να βρεθούν καθώς **κατά προεπιλογή είναι κάπως παράξενο να βρείτε μια εκτελέσιμη με δικαιώματα που να λείπει μια dll** και είναι ακόμη **πιο παράξενο να έχετε δικαιώματα εγγραφής σε έναν φάκελο διαδρομής συστήματος** (δεν μπορείτε κατά προεπιλογή). Αλλά, σε κακώς ρυθμισμένα περιβάλλοντα αυτό είναι δυνατό.\
Σε περίπτωση που είστε τυχεροί και πληροίτε τις απαιτήσεις, μπορείτε να ελέγξετε το έργο [UACME](https://github.com/hfiref0x/UACME). Ακόμη και ανο**κύριος στόχος του έργου είναι η παράκαμψη του UAC**, μπορεί να βρείτε εκεί μια **PoC** εκμετάλλευσης DLL για την έκδοση των Windows που μπορείτε να χρησιμοποιήσετε (πιθανώς αλλάζοντας απλώς τη διαδρομή του φακέλου όπου έχετε δικαιώματα εγγραφής).
Σημειώστε ότι μπορείτε να**ελέγξετε τα δικαιώματά σας σε έναν φάκελο** κάνοντας:
Για έναν πλήρη οδηγό σχετικά με το πώς να**καταχραστείτε το Dll Hijacking γιανα κλιμακώσετε τα δικαιώματα** με άδειες εγγραφής σε έναν **φάκελο System Path** ελέγξτε:
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) θα ελέγξει αν έχετε άδειες εγγραφής σε οποιονδήποτε φάκελο μέσα στο system PATH.\
Άλλα ενδιαφέροντα αυτοματοποιημένα εργαλεία για την ανακάλυψη αυτής της ευπάθειας είναι οι**λειτουργίες PowerSploit**: _Find-ProcessDLLHijack_, _Find-PathDLLHijack_ και _Write-HijackDll._
Σε περίπτωση που βρείτε ένα εκμεταλλεύσιμο σενάριο, ένα από τα πιο σημαντικά πράγματα γιανα το εκμεταλλευτείτε επιτυχώς θα ήταν να**δημιουργήσετε ένα dll που εξάγει τουλάχιστον όλες τις λειτουργίες που θα εισάγει το εκτελέσιμο από αυτό**. Ούτως ή άλλως, σημειώστε ότι το Dll Hijacking είναι χρήσιμο γιανα [κλιμακώσετε από το Medium Integrity level σε High **(παρακάμπτοντας το UAC)**](../authentication-credentials-uac-and-efs.md#uac) ή από [**High Integrity σε SYSTEM**](./#from-high-integrity-to-system)**.** Μπορείτε να βρείτε ένα παράδειγμα για**πώς να δημιουργήσετε ένα έγκυρο dll** μέσα σε αυτή τη μελέτη dll hijacking που επικεντρώνεται στο dll hijacking για εκτέλεση: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\
Επιπλέον, στην **επόμενη ενότητα** μπορείτε να βρείτε μερικούς **βασικούς κωδικούς dll** που μπορεί να είναι χρήσιμοι ως **πρότυπα** ή γιανα δημιουργήσετε ένα **dll με μη απαιτούμενες εξαγόμενες λειτουργίες**.
Βασικά, ένα **Dll proxy** είναι ένα Dll ικανό να**εκτελεί τον κακόβουλο κώδικά σας όταν φορτωθεί** αλλά και να**εκθέτει** και να**λειτουργεί** όπως **αναμένεται** μέσω **αναμετάδοσης όλων των κλήσεων στη πραγματική βιβλιοθήκη**.
Με το εργαλείο [**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant) ή [**Spartacus**](https://github.com/Accenture/Spartacus) μπορείτε στην πραγματικότητα να**υποδείξετε ένα εκτελέσιμο και να επιλέξετε τη βιβλιοθήκη** που θέλετε να proxify και **να δημιουργήσετε ένα proxified dll** ή **να υποδείξετε το Dll** και **να δημιουργήσετε ένα proxified dll**.
Σημειώστε ότι σε πολλές περιπτώσεις το Dll που θα συντάξετε πρέπει να**εξάγει πολλές συναρτήσεις** που θα φορτωθούν από τη διαδικασία του θύματος, αν αυτές οι συναρτήσεις δεν υπάρχουν, το **δυαδικό αρχείο δεν θα μπορέσει να τις φορτώσει** και η **εκμετάλλευση θα αποτύχει**.
**Συμβουλή bug bounty**: **εγγραφείτε** στο **Intigriti**, μια premium **πλατφόρμα bug bounty που δημιουργήθηκε από hackers, για hackers**! Ελάτε μαζί μας στο [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) σήμερα, και αρχίστε να κερδίζετε βραβεία έως **$100,000**!
Μάθετε & εξασκηθείτε στο AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Ελάτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**