Blue Team CTF: Warzone 1

Sıradaki içerik:

Blue Team CTF: Warzone 1

File Upload DVWA (Low)

40 okunma — 16 Şubat 2024 12:00
avatar

Erkan Çekiç

  • e

    Eğlenmiş

  • e

    Eğlenmiş

  • e

    Şaşırmış

  • e

    Kızgın

  • e

    Üzgün

File Upload DVWA (Low) adlı bu writeup’ta Damn Vulnerable Web Application’ın odalarında biri olan File Upload odasının Low seviyesinin çözümü gösterilmektedir.

Bu alanda resim dosyası eklemek için bir panel oluşturulmuştur.

Dosya Ekleme Paneli

Herhangi bir kısıtlama olup olmadığını görmek için başka bir yapıya sahip dosya(örn. txt) yüklemeyi denemek bu ekranda akla gelen ilk işlem olmalıdır.

Farklı Uzantılı Dosya Yükleme Denemesi

Herhangi bir sorun çıkartmayıp başarılı bir şekilde yüklemesi, dosya yüklemede herhangi bir filtreleme işlemi kullanılmadığını gösterir.

Dosya Yüklemenin Başarılı Olması

Sırada zararlı bir php kodu yükleyip zafiyetten yararlanıp yararlanılmadığını görmek var. Bu aşamada test.php olarak bir payload oluşturulmuştur.

Payload

Bu payload system komutunu kullanarak, kullanıcı tarafından sağlanan komutları yürütmek için HTTP GET isteği üzerinden gelen ‘cmd‘ parametresini kullanır. Yani bir web sunucusunda çalıştırıldığında, URL üzerinden bir komut gönderilmesine izin verir ve bu komutları sunucuda çalıştırır.

<?php system($_GET[‘cmd’]);?>
PHP

Payload Dosyasının Yüklenmesi

Sistem dosyanın saklandığı yerin bağlantısını ekrana vermektedir.

Dosya Yüklemenin Başarılı Olması

Bu bağlantıya bir parametre daha ekleyip istek göndererek istenilen sonuca ulaşılmıştır.

Böylelikle sisteme zararlı bir php dosyası yüklenerek ve çalıştırılarak Dosya Yükleme Zafiyetinden faydalanılmıştır.

📋Kaynak Kod Analizi

Bu sistemin nasıl çalıştığına dair daha fazla bilgiye ulaşabileceğimiz bir yer olan Peki Nasıl? kısmına gelelim.

‘View Source’ a tıklayarak sayfanın PHP kaynak kodlarını incelemekle başlıyoruz.

<?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' ] );

    // Can we move the file to the upload folder?
    if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
        // No
        echo '<pre>Your image was not uploaded.</pre>';
    }
    else {
        // Yes!
        echo "<pre>{$target_path} succesfully uploaded!</pre>";
    }
}

?> 
PHP
  • 3. satır, HTTP POST isteğinin ‘Upload’ adında bir anahtarla gönderilip gönderilmediğini kontrol eder. Eğer bu POST isteği varsa, dosya yükleme işlemi gerçekleştirilmektedir.
  • 5. satır, dosyanın yükleneceği hedef dizin yolunu belirler. DVWA_WEB_PAGE_TO_ROOT bir sabit olarak tanımlanmış olmalıdır ve bu dizini web uygulamasının kök dizinine işaret etmelidir. Ardından, “hackable/uploads/” dizinini bu kök dizine ekleyebilirsiniz.
  • 6. satır, yüklenecek dosyanın adını belirler. Dosya adı, $_FILES dizisindeki ‘uploaded’ anahtarı altındaki ‘name’ özelliğinden alınır. Ardından bu ad, hedef dizin yoluna eklenir.
  • 9. satır, geçici olarak saklanan yüklenmiş dosyayı hedef dizine taşır. move_uploaded_file fonksiyonu, geçici dosyanın yolu ve hedef dosyanın yolu parametre olarak alır. Eğer dosya taşıma başarısız olursa, yani move_uploaded_file false döndürürse, dosya yükleme başarısız olmuştur ve kullanıcıya “Your image was not uploaded.” şeklinde bir hata mesajı gösterilir.
  • Dosya taşıma işlemi başarısız olduğunda ekrana echo ile “Your image was not uploaded.” hata mesajı yazdırılır.
  • Dosya taşıma işlemi başarılı olduğunda ekrana yine echo ile başarı mesajı yazdırılır. Mesaj içerisinde($target_path), yüklenen dosyanın hedef dizin yolunu içeren bir bilgi bulunur.

DVWA nın diğer writeup larına buraya tıklayarak ulaşabilirsiniz.

  • Site İçi Yorumlar

En az 10 karakter gerekli

Gönderdiğiniz yorum moderasyon ekibi tarafından incelendikten sonra yayınlanacaktır.