Ders 10 - File Inclusion (High Level)
Bu yazıda güvenlik düzeyi High seviyesine yükseltilmiş DVWA'ya karşı LFI, RFI saldırılarına yapılabilecek güvenlik önlemleri incelenecektir.

Konuya giriş yapmadan önce bu yazının dahil olduğu dvwa eğitim serisindeki tüm makalelere şu adresten


bu yazının ilintili olduğu dvwa eğitim serisindeki diğer makalelere ise şu adreslerden


erişebilirsiniz.

Dersin Hedefi

LFI ve RFI saldırılarına karşı daha sağlam ne gibi bir önlem alınabileceğini ve nasıl atlatılabileceğini keşfedin.

LFI ve RFI'ya Karşı High Seviye Önlem

Geçen derste LFI ve RFI saldırılarına karşı bir güvenlik önleminden ve bu güvenlik önleminin nasıl aşılabileceğinden bahsetmiştik. Bu derste ise güvenliği bir tık daha yukarı çıkaracağız. Öncelikle Medium Level'da uygulanan güvenlik önlemine bir göz atalım:

Medium Level:
<?php 

// The page we wish to display 
$file = $_GET[ 'page' ]; 

// Input validation 
$file = str_replace( array( "http://", "https://" ), "", $file ); 
$file = str_replace( array( "../", "..\"" ), "", $file ); 

// Include the specified page
include($file);

?>


Medium Level'in güvenliği 7. ve 8. satırdaki iki str_replace() fonksiyonu ile sağlanmaktaydı. Fakat geçen derste gösterilen teknikte olduğu gibi bu fonksiyonlar (önlemler) aşılabiliyordu. Şimdi High Level'da bu sorun nasıl giderilmiş bir bakalım:

High Level:
<?php 

// The page we wish to display 
$file = $_GET[ 'page' ]; 

// Input validation 
if( !fnmatch( "file*", $file ) && $file != "include.php" ) { 
    // This isn't the page we want! 
    echo "ERROR: File not found!"; 
    exit; 
} 

// Include the specified page
include($file);

?>


Görüldüğü üzere File Inclusion'ın ilk dersinde bahsedilen page parametresinin alabileceği dosya adları beyaz liste diye tabir edebileceğimiz bir metotla kontrol altına alınmış. High level'ın 7. satırına göre page parametresi sadece include.php dosya adını alabilir ya da file ismiyle başlayan bir php dosyası alabilir. Bunların dışında bir dosya ismi alırsa bu durumda 7. satırdaki if koşulunun içerisinde girilir ve sayfa bulunamadı hatası döndürülür. Eğer if'in içine girilmezse, yani dosya ismi file ismiyle ile başlayan bir php dosyasıysa ya da include.php ise bu durumda o sayfa include() fonksiyonu ile mevcut sayfaya dahil edilir.

Görüldüğü üzere güvenlik çemberi sıkı bir şekilde daraltılmış. Yani kabul edilecek dosya isimleri için bir kural belirlenmiş. Bu güvenlik önlemi şu şartlarda aşılacak gibi görünmüyor. Fakat bu güvenlik önlemi şöyle bir açığa sahiptir: Eğer hedef web sitesinde file ile başlayan, fakat site ziyaretçisinin erişmesi istenilmeyen bir dosya varsa o dosyanın okunmasına High Level güvenlik önlemi engelleyemez. Çünkü tanımlanan şarta göre file ismiyle başlayan tüm php dosyaları okunabilirdir. Bu sıkıntıyı düzeltmenin yolu beyaz listeye hard code'lama ile kabul edilecek dosya isimlerini yazmaktır. Yani tek tek hangi dosyaları kabul edeceğimizi belirtmek belki en uğraştırıcı, fakat en sağlam güvenlik önlemidir. Aşağıda işte o sağlam güvenlik önleminin bir örneğini görmektesiniz:

Impossible:
<?php 

// The page we wish to display 
$file = $_GET[ 'page' ]; 

// Only allow include.php or file{1..3}.php 
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
    // This isn't the page we want! 
    echo "ERROR: File not found!"; 
    exit; 
} 

// Include the specified page
include($file);

?> 

LFI ve RFI'ya Karşı High Seviye Önlemi Atlatma

High güvenlik seviyesinde "file" dosya ismiyle başlayan tüm dosyalar okunabilir kuralı vardı. Şimdi arayüzde sunulmayan gizli bir file ismiyle başlayan dosyaya dir fuzzing yaparak tespit edelim ve erişelim.

Gereksinimler

* Saldırgan : Kali Linux 2022.1 VM
* Saldırgan Araç : Burpsuite Community v2025.1.5
* Hedef Web Uygulama : DVWA ve WebGoat (Ubuntu 14.04 LTS) VM

1. Saldırgan burpsuite aracını başlatır.

Kali Linux Terminal:

BurpSuiteCommunity




2. Burpsuite -> Settings -> Burp's Browser seçeneğindeki "Allow Burp's Browser to run without sandbox" seçeneğini tick'le.

Not: Eğer burpsuite'i root yetkisinde başlatmadıysan bu 2nci adıma gerek yoktur ve 3ncü adıma atlayabilirsin.







3. Burpsuite -> Proxy -> Intercept -> Intercept Off yap ve burp'ün web tarayıcısını başlat.





4. DVWA web uygulamasını ziyaret et ve güvenlik seviyesini high'a çekip file inclusion ders sayfasına geç.





5. Burpsuite -> Proxy -> Intercept -> Intercept is On yap.



6. Örneğin file1.php sayfasına ziyaret edilir ve istek yakalanır.





7. İsteğe sağ tık yapılıp intruder a gönderilir.



8. file1.php'nin 1 rakamı dolar butonu ile işaretlenir.



9. Payload type olarak brute forcer, charset olarak 0123456789 belirlenir ve saldırı başlatılır.



10. Saldırı sonuçlandığında "Content Length" sütununa tıklanarak hangi file'nın sonuna eklenen hangi sayı denemesinin daha farklı bir yanıt döndürdüğü tespit edilebilir.



11. Sonuçlar incelendiğinde 4 rakamı denemesi diğer denemelere nazaran daha fazla yanıt döndürmüş. O halde file4.php 'ye gidelim ve kontrol edelim nasıl bir yanıt geliyormuş.

Not: Burpsuite -> Proxy -> Intercept -> Intercep is Off yapmayı unutmayın.



Görüldüğü gibi file4.php diye bir dosya varmış ve içeriği de ekrandaki gibi.

High güvenlik seviyesinde

file*.php

kriterine göre denetleme yapmak görüldüğü gibi açık bir nokta bırakıyor ve paylaşılmayan diğer file'la başlayan dosyaların görüntülenmesine imkan veriyor. Sonuç olarak "dir fuzzing" saldırısı ile arayüzde sunulmayan bir dosyayı high seviyedeki bu açıklık yoluyla tespit etmiş olduk. Bu nedenle geliştiriciler impossible'daki gibi beyaz liste güvenlik önlemi uygulamalıdırlar.
Bu yazı 17.01.2016 tarihinde, saat 04:27:42'de yazılmıştır. 25.03.2025 tarihi ve 00:22:01 saatinde ise güncellenmiştir.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 3436
Yorumlar
Henüz yorum girilmemiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :