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.
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.
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.
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.
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’]);?>
PHPSistem dosyanın saklandığı yerin bağlantısını ekrana vermektedir.
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, yanimove_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.
Leave a Comment