Dosya yükleme zafiyet taraması nasıl yapılır?
Bir sitede sıklıkla upload yapabileceğimiz yerler görürüz. Bunlar profil fotoğrafı yükleme yerleri olabilir, okul sitenizde ödev yükleme yeri olabilir. Belli formatların yüklenmesine izin verilir. JPG,PNG vs. gibi. Biz bu uzantıların dışında sisteme uzaktan erişebilmemize izin verecek SHELL dosyaları yüklemeye çalışacağız.
Bu uzantı kontrolleri 2 yerde yapılabilir. İlk olarak Javascript ile browser üzerinden, ikinci olarak backend tarafında sunucu üzerinden. Javascript ile yapılan kontrolleri atlatmak sunucu tarafına göre çok daha kolay bir işlemdir.
BurpSuite Proxy gibi bir vekil sunucu ile veriler sunucuya gönderilmeden yakalanarak üzerinde değişiklikler yapabiliriz.
Bu sayede browser üzerinden çıkan verileri değiştirerek browser kontrolünü bypass etmiş oluruz. Asıl olay işte burada başlamış olur.
Bu yazımda içeriği değiştirerek file upload açığı sömürme yolunu inceleyeceğiz. Gerekli araçları aşağıdaki listede yazdım.
Burp Suite
Web Tarayıcı (Tercihen Firefox)
Zafiyetli lab ortamına girdikten sonra öncelikle gerçek bir JPG dosyası yükleyerek gönderilen verileri BurpSuite üzerinde yakalıyorum.
Yakaladığım isteği incelediğimde filename kısmında dosyamın adının yer aldığını görmekteyim. Kırmızı olarak gözüken kısım resim dosyama ait veriler. Bu kırmızı alanı siliyorum. Çünkü bu kısma php kodlarımı yazacağım.
Mavi olarak işaretlediğim alanlara bakarsanız filename bölümünde dosyanın adını değiştirerek ucuncubinyil.php yaptım. Uzantısı php olan bir dosyayı ve içeriğinde php kodlarım yer alıyor. Bu isteği artık gönderebilirim.
Dosyamı yükledikten sonra dosyamı çağırmak için istekte bulunuyorum. Çağırma isteğinde bulunduğumda dönen response içeriğinde flag’ımı başarıyla yakalıyorum.