LFI / RFI nedir?
LFI (Local File Inclusion) ve RFI (Remote File Inclusion), bir uygulamanın kullanıcı girdisiyle belirlenen bir dosyayı sayfaya dahil etmesinden doğan açıklardır. LFI sunucudaki yerel dosyaları, RFI ise uzaktaki bir adresten getirilen dosyayı dahil eder.
Dahil edilen dosya kod içeriyorsa sunucuda çalıştırılabilir. Bu nedenle LFI ve RFI, sıklıkla uzaktan kod çalıştırmaya (RCE) giden yollar arasında yer alır.
Nasıl çalışır?
PHP gibi dillerde include ve require işlevleri dosyanın içeriğini çalıştırır. Uygulama, dahil edilecek dosya adını bir parametreden alıyorsa saldırgan bu parametreyi değiştirerek istediği dosyayı seçebilir.
- LFI: Sunucudaki bir dosya, örneğin günlük dosyası, dahil edilir. Günlüklere zararlı kod yazılabilirse bu kod çalıştırılabilir.
- RFI: Saldırganın kontrol ettiği uzak bir adresten dosya çekilir ve çalıştırılır. Bu, PHP’nin uzak dosya dahil etme ayarları kapalıysa mümkün olmaz.
Sunucu ve hosting ortamında
Eski PHP uygulamaları, güncellenmemiş eklentiler ve ?page= ya da ?file= gibi parametre kullanan betikler tipik risk alanlarıdır. Modern PHP yapılandırmasında uzak dosya dahil etme (allow_url_include) varsayılan olarak kapalıdır ve kapalı kalmalıdır.
cPanel, Plesk ve DirectAdmin gibi panellerde PHP ayarları hesap bazında yönetilebilir; open_basedir ve disable_functions ile etki sınırlanabilir.
Nasıl korunulur?
allow_url_includeve gereksizallow_url_fopenayarlarını kapalı tutun.- Dahil edilecek dosyaları sabit bir izin listesiyle sınırlayın; parametreyi doğrudan dosya yolu yapmayın.
- Girdideki yol bileşenlerini temizleyin ve normalleştirin.
open_basedirile PHP’nin erişebileceği dizinleri sınırlayın.- Günlük ve yükleme dizinlerinde kod çalıştırmayı engelleyin.
- Uygulamayı ve eklentileri güncel tutun.
Sık yapılan hatalar
- Parametre ile gelen dosya adının sonuna uzantı ekleyerek güvenli olduğunu sanmak.
- Kullanılmayan eski betikleri sunucuda bırakmak.
- Günlük dosyalarını web sunucusu kullanıcısının yazıp dahil edebileceği yerlerde tutmak.
- PHP ayarlarını hiç gözden geçirmemek.
Sık sorulan sorular
LFI ve RFI arasındaki fark nedir?
LFI sunucudaki yerel bir dosyayı, RFI ise uzaktaki bir sunucudan getirilen dosyayı dahil eder. RFI uzak adresler üzerinden çalıştığı için ek yapılandırma kısıtlarına tabidir.
LFI açığı neye yol açar?
Dosya içeriklerinin okunmasına ve koşullar uygunsa kodun çalıştırılmasına yol açabilir. Hassas yapılandırma dosyalarının sızması en yaygın sonuçtur.
LFI/RFI’dan korunmak için PHP’de hangi ayarlar önemlidir?
allow_url_include kapalı olmalı, open_basedir ile dizin erişimi sınırlanmalı ve dahil edilen dosyalar izin listesinden seçilmelidir.
İlgili terimler
- Ortadaki adam saldırısı (MITM)İki taraf arasındaki iletişime gizlice girip dinlemek ya da değiştirmek.
- Oturum çalma (session hijacking)Saldırganın geçerli bir oturum kimliğini ele geçirip kullanıcı gibi davrandığı saldırı türü.
- PoC (Kavram kanıtı)Bir açığın gerçekten var olduğunu gösteren örnek kod.
- RCE (Uzaktan kod çalıştırma)Saldırganın ağ üzerinden hedefte kendi kodunu çalıştırabildiği açık türü.
- RootkitKendini ve saldırganın etkinliklerini sistemden gizleyen zararlı yazılım.
- Sıfır gün açığı (zero-day)Üretici düzeltme yayımlamadan önce istismar edilen açık.