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. 27.08.2018 tarihi ve 01:12:18 saatinde ise güncellenmiştir.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 3107
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.
deneme
shell.php yi shell.png yapıp upload edip çalıştırırsa?
Bu yorum 18.11.2016 tarihinde, saat 15:05:55'de gönderilmiştir.
Hasan Fatih ŞİMŞEK
Merhaba diğer arkadaş, dediğin işlem olmaz. Doğru, shell'i sadece png uzantısını kullanarak sunucuya upload'layabilirsin. Ancak tarayıcıda o shell'i görüntülemeye çalıştığında shell dosyası resim uzantılı olacağı için tarayıcı gelen dosyayı resim olarak yorumlayıp ona göre ekrana yansıtacaktır. Bu nedenle de shell'in işlevi tamamen geçersiz olup bir yığın karmaşık karakterler dizisi olarak ekranına yansıyacaktır. Fakat şu da var: Yolladığın shell.png dosyasını tarayıcıdan url'sini girerek talep ettiğinde eğer sunucudan gelen yanıt paketinin Content-Type başlığı örn; img/png yerine application/x-php olursa bu durumda resim dosyası görünümlü shell.png dosyanı olması gerektiği şekilde görüntüleyebilirsin ve sızma sürecini ilerletebilirsin. Ancak bu senaryo için hedef web sunucusundaki yanıt başlığının (Content-Type başlığının manipüle edilmiş olması lazımdır ki bu işlem için yapabileceğin tek şey sisteme sızmaktır. Sızmış olsan bile konfigurasyon dosyalarını değiştirmen gerekeceğinden normal şartlarda en yüksek haklara sahip olman gerekir. O noktaya kadar vardıysam shell'e niye ihtiyaç duyayım diyebilirsin. Sunucuya belki sızmış olabilirsin ama sonradan sistemci durumun farkına varıp giriş yollarını kapatabilir. Bu durumda eğer sen web shell'ini sunucuda bırakırsan o yolla sürekli sisteme sızabilirsin.
Bu yorum 27.08.2018 tarihinde, saat 09:09:20'de gönderilmiştir.
Ellit Alderson
Kali linux kullanıcıları msfvenom kullanarak oluşturdukları .php dosyasını sonuna .jpg uzantısı ile upload edebilirler. Yükledikleri dosya .php.jpg şeklinde kalsa bile üzerine tıklandığı zaman çalışacak ve meterpreter session başlamış olacaktır.
Bu yorum 23.03.2020 tarihinde, saat 19:08:30'de gönderilmiştir.
Halis
Öncelikle emeğiniz için teşekkür ederim. Şu şekilde bu güvenlik protokolü de zafiyete uğratılabilir: 1) Weevely aracı ile "shell.php" oluşturulur. 2) Burpsuite ile type "image/jpeg" ve name "shell.php.jpg" değiştirilir. 3) Terminal'den Weevely aracı ile upload URL girilerek shell başlatılabilir. Komutlar: 1) Weevely generate 111111 shell.php 2) Burp suite.. 3) Weevely http://...../dvwa/hackable/uploads/shell.php.jpg 111111
Bu yorum 14.06.2020 tarihinde, saat 17:24:42'de gönderilmiştir.
Hasan Fatih ŞİMŞEK
Merhaba Ellit, dediğin yöntem çalışıyor mu test etmedim ve araştırmadım. Fakat diğer arkadaşlar test etmek isterlerse kali linux'da msfvenom aracının nasıl kullanılabileceğini şu adresteki (https://www.includekarabuk.com/kategoriler/cesitliSizmaTeknikleri/Metasploit-Detay-Bilgiler.php) "Uyarı" başlığı ve "Ekstra" başlığından, ayrıca şu adresten (https://www.includekarabuk.com/kategoriler/cesitliSizmaTeknikleri/Metasploit-Detay-Bilgiler-Ozet.php) öğrenebilirler. Bu adreslerdeki kaynakları anlayarak msfvenom ile meterpreter payload'lu oluşturulmuş .jpg uzantılı shell dosyası oluşturulabilir ve upload'lanacak bu .jpg uzantılı shell dosyası web tarayıcıda görüntülendiğinde metasploit'te exploit/multi/handler ile dinleme modundayken metasploit komut satırına ters kabuk bağlantısı geliyor mu kontrol edilebilir.
Bu yorum 02.02.2022 tarihinde, saat 14:19:23'de gönderilmiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :