Writable Sys Path +Dll Hijacking Privesc
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.
Introduction
Eğer bir System Path klasörüne yazabildiğinizi fark ettiyseniz (not: User Path klasörüne yazabiliyor olmanız bu durumda işe yaramaz), sistemde privileges yükseltmeniz mümkün olabilir.
Bunu yapmak için, sizden daha yüksek privileges ile çalışan bir servis veya process tarafından yüklenen bir kütüphaneyi ele geçirdiğiniz bir Dll Hijacking tekniğini kötüye kullanabilirsiniz; çünkü bu servis, muhtemelen sistemin tamamında bile olmayan bir Dll yüklemeye çalıştığında, onu yazabildiğiniz System Path içinden yüklemeyi deneyecektir.
Dll Hijackig nedir hakkında daha fazla bilgi için şuna bakın:
Dll Hijacking ile Privesc
Eksik bir Dll bulma
İlk ihtiyacınız olan şey, sizden daha yüksek privileges ile çalışan ve yazabildiğiniz System Path içinden bir Dll yüklemeye çalışan bir process belirlemektir.
Bu tekniğin yalnızca Machine/System PATH girdisine bağlı olduğunu, sadece User PATH üzerinde çalışmadığını unutmayın. Bu yüzden Procmon üzerinde zaman harcamadan önce, Machine PATH girdilerini enumerate edip hangilerinin writable olduğunu kontrol etmekte fayda var:
$machinePath = [Environment]::GetEnvironmentVariable("Path", "Machine") -split ';' | Where-Object { $_ }
$machinePath | ForEach-Object {
$path = $_.Trim()
if ($path) {
Write-Host "`n[*] $path"
icacls $path 2>$null
}
}
Bu durumlarda sorun, muhtemelen bu süreçlerin zaten çalışıyor olmasıdır. Hangi Dlls’in eksik olduğunu bulmak için procmon’u mümkün olan en kısa sürede başlatmanız gerekir (processes yüklenmeden önce). Bu nedenle, eksik .dlls’leri bulmak için şunu yapın:
- Create
C:\privesc_hijackingklasörünü oluşturun veC:\privesc_hijackingyolunu System Path env variable içine ekleyin. Bunu manuel olarak veya PS ile yapabilirsiniz:
# Set the folder path to create and check events for
$folderPath = "C:\privesc_hijacking"
# Create the folder if it does not exist
if (!(Test-Path $folderPath -PathType Container)) {
New-Item -ItemType Directory -Path $folderPath | Out-Null
}
# Set the folder path in the System environment variable PATH
$envPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($envPath -notlike "*$folderPath*") {
$newPath = "$envPath;$folderPath"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
}
procmonuygulamasını başlatın veOptions–>Enable boot loggingseçeneğine gidin ve istemdeOKtuşuna basın.- Ardından, yeniden başlatın. Bilgisayar yeniden başladığında
procmonolayları mümkün olan en kısa sürede kaydetmeye başlayacaktır. - Windows açıldıktan sonra
procmonuygulamasını tekrar çalıştırın; program, bir süredir çalıştığını söyleyecek ve olayları bir dosyada saklamak isteyip istemediğinizi soracaktır. Evet deyin ve olayları bir dosyaya kaydedin. - Dosya oluşturulduktan sonra, açık
procmonpenceresini kapatın ve olaylar dosyasını açın. - Bu filtreleri ekleyin; böylece writable System Path klasöründen yüklemeye çalışan tüm Dlls’leri bulacaksınız:
.png)
Tip
Boot logging yalnızca başka şekilde gözlemleyemeyeceğiniz kadar erken başlayan servisler için gereklidir. Hedef service/program’ı istek üzerine tetikleyebiliyorsanız (örneğin COM interface’i ile etkileşime girerek, servisi yeniden başlatarak veya bir scheduled task’i tekrar çalıştırarak), genellikle
Path contains .dll,Result is NAME NOT FOUNDvePath begins with <writable_machine_path>gibi filtrelerle normal bir Procmon capture almak daha hızlıdır.
Kaçırılan Dlls
Bunu ücretsiz bir virtual (vmware) Windows 11 machine üzerinde çalıştırdığımda şu sonuçları aldım:
.png)
Bu durumda .exe dosyaları işe yaramaz, bu yüzden onları yok sayın; kaçırılan DLLs şuradan geliyordu:
| Service | Dll | CMD line |
|---|---|---|
| Task Scheduler (Schedule) | WptsExtensions.dll | C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule |
| Diagnostic Policy Service (DPS) | Unknown.DLL | C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS |
| ??? | SharedRes.dll | C:\Windows\system32\svchost.exe -k UnistackSvcGroup |
Bunu bulduktan sonra, privesc için WptsExtensions.dll nasıl abuse edilir konusunu da açıklayan bu ilginç blog yazısını buldum. Şimdi yapacağımız şey de bu.
Triyaj yapmaya değer diğer adaylar
WptsExtensions.dll iyi bir örnektir, ancak privileged services içinde görünen tek tekrar eden phantom DLL bu değildir. Modern hunting kuralları ve public hijack katalogları hâlâ aşağıdaki isimleri takip eder:
| Service / Scenario | Missing DLL | Notes |
|---|---|---|
Task Scheduler (Schedule) | WptsExtensions.dll | Client sistemlerde klasik bir SYSTEM adayı. Writable dizin Machine PATH içindeyse ve service başlangıçta DLL’i kontrol ediyorsa iyidir. |
| Windows Server üzerinde NetMan | wlanhlp.dll / wlanapi.dll | Server editions üzerinde ilginçtir; çünkü service SYSTEM olarak çalışır ve bazı build’lerde normal bir user tarafından isteğe bağlı olarak tetiklenebilir, bu da onu yalnızca reboot gerektiren durumlardan daha iyi yapar. |
Connected Devices Platform Service (CDPSvc) | cdpsgshims.dll | Genellikle önce NT AUTHORITY\LOCAL SERVICE verir. Bu çoğu zaman yine de yeterlidir; çünkü token SeImpersonatePrivilege içerir, bu yüzden bunu RoguePotato / PrintSpoofer ile zincirleyebilirsiniz. |
Bu isimleri garantili başarı olarak değil, triyaj ipuçları olarak değerlendirin: bunlar SKU/build dependent’tır ve Microsoft sürümler arasında davranışı değiştirebilir. Asıl önemli çıkarım, Machine PATH boyunca arama yapan privileged services içinde eksik DLLs aramaktır; özellikle de service yeniden başlatmadan tekrar tetiklenebiliyorsa.
Exploitation
Bu yüzden, privileges yükseltmek için WptsExtensions.dll kütüphanesini hijack edeceğiz. Path ve name elimizde olduğuna göre tek yapmamız gereken malicious dll oluşturmak.
Bu örneklerden herhangi birini kullanmaya çalışabilirsiniz. Şunlar gibi payloads çalıştırabilirsiniz: rev shell almak, user eklemek, beacon çalıştırmak…
Warning
Tüm service’lerin
NT AUTHORITY\SYSTEMile çalışmadığını unutmayın; bazılarıNT AUTHORITY\LOCAL SERVICEile de çalışır, bu daha az privileges verir ve yeni bir user oluşturup yetkilerini abuse edemezsiniz.
Ancak bu user’ınseImpersonateprivilege’ı vardır, bu yüzden privileges yükseltmek için potato suite kullanabilirsiniz. Dolayısıyla bu durumda, user oluşturmaya çalışmak yerine rev shell daha iyi bir seçenektir.
Bu yazının yazıldığı anda Task Scheduler service’i Nt AUTHORITY\SYSTEM ile çalışıyordu.
Malicious Dll oluşturduktan sonra (benim durumumda x64 rev shell kullandım ve shell geri aldım, ancak Defender bunu msfvenom’dan geldiği için öldürdü), bunu writable System Path içine WptsExtensions.dll adıyla kaydedin ve bilgisayarı yeniden başlatın (veya service’i yeniden başlatın ya da etkilenen service/program’ı tekrar çalıştırmak için ne gerekiyorsa yapın).
Service yeniden başlatıldığında, dll yüklenmeli ve çalıştırılmalıdır (library’nin beklendiği gibi yüklendiğini kontrol etmek için procmon hilesini yeniden kullanabilirsiniz).
References
- Windows DLL Hijacking (Hopefully) Clarified
- Suspicious DLL Loaded for Persistence or Privilege Escalation
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.


