📚 Path Traversal'ı Öğren & Ustalaş
Teori, bypass teknikleri, gerçek dünya örnekleri ve önleme stratejilerini kapsayan kapsamlı rehber
Path Traversal Nedir?
Path Traversal (Dizin Geçişi olarak da bilinir), saldırganların dosya yollarını manipüle ederek sunucudaki rastgele dosyaları okumalarına izin veren bir web güvenlik zafiyetidir. Saldırganlar ../ gibi özel karakter dizilerini kullanarak dizin yapısında yukarı çıkar ve web kök dizini dışındaki hassas dosyalara erişirler.
Nasıl Çalışır?
Path Traversal saldırıları, uygulamalar kullanıcı girdisine dayalı olarak dosya yolları oluştururken yetersiz girdi doğrulamasını istismar eder. ../ (nokta-nokta-slash) gibi özel karakter dizilerini kullanarak saldırganlar dizin ağacında yukarı çıkabilir ve sistem dosyaları, yapılandırma dosyaları ve uygulama kaynak kodu dahil olmak üzere web kök dizini dışındaki dosyalara erişebilirler.
❌ SAVUNMASIZ KOD
1// PHP - Unsafe file inclusion2$file = $_GET['page'];3include("/var/www/pages/" . $file);45// Attacker sends:6?page=../../../../etc/passwd78// Result: Reads /etc/passwd✅ GÜVENLİ KOD
1// PHP - Secure file inclusion2$file = basename($_GET['page']);3$allowedFiles = ['home', 'about', 'contact'];45if (in_array($file, $allowedFiles)) {6 include("/var/www/pages/" . $file . ".php");7}Path Traversal Türleri
Dizinlerde gezinmek için basit ../ dizileri
Tam yollar kullanarak doğrudan dosya erişimi
Filtreleri atlatmak için URL/Unicode encoding
Filtreleri yenmek için karmaşık patternler
Ne Olabilir?
- 📂Hassas Dosya İfşası:
/etc/passwd, /etc/shadow, config dosyaları, .env dosyaları, SSH anahtarları, veritabanı kimlik bilgilerine erişim
- 💻Kaynak Kod İfşası:
Uygulama kaynak kodunu okuma, iş mantığını, API anahtarlarını ve ek zafiyetleri ortaya çıkarma
- 🔑Kimlik Bilgisi Hırsızlığı:
Veritabanı şifrelerini, API anahtarlarını, OAuth token'larını ve diğer kimlik doğrulama bilgilerini çalma
- 🔥Uzaktan Kod Çalıştırma:
Bazı durumlarda, log poisoning veya dosya yükleme ile birleştirerek RCE'ye yol açabilir
Path Traversal Nasıl Önlenir?
- ✓Input Whitelisting: Girdi Whitelist: Yalnızca önceden tanımlanmış dosya adlarına izin verin, asla rastgele yollara izin vermeyin
- ✓Path Normalization: Yol Normalizasyonu: Yolları çözümlemek ve izin verilen dizinler içinde olduklarını doğrulamak için realpath() veya benzeri kullanın
- ✓Avoid User Input in Paths: Yollarda Kullanıcı Girdisinden Kaçının: Dosya işlemlerinde asla kullanıcı girdisini doğrudan kullanmayın
- ✓File Permissions: Dosya İzinleri: En az ayrıcalık ilkesini kullanarak katı dosya sistemi izinleri uygulayın
- ✓Chroot Jails: Chroot Jail'leri: Dosya sistemi erişimini sınırlamak için chroot veya containerization kullanın
Path Traversal Nedir?
Path Traversal (Dizin Geçişi olarak da bilinir), saldırganların amaçlanan dizin dışındaki dosyalara ve dizinlere erişmesine olanak tanıyan bir web güvenlik zafiyetidir. ../ gibi dizilerle dosya yollarını manipüle ederek saldırganlar hassas dosyaları okuyabilir, yapılandırma verilerine erişebilir ve potansiyel olarak uzaktan kod çalıştırabilir.
Nasıl Çalışır?
Path Traversal saldırıları, uygulamalar kullanıcı girdisine dayalı olarak dosya yolları oluştururken yetersiz girdi doğrulamasını istismar eder. ../ (nokta-nokta-slash) gibi özel karakter dizilerini kullanarak saldırganlar dizin ağacında yukarı çıkabilir ve sistem dosyaları, yapılandırma dosyaları ve uygulama kaynak kodu dahil olmak üzere web kök dizini dışındaki dosyalara erişebilirler.
❌ SAVUNMASIZ KOD
// Vulnerable PHP code
<?php
$file = $_GET['file'];
$content = file_get_contents("/var/www/files/" . $file);
echo $content;
?>
// Attacker payload:
// ?file=../../../../etc/passwd
// ?file=../../../var/www/html/.env✅ GÜVENLİ KOD
// Secure PHP code
<?php
$allowed = ['doc1.txt', 'doc2.txt', 'readme.md'];
$file = $_GET['file'] ?? 'readme.md';
if (in_array($file, $allowed)) {
$content = file_get_contents("/var/www/files/" . $file);
echo $content;
} else {
die("Access denied");
}
?>Path Traversal Türleri
📂 Temel Traversal
Dizinlerde gezinmek için basit ../ dizileri
?file=../../../etc/passwd🎯 Mutlak Yollar
Tam yollar kullanarak doğrudan dosya erişimi
?file=/etc/passwd🔐 Encoding Bypass
Filtreleri atlatmak için URL/Unicode encoding
?file=..%2f..%2fetc%2fpasswd🔄 İç İçe Bypass
Filtreleri yenmek için karmaşık patternler
?file=....//....//etc/passwdNe Olabilir?
- 📄Hassas Dosya İfşası:
/etc/passwd, /etc/shadow, config dosyaları, .env dosyaları, SSH anahtarları, veritabanı kimlik bilgilerine erişim
- 💻Kaynak Kod İfşası:
Uygulama kaynak kodunu okuma, iş mantığını, API anahtarlarını ve ek zafiyetleri ortaya çıkarma
- 🔑Kimlik Bilgisi Hırsızlığı:
Veritabanı şifrelerini, API anahtarlarını, OAuth token'larını ve diğer kimlik doğrulama bilgilerini çalma
- 🔥Uzaktan Kod Çalıştırma:
Bazı durumlarda, log poisoning veya dosya yükleme ile birleştirerek RCE'ye yol açabilir
Path Traversal Nasıl Önlenir?
- ✓Girdi Whitelist: Yalnızca önceden tanımlanmış dosya adlarına izin verin, asla rastgele yollara izin vermeyin
- ✓Yol Normalizasyonu: Yolları çözümlemek ve izin verilen dizinler içinde olduklarını doğrulamak için realpath() veya benzeri kullanın
- ✓Yollarda Kullanıcı Girdisinden Kaçının: Dosya işlemlerinde asla kullanıcı girdisini doğrudan kullanmayın
- ✓Dosya İzinleri: En az ayrıcalık ilkesini kullanarak katı dosya sistemi izinleri uygulayın
- ✓Chroot Jail'leri: Dosya sistemi erişimini sınırlamak için chroot veya containerization kullanın