hacktricks/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md
2024-04-06 18:31:47 +00:00

11 KiB
Raw Blame History

Writable Sys Path +Dll Hijacking Privesc

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Εισαγωγή

Εάν ανακαλύψετε ότι μπορείτε να γράψετε σε έναν φάκελο διαδρομής συστήματος (σημειώστε ότι αυτό δεν θα λειτουργήσει εάν μπορείτε να γράψετε σε έναν φάκελο διαδρομής χρήστη), είναι πιθανό να μπορείτε να αναβαθμίσετε τα δικαιώματά σας στο σύστημα.

Για να το κάνετε αυτό, μπορείτε να καταχραστείτε μια Διαδρομή Dll Hijacking, όπου θα καταχωρήσετε μια βιβλιοθήκη που φορτώνεται από ένα υπηρεσία ή διεργασία με περισσότερα δικαιώματα από εσάς, και επειδή αυτή η υπηρεσία φορτώνει μια Dll που πιθανόν δεν υπάρχει καν στο σύστημα, θα προσπαθήσει να τη φορτώσει από τη Διαδρομή Συστήματος όπου μπορείτε να γράψετε.

Για περισσότερες πληροφορίες σχετικά με το τι είναι η Διαδρομή Dll Hijacking ελέγξτε:

{% content-ref url="./" %} . {% endcontent-ref %}

Ανέβασμα δικαιωμάτων με Dll Hijacking

Εύρεση ελλιπούς Dll

Το πρώτο πράγμα που χρειάζεστε είναι να αναγνωρίσετε μια διεργασία που εκτελείται με περισσότερα δικαιώματα από εσάς και προσπαθεί να φορτώσει μια Dll από τη Διαδρομή Συστήματος στην οποία μπορείτε να γράψετε.

Το πρόβλημα σε αυτές τις περιπτώσεις είναι ότι πιθανόν αυτές οι διεργασίες ήδη εκτελούνται. Για να βρείτε ποιες Dll λείπουν από τις υπηρεσίες που χρειάζεστε, πρέπει να εκκινήσετε το procmon το συντομότερο δυνατόν (πριν φορτωθούν οι διεργασίες). Έτσι, για να βρείτε τις λείπουσες .dlls, κάντε τα εξής:

  • Δημιουργήστε τον φάκελο C:\privesc_hijacking και προσθέστε τη διαδρομή C:\privesc_hijacking στη μεταβλητή περιβάλλοντος System Path. Μπορείτε να το κάνετε χειροκίνητα ή με PS:
# Set the folder path to create and check events for
$folderPath = "C:\privesc_hijacking"

# Create the folder if it does not exist
if (!(Test-Path $folderPath -PathType Container)) {
New-Item -ItemType Directory -Path $folderPath | Out-Null
}

# Set the folder path in the System environment variable PATH
$envPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($envPath -notlike "*$folderPath*") {
$newPath = "$envPath;$folderPath"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
}
  • Εκκινήστε το procmon και πηγαίνετε στις Επιλογές --> Ενεργοποίηση καταγραφής εκκίνησης και πατήστε ΟΚ στην ειδοποίηση.
  • Στη συνέχεια, επανεκκινήστε. Όταν ο υπολογιστής επανεκκινηθεί, το procmon θα αρχίσει να καταγράφει γεγονότα αμέσως.
  • Μόλις ξεκινήσει τα Windows, εκτελέστε ξανά το procmon, θα σας πει ότι έχει τρέξει και θα σας ζητήσει αν θέλετε να αποθηκεύσετε τα γεγονότα σε ένα αρχείο. Πείτε ναι και αποθηκεύστε τα γεγονότα σε ένα αρχείο.
  • Αφού δημιουργηθεί το αρχείο, κλείστε το ανοιχτό παράθυρο του procmon και ανοίξτε το αρχείο με τα γεγονότα.
  • Προσθέστε αυτά τα φίλτρα και θα βρείτε όλες τις Dlls που κάποιη διεργασία προσπάθησε να φορτώσει από τον εγγράψιμο φάκελο της διαδρομής του συστήματος:

Λείπουν Dlls

Εκτελώντας αυτό σε ένα εικονικό (vmware) μηχάνημα με Windows 11, πήρα αυτά τα αποτελέσματα:

Σε αυτήν την περίπτωση, τα .exe είναι άχρηστα, οι λείπουσες DLLs ήταν από:

Υπηρεσία Dll Εντολή CMD
Task Scheduler (Schedule) WptsExtensions.dll C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule
Diagnostic Policy Service (DPS) Unknown.DLL C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS
??? SharedRes.dll C:\Windows\system32\svchost.exe -k UnistackSvcGroup

Αφού βρήκα αυτό, βρήκα αυτήν την ενδιαφέρουσα ανάρτηση σε ιστολόγιο που εξηγεί επίσης πώς να καταχραστείτε το WptsExtensions.dll για ανέλιξη προνομίων. Αυτό είναι αυτό που θα κάνουμε τώρα.

Εκμετάλλευση

Έτσι, για να αναβαθμίσετε τα προνόμια, θα καταχραστούμε τη βιβλιοθήκη WptsExtensions.dll. Έχοντας τη διαδρομή και το όνομα, απλά χρειάζεται να δημιουργήσουμε την κακόβουλη dll.

Μπορείτε να δοκιμάσετε οποιοδήποτε από αυτά τα παραδείγματα. Μπορείτε να εκτελέσετε φορτία όπως: να λάβετε ένα αντίστροφο κέλυφος, να προσθέσετε ένα χρήστη, να εκτελέσετε ένα beacon...

{% hint style="warning" %} Σημειώστε ότι όχι όλες οι υπηρεσίες τρέχουν με NT AUTHORITY\SYSTEM, κάποιες τρέχουν επίσης με NT AUTHORITY\LOCAL SERVICE που έχει λιγότερα προνόμια και δεν θα μπορέσετε να δημιουργήσετε ένα νέο χρήστη καταχρώντας τα δικαιώματά του.
Ωστόσο, αυτός ο χρήστης έχει το προνόμιο seImpersonate, οπότε μπορείτε να χρησιμοποιήσετε το potato suite για ανέλιξη προνομίων. Έτσι, σε αυτήν την περίπτωση, ένα αντίστροφο κέλυφος είναι μια καλύτερη επιλογή από το να προσπαθήσετε να δημιουργήσετε ένα χρήστη. {% endhint %}

Τη στιγμή που γράφτηκε αυτό, η υπηρεσία Task Scheduler τρέχει με Nt AUTHORITY\SYSTEM.

Έχοντας δημιουργήσει την κακόβουλη Dll (στην περίπτωσή μου χρησιμοποίησα ένα x64 αντίστροφο κέλυφος και πήρα ένα κέλυφος πίσω, αλλά ο Defender τον σκότωσε επειδή ήταν από το msfvenom), αποθηκεύστε το στον εγγράψιμο φάκελο της διαδρομής του συστήματος με το όνομα WptsExtensions.dll και επανεκκινήστε τον υπολογιστή (ή επανεκκινήστε την υπηρεσία ή κάντε ό,τι χρειάζεται για να επανεκκινήσετε την επηρεασμένη υπηρεσία/πρόγραμμα).

Όταν η υπηρεσία επανεκκινηθεί, η dll θα πρέπει να φορτωθεί και να εκτελεστεί (μπορείτε να επαναχρησιμοποιήσετε το κόλπο του procmon για να ελέγξετε αν η βιβλιοθήκη φορτώθηκε όπως αναμενόταν).

Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

  • Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF, ελέγξτε τα [**ΣΧΕΔ