My experience finding xss in web application and probably the most annoying vulnerablity in webapp

[Updated : 1744769808] (GMT+7)

↲Back to home

My experiences finding xss in web application and probably the most annoying vulnerablity in webapp

Disclaimer : Tulisan ini ditulis berdasarkan prespektif saya sebagai mahasiswa yang kebetulan sedang belajar web security. Saya sangat senang jika anda memberikan feedback atau koreksi terhadap tulisan saya

Tahun lalu tepatnya pada tahun 2024 saya berkesempatan untuk ikut PBL (Project based learning) dari kampus yang kebetulan memiliki kerja sama dengan partner industri. Project tersebut terdiri dari 5-6 orang mahasiswa yang diberikan tugas untuk mengerjakan kegiatan penetration testing selama 6 bulan bersama partner industri. Dikarenakan saya memiliki sedikit background di web security karena dulu sering main ctf(walaupun jarang menang sih wwkwkw) langsung mencoba beberapa vuln yang mungkin bisa di eksploitasi contohnya seperti cross-site scripting. Apa itu cross-site scripting atau xss? singkat nya ini vulnerablity yang bisa terjadi ketika attack dapat memanfaatkan javascript client yang ada di browser untuk melakukan hal yang malicious. Kenapa javascript ? karena javascript merupakan salah satu bahasa pemrograman yang dapat di eksekusi di browser seperti chrome , edge, brave. Biasanya javascript ini digunakan untuk membantu web aplikasi lebih interaktif seperti melakukan request data melalui rest api menggunakan protokol http dan mengupdate atau memanipulasi struktur atau DOM html. XSS hadir ketika attacker dapat mengontrol kode atau payload javascript yang ditampilkan di browser client atau korban. Nah untuk cara menyisipkan kodenya ada banyak salah satu yang paling umum adalah stored xss dimana attacker dapat mengirim input data payload ke server lalu di simpan di database dan ketika korban mengakses page atau halaman html yang merender inputan data attacker tersebut maka browser korban otomatis menjalankan payload javascript tersebut . Perlu diingat kalau xss ini merupakan serangan dengan type client-side yang artinya diperlukan user interaksi untuk menjalankan kode atau payload javascript yang disisipkan melalui browser.

XSS ini juga merupakan vulnerablity yang paling sering ditemukan dan mungkin paling favorit untuk pentester atau bug hunter. Biasanya XSS ini digunakan untuk mengambil alih akun korban dengan cara mengirim cookie atau session yang aktif ke attacker sehingga attacker dapat mengambil akun korban tanpa harus mengetahui credential korban yang digunakan. Tetapi xss juga dapat dimanfaatkan untuk melakukan hal malicious lain (contohnya akan saya jelaskan diparagraf berikutnya).

Oke kembali ke topik sebelumnya, saya selama melakukan kegiatan pentest selalu beranggapan bahwa xss ini mungkin vulnerablity yang jarang muncul karena dari beberapa sumber yang saya baca beberapa framework sudah web aplikasi sudah menerapkan input sanitasi yang baik dan benar sehingga kemungkinannya sangat kecil untuk serangan xss bisa muncul. Oh boy..... i was wrong... Ternyata vulnerablity ini masih sering muncul di web aplikasi bahkan saya hampir selalu menemukan celah xss di beberapa project pentest yang dikerjakan.

Oke, yang pertama ada di project pentest web aplikasi yang menggunakan bahasa java. Aplikasinya sangat kompleks banyak form dan input user yang harus di isi. Awalnya saya senang mungkin gampang nemu celah di web aplikasi ini, Banyak vulnerablity yang saya test seperti sql injection, lfi, ssti, dan lain-lain akan tetapi hasilnya nihil. Sampai saya ketemu satu tombol kecil dimana kita dapat menambahkan deskripsi pada gambar. Saya mencoba beberapa payload xss dengan html tag yang berbeda untuk melihat response server. Tidak semua html tag dapat diterima oleh server, saya curiga mereka menerapkan blacklist pada html tertentu yang sering muncul atau digunakan pada payload xss. Hampir menyerah karena hampir tidak ada html tag yang diperbolehkan dan tiba-tiba salah satu tag html yang saya test berhasil tersimpan di server-side dan dirender dibrowser sebagai html tag yang valid. Disini saya tidak berhasil mengambil cookie karena sudah di set httponly dan secure dan server tidak mengizinkan TRACE http method. Saya hanya dapat menyisipkan payload yang meredirect korban untuk logout(wwkwkwkw ini bikin usernya logout terus ketika lihat deskripsi gambar saya) dikarenakan keterbatasan waktu dan limitasi server yang tidak memperbolehkan inputan user yang panjang.

Jadi apa yang kita pelajari dari kasus pertama ini 1. Jangan pantang menyerah karena developer mungkin membuat kesalahan. Saya tidak tahu kenapa bagian deskripsi gambar tidak dirender seperti inputan data lainnya, kalau dari asumsi saya mungkin developernya males atau lupa menerapkan filter XSS pada fitur yang mungkin jarang disentuh

[comtinue]