July 28, 2026
Path Traversal Zafiyeti: Mantığı ve PortSwigger Lab Çözümü
Bugün Path Traversal açığını inceleyip lablar ile pekiştireceğiz.

By Marvan Alawi
3 min read
- NOT: BU TEKNİKLERİ GERÇEK SİTELERDE KULLANMAK TEHLİKELİ VE YASAKTIR!!! BUNU SAKIN YAPMAYINIZ!!! TÜM İÇERİKLER EĞİTİM AMAÇLIDIR!!!
Path Traversal Nedir?
Path Traversal açığı, aynı zamanda Directory Traversal olarak da bilinir. Bu açık, sunucuda tutulan dosyalara izinsiz bir şekilde erişmemizi sağlar. Yani yapılandırma dosyaları, API anahtarlarının bulunduğu dosyalar gibi erişmememiz gereken dosyalara ulaşabilir ve bu zafiyeti sömürebiliriz.
Örnek verelim. Diyelim ki bir blog uygulamasında bir görsel var ve görselin yolu şu şekilde:
<img src="/fotoGetir?dosyaAdi=blog_foto.png"><img src="/fotoGetir?dosyaAdi=blog_foto.png">Bu tür görseller genellikle sunucuda www/images klasöründe tutulur. Eğer hedef uygulama, bu dosya yolunu manipüle etmemize karşı bir önlem almadıysa erişmememiz gereken klasör ve dosyalara ulaşabiliriz.
Bildiğiniz üzere dosya sistemlerinde .. işareti bizi bir üst dizine çıkarır. Yani:
www/images/.. bize www dizinini gösterir.
Diyelim ki hedef sunucunun Linux işletim sistemine sahip olduğunu biliyoruz. Bu durumda /etc/passwd dosyası bizim için oldukça değerli olabilir 🤠. Bu dosya varsayılan olarak herkes tarafından okunabilir ve sistemdeki kullanıcı hesaplarını listeler; bu yüzden Path Traversal denemelerinde klasik bir hedeftir.
Bu dosyaya erişebilmek için mantıken images dizininden yeterince geriye gidip ardından etc/passwd yoluna girmemiz gerekir:
Yukarıdaki örnek payload'da yaptığımız tam olarak budur.
PortSwigger Lab Çözümü
Lab: File path traversal, simple case
1. Adım — Laba Giriş
Labımıza giriş yapıyoruz ve istediğimiz bir ürünün sayfasına giriyoruz.
2. Adım — Burp Suite
Burp Suite'i açıp Intercept ayarını aktif hale getirelim.
Intercept'i açtıktan sonra görsele sağ tıklayıp yeni sekmede açalım.
Burp Suite üzerine düşen istek bu şekilde olacaktır:
Gördüğümüz istek tam olarak bu! Bu isteği CTRL+R ile Repeater'a göndermeliyiz ki üzerinde denemeler yapabilelim.
Aşağıdaki görselde de gördüğünüz gibi payload'ımızı yüklüyoruz ve herhangi bir koruma olmadan çalışıyor. BİNGO!
Tabii ki bu lab, en basit lab sayılabilir. Bu açığın birçok korunma yöntemi ve o korunma yöntemlerini aşma (bypass) tekniği var. Bu yazıda sadece açığın mantığını basit bir şekilde anlatmak ve bir lab çalışmasıyla bu mantığı pekiştirmek istedim. Daha detaylı Path Traversal içeriklerini ve yayınlayacağım diğer lab yazılarını okumak için beni takip edebilirsiniz.
Geliştirici Bakış Açısından Korunma Yöntemleri
Peki bir geliştirici olarak bu açıktan nasıl korunuruz?
1. Beyaz Liste (Allowlist) Kullanın
Kullanıcının erişebileceği dosyaları önceden belirleyin. Gelen girdi bu listede yoksa isteği reddedin.
- Yöntem: Kullanıcıdan dosya adı yerine sayısal bir ID veya anahtar kelime alın.
- Örnek:
dosya?id=1→ Sunucu bunu arka plandarapor.pdfile eşleştirir.
2. Sadece Dosya Adını Alın (Basename)
Kullanıcının gönderdiği yoldaki dizin değiştirme karakterlerini (../) yok sayıp yalnızca dosya adını ayıklayın.
- PHP:
basename($user_input) - Node.js:
path.basename(userInput) - Python:
os.path.basename(userInput)
3. Mutlak Yolu Doğrulayın (Path Canonicalization)
Sistemde oluşan nihai dosya yolunu çözün ve bu yolun, izin verdiğiniz kök dizinin (root directory) içinde kalıp kalmadığını kontrol edin.
- Java:
file.getCanonicalPath()sonucundastartsWith("/safe/dir/")kontrolü yapın. - PHP:
realpath($path)sonucunun ana dizininizle başlayıp başlamadığına bakın. - Node.js:
path.resolve(baseDir, userInput)ile yolu sabitleyin.
4. Girdi Doğrulama ve Temizleme (Sanitization)
Kullanıcı girdisini sıkı bir şekilde kontrol edin.
- Yalnızca izin verilen karakterleri (örneğin sadece harf ve rakam) kabul eden düzenli ifadeler (Regex) kullanın.
- ../, ..,
%2e%2e%2fgibi girdileri engelleyin. Ancak yalnızca filtrelemeye güvenmeyin; bu tür kontroller bypass edilebilir.
5. Sunucu ve İşletim Sistemi İzinlerini Kısıtlayın
Uygulamanızın çalıştığı işletim sistemi kullanıcısının yetkilerini minimumda tutun (En Az Yetki İlkesi).
- Web sunucusu kullanıcısı (örn.
www-data),/etc/passwdveya sistem logları gibi hassas dosyalara okuma yetkisine sahip olmamalıdır. - Uygulamayı mümkünse bir chroot jail, Docker konteyneri veya izole bir sandbox içinde çalıştırın.
Kapanış
Path Traversal, basit görünmesine rağmen ihmal edildiğinde ciddi sonuçlar doğurabilen bir açıktır. Bu yazıda temel mantığı ve en basit senaryonun çözümünü ele aldık. Bir sonraki yazıda bu açığın çeşitli korunma yöntemlerini ve bunların nasıl bypass edilebileceğini derinlemesine inceleyeceğiz. Takipte kalın!