Ders 13 - File Upload (High Level)
Bu yazıda güvenlik düzeyi High seviyesine yükseltilmiş DVWA'da shell tehditine karşı ne gibi bir önlem alındığına ve bu önlemin aşılıp aşılamayacağına değinilecektir.

Dersin Hedefi

Shell'e karşı nasıl etkili bir güvenlik temin edilebileceğini keşfedin.

Shell'e Karşı Önlem

File Upload bölümünün ilk dersinde shell upload ederek bir siteyi nasıl hack'leyebileceğimizden bahsetmiştik. İkinci derste ise shell tehditine karşı alınmış bir güvenlik önleminden ve bu güvenlik önleminin nasıl aşılabileceğinden bahsetmiştik. Bu derste ise önceki derse nazaran daha etkili bir güvenlik önleminden bahsedeceğiz. DVWA'da güvenlik seviyesi High Level iken kullanılan kaynak kod şudur:

High Level:
<?php 

if( isset( $_POST[ 'Upload' ] ) ) { 
    // Where are we going to be writing to? 
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; 
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); 

    // File information 
    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ]; 
    $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1); 
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; 
    $uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ]; 

    // Is it an image? 
    if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
        ( $uploaded_size < 100000 ) && 
        getimagesize( $uploaded_tmp ) ) { 

        // Can we move the file to the upload folder? 
        if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) { 
            // No 
            echo '
Your image was not uploaded.
'; } else { // Yes! echo "
{$target_path} succesfully uploaded!
"; } } else { // Invalid file echo '
Your image was not uploaded. We can only accept JPEG or PNG images.
'; } } ?>


Yukarıdaki kullanılan kaynak kodun 10. satırına dikkat ederseniz kullanıcının yükleme teşebbüsünde bulunduğu dosyanın ismi ele alınıyor. Dosya isminde barınan ilk noktadan sonraki tüm karakterler $uploaded_ext değişkenine atanıyor. Yani bu yapılan işlem dosyanın uzantısını öğrenmek içindir. Ardından bu değişken 15. satırda sınanıyor ve eğer jpg, jpeg, png değerlerinden birine sahipse dosyanın upload'lanmasına izin veriliyor. Eğer jpg, jpeg ya da png değerlerine sahip değilse dosyanın upload'lanması else koşuluna girilerek engelleniyor.

Görüldüğü üzere bu sefer öncekine nazaran daha sıkı bir güvenlik prosedürü uygulanmış. Fikir cimnastiği yapmak adına ilk derste oluşturulan shell.php dosyasını şöyle adlandırıp göndermeyi deneyebiliriz:

shell.png.php

Ancak sunucu buna kanmaz. Çünkü 10. satırda yer alan fonksiyonların kullanımına göre ilk noktadan sonraki tüm karakterler uzantı olarak kabul ediliyor. Dolayısıyla sunucu dosyayı upload'lamak için png.php değerini sınayacaktır. E haliyle bu değer ne png ne jpeg ne de jpg olduğu için dosya upload'lanamayacaktır. Şu şartlar altında bu güvenlik önlemi aşılamayacaktır.
Bu yazı 17.01.2016 tarihinde, saat 07:42:06'de yazılmıştır.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 1145
Yorumlar
Anthony
Hello Hasan, I'm currently working on this level I don't understand turkish but it appears your solution is "shell.png.php" ? It doesn't work for me Can you explain ? Thanks
Bu yorum 26.07.2016 tarihinde, saat 16:19:53'de gönderilmiştir.
Hasan Fatih ŞİMŞEK
This article tells you that you cannot be successful by using extension spoofing. That is why the source code takes precautions for coming file's extension strictly.
Bu yorum 31.07.2016 tarihinde, saat 10:40:14'de gönderilmiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :