[Cyber Jawara 2020 Qualification] – Toko Masker 2

Challenge kali ini merupakan sequel dari challenge sebelumnya, Toko Masker 1. Karena web nya masih serupa, kami pun melakukan analisis dengan mengamati bagaimana proses pembuatan state nya bekerja. Berikut hal-hal yang kami dapatkan:

  • Tidak seperti pada Toko Masker 1, kali ini, ketika kami mengirimkan data produk dengan price yang telah dimodifikasi, state yang dihasilkan rupanya memiliki price yang sesuai dengan harga aslinya, bukan price yang kami input 🙁
  • Namun, kami juga menyadari kalau quantity yang kami input dapat bernilai negatif (wow), dan state yang dihasilkan server pun akhirnya memiliki quantity maupun totalPrice yang juga negatif, seperti terlihat pada gambar dibawah ini:
  • Tapi, saat kami mencoba mengirimkan state yang memiliki quantity maupun totalPrice negatif tersebut, server memberikan error “Cannot create invoice”.

Oleh karena itu, kami perlu menemukan cara lain agar tetap dapat membeli 100 buah masker N-99 dengan uang yang hanya $100. Karena total harga 100 buah masker N-99 adalah $10000, kami mencoba mengakali server dengan membeli juga masker Surgical Mask (yang harganya $10 per buah) sebanyak -995 buah, sehingga jika di total:

Berikut adalah data produk yang kami kirimkan ke server:

Dan ketika state yang didapatkan dari data produk diatas kami kirimkan ke endpoint /api/v1/getSelectedItems, respon yang didapatkan adalah sebagai berikut:

Terlihat bahwa value dari totalPrice adalah 50 sesuai dengan perhitungan diatas. Selanjutnya, kami mengirimkan state tersebut ke /api/v1/getInvoice, dan didapatlah flagnya:

Flag = CJ2020{another_variant_of_price_tampering_from_real_case}

Lesson learned nya, selalu validasi input dari pengguna.

Untuk memperjelas, berikut adalah solve script yang kami gunakan untuk menyelesaikan challenge ini:

Leave a Reply

Your email address will not be published. Required fields are marked *