progrez.cloud

Don't Worry to Be Late, as long as you have Access

24 Maret 2023

0x00 Background ~

Waktu itu ada sebuah event gathering yang membahas tentang Web Hacking oleh seorang bug hunter yang expert dalam bidang keamanan siber, terutama dalam hal Web Exploitation. Penjelasan dan pemaparan dirinya tentang celah keamanan dari berbagai situs yang kebanyakan ialah situs pemerintahan memberi kesadaran bahwa kelalaian kecil dari seorang Web Developer dapat menyebabkan terjadinya hal yang tidak seharusnya terjadi.


Entah kenapa semangat pemateri tersebut menular ke para audience, dan saya pun ikut terjangkit. Sepulangnya dari sana, dengan penuh antusias saya mencari tahu segala teori yang saya ingat dalam setiap slide materinya. Namun, tiba-tiba pikiran teralihkan oleh tugas kuliah yang belum dikerjakan. Maka, mari kita kerjakan tugas tersebut.


....


Setelah selesai dikerjakan dan hendak mengumpulkan tugas lewat sebuah aplikasi virtualclass berbasis website, ternyata jam menunjukan bahwa waktu telah lewat dari deadline tugas yang dijadwalkan. F*ck I'm Worried ~


0x01 Control Yourself ~

Dalam proses menertawakan kelalaian diri, tiba-tiba teringat kembali pemaparan dari materi tadi, tentang Broken Access Control (BAC).


"Oh iya, tugasnya kan dikumpulkan lewat website kampus, ya". dengan pemikiran bahwa "website kampus yang sederhana ini pasti punya celah" saya mencoba menganalisis setiap halaman pada website tersebut dengan berlandaskan ilmu yang didapat dari 1 jam lebih duduk dan menyimak pemaparan materi dengan serius. Saya akhirnya menemukan hal yang menarik pada halaman pengumpulan tugas.



Nah, di atas adalah tampilan daftar tugas dari semua mata kuliah, dan bisa kita lihat bahwa status dari kedua tugas tersebut adalah "Waktu upload Berakhir!". Namun, tombol 'upload tugas' nya masih berada di sana, dan jika diklik maka akan dialihkan ke halaman upload tugas tersebut.



Setelah dialihkan kita bisa melihat seperti yang ada pada gambar di atas terdapat peringatan bahwa waktu pengumpulan tugas telah berakhir dan kita tidak dapat mengunggah tugas karena tombol 'upload' nya pun hilang.


Voilaa ~

Kita telah menemukan alasan utama kenapa kita tidak bisa mengupload tugas, yaitu karena TOMBOL 'UPLOAD' NYA HILANG!


0x02 More Inspects, More Access, More Happiness ~

Sebenarnya, dalam melakukan tahap Information Gathering (Pengumpulan Informasi) pada sebuah website, hal penting yang kita bisa perhatikan adalah url-nya. Dan pada url halaman upload tugas kita bisa temukan sebuah parameter id yang merupakan nilai id yang ada pada tiap-tiap tugas.



Id pada tugas digunakan untuk mengidentifikasi tiap-tiap tugas, sehingga nilai id haruslah unik. Nilai id yang unik nantinya digunakan untuk mengidentifikasi tugas tertentu sehingga tugas tersebut dapat diedit dan dihapus.


Mengenai tombol upload yang hilang, kita tahu bahwa tombol tersebut tidak ada dikarenakan proteksi yang dilakukan oleh sang developer ketika waktu upload berakhir. Bisa kita bayangkan scriptnya mungkin akan seperti ini:

if (waktu > deadline) {
	tombol.hilang();
}

Jadi, kita hanya butuh tombolnya untuk kembali, apa mungkin kita putar kembali waktu?


0x03 Feel What You Felt ~

Dengan pengalaman melakukan pengembangan website selama beberapa minggu, saya menyadari satu hal. Jika proteksi yang dilakukan hanya terdapat pada Client-Side, artinya proteksinya hanya dengan menghilangkan tombol upload. Maka, kita bisa lakukan bypass dengan cara membuat form html sendiri yang meniru form upload tugas untuk mengirimkan Request pada halaman upload tugas.


Namun, bagaimana jika proteksinya ada pada Server-Side? Ntahlah, yang penting udah ketemu satu solusi. So, Lets Check It Up!


Jika anda adalah seorang Web Developer dan familiar dengan HTTP Request, maka anda harusnya tahu bahwa dalam meniru form upload tugas kita perlu menyiapkan beberapa hal, yakni:

  • Target URL ; adalah alamat url yang akan kita kirimkan request beserta file tugasnya. (Jika ini adalah website yang biasanya, maka target urlnya harusnya adalah alamat url dari halaman upload tugas).
  • Request Method ; adalah http method yang akan kita gunakan (karena kita akan mengirimkan data, maka sesuai aturan methodnya pastilah POST).
  • Request Parameter ; dalam mengirimkan data, protokol http akan menyimpan data yang kita kirimkan ke dalam pasangan name = value . Jadi, kita perlu mengetahui name dari data file tugas yang akan kita upload. Hal ini diperlukan agar nantinya data yang kita kirim dapat diproses dengan benar oleh server.


Karena target url dan request method nya sudah kita dapatkan, maka yang kita butuhkan selanjutnya adalah request parameter nya. Kita bisa mendapatkannya dengan cara melihat attribute name yang ada pada tag <input:file> yakni elemen html tempat kita mengupload file tugas



Dapat dilihat bahwa nilai dari attribute name adalah file_tugas


Voilaa ~

Kita akhirnya menemukan semua yang dibutuhkan untuk membuat form tiruan.


0x04 How to Become Cool ~

Pertama, buat sebuah file html dengan nama yang keren.

~ e.g. alchemer-vclass-bypass.html ;

Selanjutnya, buat sebuah form dengan method POST dan targetnya adalah alamat url dari halaman upload tugas.

~ e.g. <form method=POST action=[url target]> ;

Lalu di dalam formnya, buatkan juga sebuah input file dengan nama sesuai nama input file dari halaman upload tugas.

~ e.g. <input type=file name=file_tugas> ;

Karena kita akan mengirimkan file, maka kita perlu menambahkan attribute enctype pada form tadi.

~ e.g. <form method=POST action=[url target] enctype=multipart/form-data> ;

Jangan lupa tombol upload :)

~ e.g. <button type=submit>Upload</button> ;


Voilaa ~

Jadi lah sebuah file html alchemer-vclass-bypass.html :

<form method=POST action=[url target] enctype=multipart/form-data>
<input type=file name=file_tugas>
<button type=submit>Upload</button>
</form>


0x05 Enjoy the Result ~

Jika, file tadi dibuka, maka akan tampil sebuah halaman html sederhana



Silahkan Upload Tugas Kleann..



So, Don't Worry to be Late, As Long As You Have Access ~


~~ Ciaoo ~~