Ketika Validasi MIME Type Tak Cukup: Perbaikan Aman untuk Upload File

1 day ago 9
BOOK THIS SPACE FOR AD
ARTICLE AD

Ferizco

Halo Sobat! Pada video saya sebelumnya saya memberikan tips bagaimana cara mengamankan upload file di PHP dengan memvalidasi MIME Type file yang diupload. Sobat bisa melihat videonya pada link berikut ini.

Namun, saya menemukan bahwa validasi tersebut masih memiliki kelemahan. Kita bisa mem-bypass validasinya dengan melakukan perubahan payload request menggunakan burpsuite. Sehingga file dengan format file.php.png masih bisa di upload dan di eksekusi. Berikut metode yang saya lakukan:

Disclaimer

Saya melakukan metode eksploitasi ini di lingkungan testing saya sendiri.

Langkah pertama lakukan intercept request pada browser menggunakan burpsuite. Lalu, upload file seperti biasa dengan format png.

Ketika sudah mendapatkan payload requestnya seperti ini, maka lakukan sedikit perubahan.

Hapus beberapa baris dari payloadnya, Lalu tambahkan command php dibawahnya. Setelah itu, ubah nama filenya dengan format nama-file.php.png dan lakukan forward request dari burpsuite tersebut.

Validasi MIME Type sebelumnya diabaikan dan filenya berhasil di upload dengan ekstensi file.php.png. Tentu saja file ini bisa di eksekusi.

Perbaikan code

Cara mengatasi hal tersebut bisa dengan mengubah sedikit logika codenya. Sebelum file di upload ke dir /uploads, maka dilakukan perubahan nama filenya. Contohnya bisa diubah ke format base64. Simple codenya seperti berikut:

$base64FileName = base64_encode($fileName) . '.' . $fileExtension;
$uploadFile = $uploadDir . $base64FileName;

Dengan melakukan cara seperti yang sebelumnya, file tetap bisa diupload namun dengan nama dan format file yang berbeda. Walaupun pada saat diintercept dilakukan perubahan pada nama file, nama file tersebut akan di tulis kembali dalam format base64 dan diberikan ekstensi yang benar. Sehingga file tersebut tidak akan bisa dieksekusi kembali.

Cara tersebut bisa memperbaiki kelemahan sebelumnya. Untuk full codenya Sobat bisa lihat pada Github saya. Ada ide lain Sobat untuk mengamankan file upload di PHP?

Terima kasih sudah membaca, Semoga bermanfaat!

Read Entire Article