Bypass Arbitary File Upload With .phar

9 months ago 113
BOOK THIS SPACE FOR AD
ARTICLE AD

Mizar Ismu Arief

source by image bing

Hallo, perkenalkan nama saya Mizar Ismu Arief. Saat tulisan ini dibuat saya seorang mahasiswa di salah satu universitas yang ada di Tasikmalaya.

Tulisan kali ini saya akan share pengalaman saya pada saat Pentest di web kampus saya. Oh iya, share pengalaman ini dibuat untuk edukasi terutama para pentester, developer, dan tidak disalahgunakaan.

Note: Kasus website yang saya pentest ketika artikel ini dipublish, bug sudah dalam keadaan PATCH.

Web yang saya pentest ini merupakan sistem informasi yang terintegrasi di semua sistem yang ada di kampus saya. Jadi web tersebut digunakan untuk melakukan pembayaran kuliah, mengontrak sks, melihat nilai, dan mengupload berkas persyaratan skripsi atau tugas akhir.

Nah singkat cerita, disaat saya ada waktu luang dan ingin mencoba melakukan Pentesting website/sistem pada kampus selama saya kuliah, saya mencoba mengecek menu-menu yang ada di web tersebut. Menu yang menarik yaitu pada menu “TA / Skripsi”, dimana pada menu tersebut merupakan menu yang menyediakan form upload bagi mahasiswa untuk melengkapi persyaratan Tugas Akhir atau Skripsi.

Saya langsung tertarik untuk mencari celah pada bagian form upload. Rata-rata celah pada form upload dikarenakan adanya kurang ketat untuk melakukan filter sebuah file, sehingga attacker bisa melakukan bypass pada form upload. Oke mungkin segitu cerita saya, sekarang bagaimana cara saya buat melakukan bypass nya? let’sgo!

Tampilan form upload

Disini saya coba-coba untuk upload file, mulai dari pdf, docx, png/jpg, html, dan txt. Untuk file .pdf sudah jelas bisa diupload karna form upload itu disediakan untuk upload berkas-berkas dokumen. Namun ektensi lain yang saya sebutkan diatas selain pdf/docs, ternyata bisa diupload. Hm mungkin masih bisa dimaklumin karna ektensi diatas masih aman-aman saja, paling ektensi html mungkin bisa manfaatin lebih lanjut, contohnya seperti upload SHTML. namun pada kasus ini saya mencoba upload web shell dengan ektensi .shtml, yaitu SSI Shell.

Tampilan SSI Shell

Ketika saya upload dengan ektensi .shtml, dan saya akses, hasilnya SSI Shell tersebut tidak bisa digunakan. Sudah saya coba beberapa command SSI, hasilnya tetap forbidden. Mungkin web tersebut tidak vulnerabillity terhadap SSI Injection.

Tampilan ketika menggunakan command SSI

Lalu saya coba upload .php, .pdf dengan isi file nya untuk mengecek id user dan grup server.

isi dari file cmd.php dan cmd.pdf

Untuk .pdf, saya bypass menjadi file.pdf.php dan hasilnya forbidden. Lalu saya coba berbagai macam ektensi bypass seperti .php81, .php82, .php5, .phtml, .pHP, .pHP5, .png.php, png.PhP, dan hasilnya forbidden.

Tampilan pada saat mencoba upload beberapa ekstensi

Meskipun sudah saya coba ganti content-type menjadi application/x-php, dan image/jpeg, hasilnya masih belum bisa di bypass. Mungkin karna beberapa ektensi diatas tidak bisa dikarenakan ada nya whitelist, sehingga mencoba berbagai bypass ektensi pun tidak akan bisa. Tapi karna masih “Mungkin”, saya langsung coba ngetest apakah bener ada whitelist ektension? Untuk mengetahui adanya whitelist yaitu dengan mencoba ektension karakter random. Jika terupload maka tidak ada whitelist, dan masih ada chance buat ngebypass nya.

Disini ada beberapa cara untuk mencoba nya, seperti dibawah ini:

file.php%00.pngfile.php%0d%0a.pngfile.php#.pngfile.php%20file.php%0a

Dari beberapa cara, saya coba semuanya bisa diupload, namun pada saat diakses, hasilnya akan terbaca oleh server bahwa file tersebut berektensi .png, pdf. Tapi pada saat saya mencoba menggunakan file.php%20 dan file.php%0a hasilnya bisa diupload, namun pada saat diakses hasilnya seperti tidak terbaca oleh server.

Tampilan berhasil dibypass dengan spesial character diakhir ektensi( %20, %0a)
Tampilan ketika mengakses file yang berhasil di upload

Artinya dengan mengetest beberapa ektensi dengan special character untuk mengetahui ada/tidak nya whitelist, kita bisa tau bahwa pada kasus web tersebut tidak ada whitelist, sehingga adanya chache buat bypass nya. Oke dari sekian lama nya saya mencoba buat bypass, ada 1 ektensi yang bisa tembus atau upload, apa itu? ya ektensi nya yaitu .phar. Langsung kita coba

Oke langsung saja kita mencoba bypas nya dengan .phar, kita tamper data dulu file .pdf menjadi .phar seperti sebelumnya menggunakan burp suite

Tampilan berhasil upload file dengan ektensi .phar

Yaps, dari gambar diatas, sudah berhasil diupload dengan ektensi .phar, sekarang coba akses, hasil outputnya yaitu https://subdomain.university.ac.id/storage/xxx-xxx/xxxxxxxxxx/1.phar

Viola! isi dari file tersebut, yaitu command untuk melihat id dan grup server berhasil di eksekusi oleh server.

Artinya kerentanan pada form upload bisa kita manfaatkan untuk melakukan RCE. Singkatnya, attacker bisa melakukan apapun yang dapat merusak web/sistem.

Sekian dari artikel yang isinya pengalaman saya mengenai penemuan keretanan pada sistem kampus saya, semoga bermanfaat bagi para developer atau para pentester.

04 Oktober — Melaporkan adanya bug ke UPTIK

05 Oktober — Respon bug oleh UPTIK

06 Oktober — Fitur di hilangkan sementara

? Desember — Bug Fixed

https://www.acunetix.com/vulnerabilities/web/unrestricted-file-upload/

https://blog.tegalsec.org/bug-bounty-unrestricted-file-upload/

https://www.logique.co.id/blog/2019/05/28/web-security-unrestricted-file-upload/

https://book.hacktricks.xyz/pentesting-web/file-upload

https://help.highbond.com/helpdocs/analytics-exchange/141/administrator-guide/en-us/Content/configuration_app/whitelisting_file_extensions.htm

https://whatext.com/id/phar

https://www.acunetix.com/blog/articles/web-shells-101-using-php-introduction-web-shells-part-2/

Read Entire Article