Yavuzlar
Ana sayfaTelegram
  • Yavuzlar
  • VulnLab
  • CodinLab
  • 📚EĞİTİM
    • PHP
      • XAMPP kurulumu
      • VS Code Kurulum
      • 1.0 PHP Nedir
      • 1.1 Dosya Oluşturma
      • 1.2 Syntax (Yazım Kuralları)
      • 1.3 PHP'de Echo ve Print
      • 1.4 PHP'deki yorumlar
      • 1.5 PHP Değişkenleri
      • 1.6 Operatörler (Operators)
      • 1.7 Veri Türünü Alma
      • 1.8 PHP'de String
      • 1.9 PHP'de Sabitler
      • 2.0 PHP'de If Else Elseif
      • 2.1 Switch Case
      • 2.2 PHP'de Döngüler
      • 2.3 PHP'de Diziler (Arrays)
      • 2.4 PHP'de Süper Global Değişkenleri
      • 2.5 PHP'de Cookie (Çerez) Ve Session (Oturum) Yöntemleri
      • 2.6 Form işlemleri
    • C++
      • 1.0 Temeller
        • 1.1 Dosya Oluşturma
        • 1.2 Syntax (Yazım Kuralları)
        • 1.3 Yorum Satırları
        • 1.4 C++ Değişkenleri
          • 1.4.1 Değişken Türleri
        • 1.5 Operatörler (Operators)
        • 1.6 Namespace
        • 1.7 Kullanıcı Girdisi (User Input)
        • 1.8 C++ Stringleri (C++ Strings)
        • 1.9 Matematik (Math) Fonksiyonları
        • 1.10 Booleans
        • 1.11 If Else
        • 1.12 Switch
        • 1.13 While Döngüsü
          • 1.13.1 Do While Döngüsü
        • 1.14 For Döngüsü
        • 1.15 Break/Continue
        • 1.16 Diziler
        • 1.17 Structures
        • 1.18 Enums
        • 1.19 References
        • 1.20 Pointers
      • 2.0 Fonksiyonlar
      • 3.0 Sınıflar
        • 3.1 OOP
        • 3.2 Sınıflar ve Objeler
        • 3.3 Sınıf Methodları
        • 3.4 Yapıcılar (Constructors)
        • 3.5 Erişim Belirleyicileri (Access Specifiers)
        • 3.6 Kapsülleme (Encapsulation)
        • 3.7 Inheritance
        • 3.8 Polimorfizm (Polymorphism)
        • 3.9 Dosyalar (Files)
        • 3.10 İstisnalar (Exceptions)
        • 3.11 Tarih ve Zaman (Date and Time)
      • 4.0 Veri Yapıları (Data Structures)
        • 4.1 Veri Yapıları ve STL
        • 4.2 Vektörler (Vectors)
        • 4.3 Listeler (Lists)
        • 4.4 Yığınlar (Stacks)
        • 4.5 Kuyruklar (Queues)
        • 4.6 Deque (Çift Uçlu Kuyruk)
        • 4.7 Küme (Set)
        • 4.8 Maps
        • 4.9 Iterator
        • 4.10 Algoritmalar
  • 🛠️ARAÇLAR
    • Aircrack-ng
    • Airgeddon
    • Arjun
    • BeEF
    • Bettercap
    • Docker
    • Gelişmiş Wireshark Kullanımı (Advanced Wireshark Usage)
    • Google Dorks
    • Hping3
    • John the Ripper
    • Metasploit Framework
    • Netcat
    • Nmap
    • OSINT Framework
    • PEASS-ng
    • Sublist3r
    • XSS Scanner
    • Wireshark
    • ZAP
    • HYDRA
  • 🖥️İŞLETİM SİSTEMLERİ
    • Linux101
    • MBR
  • 🔑KRİPTOLOJİ
    • Dijital Sertifika ve İmzalar
    • Sezar Şifrelemesi
    • Steganografi
    • Veri Şifreleme (Data Encryption)
  • 🔏Network
    • Domain Name Server (DNS)
    • Firewall Nedir? Nasıl Çalışır ?
    • Ortadaki Adam Saldırısı (Man In The Middle Attack)
    • OSI Modeli
    • Sanal Özel Ağlar (VPN)
    • World Wide Web (WWW)
  • 🔐PRIVILEGED
    • Docker Escape
  • 📨Protokoller
    • ARP
    • DHCP
    • FTP
    • HTTP/HTTPS
    • SSH
    • TCP/IP
    • UDP
    • Wİ-Fİ Güvenlik Protokolleri (WEP/WPA/WPA2/WPA3)
  • 💻SİBER TEHDİT İSTİHBARATI
    • Gelişmiş Siber Tehdit İstihbaratı Nedir?
  • 🔒WEB GÜVENLİĞİ
    • 403 ByPass
    • API Güvenliği (API Security)
    • Broken Access Control
    • Bulut Güvenliği (Cloud Security)
    • Command Injection
    • Cross Origin Resource Sharing
    • Cross Site Request Forgery (CSRF)
    • Cyber Kill Chain
    • DDoS Saldırıları
    • File Upload Zafiyeti Nedir?
    • HTTP Request Smuggling
    • Insecure Direct Object Reference (IDOR)
    • Incident Response
    • Local File Inclusion (LFI)
    • NoSQL Injection
    • Pentest 101
    • Race Condition
    • Server Side Request Forgery (SSRF)
    • Server Side Template Injection (SSTI)
    • Spring4Shell
    • Two Factor Authentication Bypass
    • XML External Entity Attack (XEE)
  • 🤖YAPAY ZEKA
    • ChatGPT for Hacking
    • Siber Güvenlik ve Yapay Zeka
    • Yapay Zeka ile Sahte Fotoğraf Tespiti
  • 🌐YAZILIM
    • Düzenli İfadeler (Regular Expressions)
    • Elasticsearch Nedir?
    • Front-end Teknolojileri
    • Golang'da Arayüzler (Interfaces)
    • Go'da Concurrency ve Uygulamaları
    • Güvenli Kodlama (Secure Coding)
    • Java Overloading vs Overriding
    • JSON Web Token (JWT)
    • Material-UI
    • NextJS Nedir?
    • ReactJS Kancalar (Hooks)
    • ReactJS Nedir?
    • Redux Toolkit
    • SOLID Yazılım Geliştirme Prensipleri
    • SQL 101
    • UI / UX Nedir?
    • Veri Taşıma Nedir? (Database Migration)
    • Versiyon Kontrol Sistemleri ve GIT
  • 🔷DİĞER
    • Bug Bounty (Hata Ödülü) Nedir?
    • Popüler Yazılımların Kurulumları
      • Ubuntu Server 24.04 LTS Kurulumu
      • Ubuntu için Güncel Docker Engine Kurlumu
    • Güvenlik Operasyonları Merkezi Nedir?
    • Honeypot (Bal Küpü)
    • IoT Güvenliği Nedir?
    • ShellShock Exploit
    • Yük Dengeleyici (Load Balancer) Nedir?
Powered by GitBook
On this page
  • Local File Inclusion (LFI) Nedir?
  • LFI Zafiyetine Sebep Olabilecek Kodlar:
  • Hatalı Kod Örneği 1:
  • Zafiyetin Tespiti:
  • Zafiyetin Çıktısı:
  • Hatalı Kod Örneği 2:
  • Zafiyetin Tespiti:
  • Zafiyetin Çıktısı:
  • Hatalı Kod Örneği 3:
  • Zafiyetin Tespiti:
  • php://filter Tekniği İle Sayfa Kaynak Kodlarını Öğrenme:
  • Zafiyetin Çıktısı:
  • Lfı Zafiyetinden Korunma Yöntemleri:
  • Örnek Bir Whitelist İle Korunma Kodu:
  • Ek Kaynaklar:

Was this helpful?

  1. WEB GÜVENLİĞİ

Local File Inclusion (LFI)

Local File Inclusion (LFI) Nedir?

Local File Inclusion (LFI), bir web uygulamasındaki güvenlik açıklıklarından biridir. Bu açıklık, kullanıcının girişlerini kontrol etmeden veya doğru bir şekilde denetlemeden web uygulamasının dosya sistemi üzerindeki yerel dosyalara erişmesine izin verir. Genellikle URL parametreleri veya kullanıcı girişleri aracılığıyla gerçekleşir.

Bir saldırgan, LFI açığı kullanarak web sunucusunun dosya sisteminde gezinip hassas bilgilere erişebilir veya kötü amaçlı kodları yürütebilir. Bu nedenle geliştiriciler ve sistem yöneticileri, web uygulamalarını güvenli tutmak ve LFI gibi güvenlik açıklarını önlemek için gerekli önlemleri almalıdır.

LFI Zafiyetine Sebep Olabilecek Kodlar:

include: Belirtilen dosyayı dahil eder. Eğer dosya bulunamazsa sadece bir uyarı (warning) verir ve işleme devam eder.

include_once: Belirtilen dosyayı yalnızca bir kez dahil eder. Eğer dosya önceden dahil edilmişse tekrar dahil etmez.

require: include gibi dosyayı dahil eder ancak dosya bulunamazsa hata (fatal error) verir ve işlemi durdurur.

require_once: Belirtilen dosyayı yalnızca bir kez dahil eder. Eğer dosya önceden dahil edilmişse tekrar dahil etmez. require gibi, dosya bulunamazsa hata (fatal error) verir ve işlemi durdurur.

Hatalı Kod Örneği 1:

    <a href="?page=anasayfa.php">Ana Sayfa</a>
    <a href="?page=hakkinda.php">Hakkında</a>
    <a href="?page=iletisim.php">İletişim</a><br>
    <?php
    if (isset($_GET['page'])) {
        $page = $_GET['page'];
        include($page);
    }
    ?>

Bu kodda LFI açığı mevcuttur. Çünkü kullanıcı tarafından kontrol edilebilen $_GET['page'] parametresi doğrudan include ifadesinde kullanılıyor. Bu durum kötü niyetli kullanıcıların URL'deki page parametresine geçerli olmayan veya zararlı bir dosya yolu sağlayarak web uygulamasının dosya sistemi üzerindeki diğer dosyaları dahil etmelerine olanak tanır.

Zafiyetin Tespiti:

Saldırgan, örneğin http://localhost/?page=/etc/passwd gibi bir URL ile bu uygulamayı kullanarak sistem dosyalarına erişebilir. /etc/passwd yazarak erişilemeyen durumlarda

‘http://localhost/?page=../../../../../../etc/passwd’ ile dizin atlayarak sistem dosyalarına erişilebilir.

Zafiyetin Çıktısı:

Hatalı Kod Örneği 2:

    <a href="?page=anasayfa.php">Ana Sayfa</a>
    <a href="?page=hakkinda.php">Hakkında</a>
    <a href="?page=iletisim.php">İletişim</a><br>
    if (isset($_GET['page'])) {
        $page = $_GET['page'];
        $page = str_replace(array("../", "..\""), "", $page);
        include($page);
    }

Bu kod, kullanıcı tarafından sağlanan $page değişkenindeki ../ ve ..\" dizin yatay geçiş girişimlerini temizlemeye çalışıyor.

str_replace fonksiyonu, bir dizede belirtilen alt dizeleri başka bir alt dize ile değiştirir. Bu durumda, ../ ve ..\" ifadeleri boş dize ile ("") değiştiriliyor.

Zafiyetin Tespiti:

Saldırgan bu sefer ‘http://localhost/?page=....//....//....//....//....//....//etc/passwd’ şekilde dizin atlayarak sistem dosyalarına erişilebilir.

Zafiyetin Çıktısı:

Hatalı Kod Örneği 3:

    <a href="?page=anasayfa">Ana Sayfa</a>
    <a href="?page=hakkinda">Hakkında</a>
    <a href="?page=iletisim">İletişim</a><br>
    <?php
    if (isset($_GET['page'])) {
        $page = $_GET['page'];
        include($page.'.php');
    }
    ?>

Bu kod “.php” uzantısını sayfa adının sonuna sonradan ekler. page=/etc/passwd yazdığında sonuna “.php” eklediğinde /etc/passwd.php olacağı için kod hata verecektir ve passwd dosyası görüntülenmeyecektir.

Zafiyetin Tespiti:

Saldırgan http://localhost/?page=../../../../../../etc/passwd%00 seklinde sona null bayt karakteri koyarak sistem dosyalarına erişebilir.

İşletim sistemleri ve çoğu programlama dilinde, bir null bayt karakteri ile karşılaşıldığında bu genellikle dizgenin sonu olarak kabul edilir. Null bayt, dizgenin sonunu belirtir ve bu nedenle bir dizge içinde null baytın bulunması o noktadan sonraki karakterlerin görmezden gelinmesine neden olabilir.

Eğer bir kullanıcı /etc/passwd%00.php gibi bir dosya adı sağlarsa, yazılım bu ismi /etc/passwd olarak değerlendirebilir ve güvenlik önlemlerini atlayabilir.

php://filter Tekniği İle Sayfa Kaynak Kodlarını Öğrenme:

  • http://localhost/projeler/lfi/?page=php://filter/convert.base64-encode/resource=index.php

php://filter tekniği ile sayfa kaynak kodları öğrenilebilir. Yukarıdaki örnekte görüldüğü gibi index.php sayfasının kaynak kodlarını base64 e encode edilmiş bir şekilde öğrenebiliriz.

Zafiyetin Çıktısı:

Yukarıdaki kodu base64 decodera attığımızda index.php sayfasının kaynak kodunu görebiliriz:

Base64 kodunun decode edilmiş hali:

Lfı Zafiyetinden Korunma Yöntemleri:

  • Beyaz Liste (Whitelist) Kullanımı: Dosya adlarını kabul edilebilir bir listede sınırlamak, istemcinin sadece belirli dosyaları dahil etmesine izin verir. Bu, LFI saldırılarını önler.

  • Kullanıcı Girişlerinin Doğru İşlenmesi: Kullanıcı tarafından sağlanan girişlerin doğru bir şekilde denetlenmesi ve işlenmesi önemlidir. Özellikle dosya yolları gibi kritik verileri doğrudan kullanıcı girişlerinden almak yerine, beyaz liste veya diğer güvenlik kontrolleri ile geçerli dosya adlarını kontrol etmek daha güvenlidir.

  • Dosya Yollarının Sabitlenmesi: Dosya yollarını kullanıcı girişlerinden bağımsız olarak sabitlemek, istemcinin belirli bir dizin dışındaki dosyaları dahil etmesini engeller. Örneğin, dahil edilecek dosyaların tam yolunu belirleyebilirsiniz.

  • PHP Konfigürasyonu Ayarları: Güvenlik açıklarını önlemek için PHP'nin open_basedir ayarı gibi güvenlik önlemleri etkinleştirilebilir. Bu ayar, PHP'nin belirli bir dizin dışındaki dosyaları erişmesini engeller.

  • Dosya Erişim Kontrolleri: Dosyaların erişim izinlerini doğru şekilde ayarlamak, yetkisiz erişimleri önler ve LFI saldırılarını sınırlar. İstemcinin erişmesine izin verilen dosyaların ve dizinlerin sadece gerekli izinlere sahip olduğundan emin olun.

Örnek Bir Whitelist İle Korunma Kodu:

    <a href="?page=anasayfa.php">Ana Sayfa</a>
    <a href="?page=hakkinda.php">Hakkında</a>
    <a href="?page=iletisim.php">İletişim</a><br>
    <?php
    $whitelist = array("anasayfa.php", "hakkinda.php", "iletisim.php");
    $page = $_GET['page'];
    if (in_array($page, $whitelist)) {
        include($page);
    } else {
        echo "Dosya Bulunamadı!!!";
    }
    ?>

Ek Kaynaklar:

PreviousIncident ResponseNextNoSQL Injection

Last updated 4 months ago

Was this helpful?

NOT: Null Bayt zafiyeti PHP sürümü ile kapatılmıştır. Daha önceki sürümlerde çalışmaktadır.

5.3.4
🔒
eneskrkmz - OverviewGitHub
Bu yazı M. Enes Korkmaz tarafından hazırlanmıştır.
Logo
LFI, RFI Güvenlik Zafiyetleri Bağlamında PHP Stream Wrapper'larıNetsparker - Web Uygulaması Güvenlik Tarayıcısı
Page cover image
Logo