2 minute read

File upload güvenlik zafiyetleri, kullanıcıların dosya sistemi üzerine yeterince doğrulama yapılmadan dosya yükleyebildiği durumlarda ortaya çıkmaktadır.

Lab 1 Lab 2 Lab 3 Lab 4 Lab 5 Lab 6 Lab 7

Lab-1 Remote code execution via web shell upload

Bu laboratuvardaki görsel yükleme fonksiyonunda güvenlik zafiyeti bulunmaktadır. Lab’ın tamamlanması için basic PHP web shell kullanılarak /home/carlos/secret dosyasının içeriği görüntülenmelidir.

secret verisini okuyacak php kodu hazırlanarak bir php dosyası halinde kaydedilmektedir.

image-center

Daha sonrasında avatar yükleme fonksiyonu kullanılarak bahsi geçen php dosyası yüklenmektedir.

image-center

Yüklenen dosyanın path’ine gidildiğinde secret bilgisi görüntülenmektedir.

image-center

image-center

Lab-2 Web shell upload via Content-Type restriction bypass

Bu laboratuvardaki görsel yükleme fonksiyonunda güvenlik zafiyeti bulunmaktadır. Lab’ın tamamlanması için carlos kullanıcısının secret verisi ele geçirilmelidir.

Uygulama, aldığı dosyanın Content-Type bilgisine bakarak filtreleme gerçekleştirmektedir. PHP dosyalarını engellemektedir.

image-center

Content-Type verisi değiştirilerek request gönderildiğinde uygulama kabul etmektedir.

image-center

image-center

image-center

Lab-3 Web shell upload via path traversal

Bu laboratuvardaki görsel yükleme fonksiyonunda güvenlik zafiyeti bulunmaktadır. Lab’ın tamamlanması için Carlos kullanıcısının secret dosyası görüntülenmelidir.

Diğer lablardaki gibi yaptığımızda uygulamanın savunma mekanizması çalışmaktadır ve payload çalışmamaktadır.

image-center

Upload requestinde file’ın lokasyonu belirlenirken “../” denenmektedir fakat uygulama onu da engelleyip ilgili klasöre kayıt etmektedir dosyayı.

image-center

Payload “..%2f” olarak değiştirildiğinde uygulamanın filtresi bu durumu engellemez ve webshell file dosyasına yüklenmektedir.

image-center

image-center

image-center

Lab-4 Web shell upload via extension blacklist bypass

Bu laboratuvardaki görsel yükleme fonksiyonunda güvenlik zafiyeti bulunmaktadır. Uygulama belirli uzantıları blacklist yöntemiyle engellemektedir. Bu engelleme atlatılabilmektedir. Lab’ın tamamlanması için carlos kullanıcısının secret bilgisi ele geçirilmelidir.

Uygulamaya .php olarak payload yüklenmeye çalışıldığında uygulama izin vermemektedir.

image-center

php5 dosyasına izin vermektedir ancak payloadı çalıştırmamaktadır.

image-center

“..%2f” olarak denendiğinde uygulama onu da engellemektedir.

image-center

Filnename, content-type ve content ayarlanarak bir .htaccess dosyası upload edilmektedir.

image-center

Daha sonra ilgili payload uzantısı “.l33t” olarak değiştirilerek uygulamaya upload edilmektedir.

image-center

image-center

image-center

Lab-5 Web shell upload via obfuscated file extension

Bu laboratuvardaki görsel yükleme fonksiyonunda güvenlik zafiyeti bulunmaktadır. Belirli uzantılar blacklist tarafından engellenmektedir. Ancak obfuscation teknikleriyle bu durum atlatılabilmektedir. Lab’ın tamamlanması için carlos kullanıcısının secret bilgisi ele geçirilmelidir.

Uygulama sadece jpg dosyası kabul etmektedir. Payload içeren php dosyasının sonuna %00 null byte ekleyip .jpg yapınca blacklist .jpg dizisini tespit edip hata vermemektedir ancak null byte “.jpg” dizesini atarak sunucuya sadece “php.php” olarak dosyayı eklemektedir.

image-center

image-center

Lab-6 Remote code execution via polyglot web shell upload

Bu laboratuvardaki görsel yükleme fonksiyonunda güvenlik zafiyeti bulunmaktadır. Uygulama orijinal bir görüntü olduğunu doğrulamak için dosyanın içeriğini kontrol etmesine rağmen sunucu tarafına payload yüklemek mümkündür. Lab’ın tamamlanması için carlos kullanıcısının secret verisi ele geçirilmelidir.

Uygulama dosya içeriğini kontrol ettiğinden gerçek bir görsel olmayan bütün dosyaları engellemektedir. exiftool yardımıyla valid bir görselin yorum kısmına php payload eklenmektedir.

image-center

File type php’dir ancak içerik bir görsel olduğundan uygulama sorun yaratmamaktadır.

image-center

image-center

image-center

image-center

Lab-7 Web shell upload via race condition

Bu laboratuvardaki görüntü yükleme fonksiyonunda güvenlik zafiyeti bulunmaktadır. Uygulama yüklenen dosyalar üzerinde sağlam bir kontrol sağlamaktadır ancak bunları işleme biçimindeki bir race condition durumu doğrulamayı atlatmayı mümkün kılmaktadır. Lab’ın tamamlanması için carlos kullanıcısının secret verisi elde edilmelidir.

Uygulamaya dosya yüklerken denenen her türlü saldırı başarısız olmaktadır. Uygulama görseli bir klasöre almaktadır zararlı kod kontrolü yapmaktadır ve tespit ettikten sonra silmektedir. Hedefimiz bu kontrol sırasındaki süreden faydalanarak çok fazla istekte bulunmak ve dosyanın zararlı kod kontrolünü atlatmasını sağlamaktır.

Bir adet POST requesti, içinde payload bulunan php dosyası, gönderilmektedir ve 5 adet ilgili dosyayı çağıran GET requesti yapılmaktadır. (Turbo Intruder Yardımıyla) Dosya sunucuya yüklendikten sonra payload kontrolü tamamlanmadan GET istekleri sunucuya gittiğinden payload barındıran dosya sunucudan silinmeden GET isteklerine geri dönmektedir.

image-center

Yapılan GET isteklerinden bazıları zararlı kod kontrolünü atlatarak bize carlos kullanıcısının secret verisini iletmektedir.

image-center

image-center