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.
Dersin HedefiLFI ve RFI saldırılarına karşı daha sağlam ne gibi bir önlem alınabileceğini keşfedin.LFI ve RFI'ya Karşı ÖnlemGeç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); ?> |
|||||
Bu yazı 17.01.2016 tarihinde, saat 04:27:42'de yazılmıştır. 27.03.2016 tarihi ve 17:40:09 saatinde ise güncellenmiştir. | |||||
|
|||||
Yorumlar |
|||||
Henüz yorum girilmemiştir. | |||||
Yorum Ekle | |||||