✅File Upload
File Upload Nedir?
Dosya yükleme güvenlik açıkları, bir web sunucusunun kullanıcıların dosya adı, türü, içeriği veya boyutu gibi şeyleri yeterince doğrulamadan dosya sistemine dosya yüklemesine izin vermesidir. Bunlarla ilgili kısıtlamaların düzgün bir şekilde uygulanmaması, basit bir resim yükleme işlevinin bile tehlikeli dosyalar yüklemek için kullanılabileceği anlamına gelebilir. Bu, uzaktan kod yürütülmesini sağlayan sunucu tarafı komut dosyalarını bile içerebilir.
Bazı durumlarda, dosyayı yükleme eylemi kendi başına hasara neden olmak için yeterlidir. Diğer saldırılar, tipik olarak sunucu tarafından yürütülmesini tetiklemek için dosya için takip eden bir HTTP isteği içerebilir.
Saldırı Yöntemleri
Kontroller
İlk adım olarak normal bir dosya yüklemeyi deniyoruz. Eğer bu dosyaya doğrudan erişebiliyorsak bir sonraki adımları deneyebiliriz.
Eğer dosya yükleniyorsa ve nereye yüklendiğini bilmiyorsak dizin taraması yapabiliriz.
Eğer dosyaya erişebiliyorsak dosyanın uzantısının değişmiyor olması gerekir.
Content-Type Koruması
Eğer dosyanın türü content-type header ile kontrol ediliyorsa php payload gönderip content-type başlığını kabul edilen bir tipe çevirebiliriz.
Path Traversal
Sunucu tarafında bir dizindeki hiçbir dosyanın kod çalıştıramaması için bir güvenlik önlemi alınmış olabilir. Eğer path traversal zafiyeti varsa bu dizinin dışına dosyamızı yükleyebiliriz.
Whitelist Atlatma
Eğer dosya uzantısı kontrolü varsa aşağıdaki payloadlar çalışabilir.
Blacklist Atlatma
Eğer blacklist kontrolü zayıf ise aşağıdaki uzantılar ile dosya yükleyebiliriz.
Eğer uzantı kontrolü atlatılamıyorsa dizine htaccess dosyası yüklüyoruz ve bu dosyada dizindeki .l33t uzantısına sahip dosyaların php olarak yorumlanmasını sağlıyoruz.
Magic Number
File Signatures: https://en.wikipedia.org/wiki/List_of_file_signatures
Client-side Koruma Atlatma
Eğer kontroller front-end tarafında yapılıyorsa burp ile araya girip kontrolün yapıldığı satırı silebiliriz.
Polyglot
Eğer yanıtta dosyanın metadatasını görebiliyorsak yorum bölümüne bir php kodu yazabiliriz.
Race Condition
Eğer yüklediğimiz dosya kontrol edilmeden önce sunucuya yükleniyorsa ve sonradan siliniyorsa dosyayı yükleme ve okuma işlemini ard arda yapmayı deneyebiliriz.
Turbo intruder veya grup haline paralel göndermeyi deneyebiliriz.
Payload
MD-TO-PDF Exploit
SSH Key
Eğer sadece dosya oluşturabiliyorsak fakat görüntüleyemiyor isek kendi public keyimizi karşıya yükleyebiliriz.
Word Macro RCE (.doc)
Windows Library RCE
Bu dosyayı windowsta oluşturuyoruz.
Sonrasında bu komut ile bir webdav server açıyoruz.
Aşağıdaki komutun olduğu bir shortcut oluşturuyoruz. Bu iki dosyayı library ms dosyasını kullanarak kendimize atıyoruz.
Bir kurbana config.Library-ms dosyasını atıyoruz. Eğer oraya tıklarsa bizim shortcut olan dosyamızı görecek ona da tıklarsa shell gelir.
Araçlar
Powny-shell: https://github.com/flozz/p0wny-shell
Upload Scanner: https://github.com/PortSwigger/upload-scanner
Kaynaklar
Portswigger Academy: https://portswigger.net/web-security/file-upload
Last updated