[Ringzer0] – What’s the Definition of NULL?

HARI INI KITA BELAJAR SQLi(te)!

Soal yang ini agak lucu sih soalnya paradox gitu dan mengerti kenapa harus dijadikan paradox kayak gitu agak sulit. But we’ll get there in the process. Let’s start.

Jadi kita dapet soal seperti ini pas dibuka:

Nah, yang menarik adalah id=MQ== di urlnya (karena saya selalu ketriggered kalo ngeliat soal ctf requestnya keliatan uwu). Biasanya yang belakangnya = gitu base64 sih, dan ternyata benar MQ== adalah base64 dari angka 1.

Nah, hal lain yang saya suka lakukan kalo ada request keliatan gitu adalah sembarang masukkin value apapun buat iseng iseng. Manisnya, kalo kita input apapun, hasilnya bakal ngeluarin ini:

SQLite Database error itu berarti database web ini pake SQLite. Nah setelah itu, kita bakal coba balik ke hint yang diberikan pas awal masuk. Yaitu WHERE (id IS NOT NULL) AND (ID = ? AND display = 1).

Nah, dari sini kita tahu bahwa id yang disediakan di url bakal dimasukkan ke ID=? itu.

Dari sini, kita bisa construct payloadnya.

————————————————————————————————————

WHERE (id IS NOT NULL) AND (ID = ? AND display = 1)

Nah coba satu – satu ya. Display ini kita gak tahu sama sekali munculnya darimana, jadi kita turutin aja displaynya 1. Terus, karena ID berapapun yang kita masukkin bakal gak ngeluarin apa apa, berarti kita bisa masukkin berapapun, cuman kita bakal set OR di depannya.

Oke deh stop dulu di sini. Sekarang kita dapet payload begini:

WHERE (id IS NOT NULL) AND (ID = 2 AND display = 1)

Nah ORnya yang tadi saya kasih tau bakal ditaro di belakang AND supaya hasilnya true. TAPI kurungnya ditutup dan dibuka dulu biar selalu true.

WHERE (id IS NOT NULL) AND (ID = 2) OR (1=1 AND display = 1)

Nah sampe sini kita stop dulu. Coba masukkin payloadnya, dari 2) OR (1=1 doang karena itu ekstensi yang kita berikan dari hint tadi. TAPI, base64 dulu soalnya idnya cuma mau nerima base64.

Hasilnya begini: MikgT1IgKDE9MQ==

TAPI, kalo kita masukkin itu sebagai idnya, kita gak dapet apa apa. Cuma bakal nampilin halaman pertama lagi.

Berarti ada yang kurang.

Setelah dihipnotis dengan banyaknya kata NULL di soal itu, which is judul soal itu sendiri yang harusnya merupakan hint dan hopefully jawaban dari soal itu, kita lihat apa sih NULL di SQLite?

Nah, inilah saatnya kita cek https://www.sqlite.org/nulls.html

Di site itu, dikasih tahu manipulasi NULL itu kayak gimana aja di SQLite.

Yang menarik adalah kata -kata “null OR true” is true.

NAH INI! INI YANG TADI DIBILANG PARADOX ITU.

Jadi kita bakal bikin dia netralisir id null yang di depan dan bikin jadi true dengan bikin null lagi.

Jadi payloadnya bakal kayak gini setelah dibuat:

WHERE (id IS NOT NULL) AND (ID = 2) OR (id IS NULL) OR (1=1 AND display = 1)

Nah, base64 extentionnya dan bakal didapatkan MikgT1IgKGlkIElTIE5VTEwpIE9SICgxPTE=

TAPI KALO DIMASUKKIN MALAH TETEP SAMA GAK NGELUARIN APA APA.

Di antara semua ini, pasti ada yang salah. Dan suspect kita adalah si display.

Mencurigakan sih. Kita gak tau dia siapa darimana ngapain dan apa kerjanya.

Hmmmmm, coba kita jadiin false.

WHERE (id IS NOT NULL) AND (ID = 2) OR (id IS NULL) OR (1=2 AND display = 1)

Base64 extentionnya bakal jadi begini MikgT1IgKGlkIElTIE5VTEwpIE9SICgxPTI=

Coba masukkin dannnnnn, KITA DAPAT FLAGNYAAAAAA!!!!

Jadi gituuu, kita mencoba buat idnya yang tadinya false gara gara dibilang is not null jadi

 

Leave a Reply

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