Sebelumnya ini hanya sharing dimana saya menemukan bug "yang sepertinya" berjenis Blind SQL Injection,tetapi sayangnya bug tersebut tidak sempat saya laporkan ke pihak tokopedia dikarenakan bug tersebut sepertinya sudah diperbaiki oleh pihak tokopedia ketika saya ingin laporkan. (kalah cepat :v)
Saya membuat judul "Sharing" karena saya juga tidak mengetahui kepastiannya dari pihak tokopedia secara langsung apakah benar pada saat itu terdapat celah SQL Injection di end point tersebut atau tidak.

Oke langsung saja.
Tanggal ditemukan 25 September 2018 - 28 September 2018
Diperbaiki sekitar tanggal 29 September 2018

Pencarian bermulai pada saat saya ingin menggunakan kupon tokopedia "Kupon Milik Saya" pada situs tokopedia.
Lalu coba melihat request apa yang terjadi menggunakan BurpSuite
Pada BurpSuite terlihat ternyata tokopedia melakukan request ke sebuah service Graph yaitu https://gql.tokopedia.com untuk melakukan verifikasi kode kupon, dimana pada gambar kode kuponnya "SLV1509F4WVDLU6UCBB". Setelah itu saya coba memasukan request tersebut ke repeater BurpSuite. Tetapi sebelumnya saya ingin lihat seperti apa respon selanjutnya pada website setelah melakukan request tersebut, maka saya coba forward.

Ternyata tokopedia mengarahkannya ke sebuah link https://www.tokopedia.com/cart/.
Dan ada notifikasi kupon siap digunakan. Berarti verfikasi dari https://gql.tokopedia.com valid bahwa kupon tersedia.

Sudah mengetahui responnya, saya coba melakukan pengetesan pada situs https://gql.tokopedia.com. karena sudah di simpan di repeater BurpSuite saya dapat mengulangi request tersebut. saya coba dengan menyisipkan karakter "'" pada kode kupon.
Responnya OK, tapi coba kita lihat pada link https://www.tokopedia.com/cart/.
Notifikasi hilang,disini saya belum yakin bahwa ini SQL Injection,karena bisa saja karena dikasih karakter "'" kode kupon menjadi tidak valid.

Coba kembali dengan menyisipkan "--+-" setelah tanda "'" menjadi "SLV1509F4WVDLU6UCBB'--+-".
Notifikasi muncul kembali, apakah sebuah kebetulan? saya coba kembali melakukan Ekspresi Boolean.
dimana jika :
kode_kupon' and 1=1--+-  ==> Responnya TRUE (Notifikasi kode kupon muncul)
dan
kode_kupon' and 1=2--+-  ==> Responnya FALSE (Notifikasi kode kupon tidak muncul)
maka : bisa di kategorikan termasuk dalam Blind SQL Injection
tetapi jika tidak
maka : ini hanya kesalahan biasa

Pertama coba dengan "SLV1509F4WVDLU6UCBB' and 1=1--+-".
TRUE = Notifikasi kupon muncul kembali

Kedua coba dengan "SLV1509F4WVDLU6UCBB' and 1=2--+-".
FALSE = Notifikasi kupon tidak muncul

Setelah mengetahui "sepertinya" memang ini Blind SQL Injection. saya membuat script dengan tujuan untuk dapat men-generate nama database. dikarenakan SQL Injection berjenis blind ini tidak memuncul error dan sebagainya jadi harus mengecek 1 per 1 huruf ataupun angka.

Akhirnya saya mendapatkan nama databasenya ialah tokopedia_promo.

Lebih lengkapnya saya buatkan video pada saat saya proses pencarian bug dan generate nama database.

[*] Video Proof of Concept (POC) : Blind SQL Injection


[*] Video Proof of Concept (POC) : Generate Nama Database



[*] Catatan
Tulisan ini sudah mendapatkan persetujuan dari pihak terkait sebelum di publikasikan,sesuai dengan persayaratan yang dibuat oleh pihak terkait (https://github.com/tokopedia/Bug-Bounty)