[RingZer0] – Login portal 2

Link soal: https://ringzer0ctf.com/challenges/4

Diberikan soal sebagai berikut

Dikarenakan soal ini merupakan salah satu soal tentang SQL Injection, hal pertama yang kita lakukan adalah memasukkan payload ‘OR 1=1#. Ketika kita memasukkan payload tersebut, respon dari server adalah sebagai berikut.

Di sini kita mendapatkan username impossibletoguess, dan kita harus mengetahui passwordnya untuk mendapatkan flag. Langkah selanjutnya yang dilakukan adalah mencaritahu password dari username impossibletoguess tersebut. Kita memasukkan payload ‘UNION SELECT 1#, hasilnya adalah “wrong username/password”. Setelah itu kita tambahkan menjadi ‘UNION SELECT 1,2#, hasilnya adalah:

Jadi di sini, kita bisa mengetahui bahwa terdapat 2 column yang diselect oleh server untuk melakukan login.

Langkah selanjutnya yang kita lakukan adalah mencaritahu table name yang ada di server, dengan cara ‘UNION SELECT table_name, 2 FROM information_schema.tables#. Hasilnya adalah sebagai berikut

Table yang mencurigakan adalah table “users”, karena table-table lain selain table users merupakan table bawaan dari MYSQL. Lalu payload selanjutnya yang kita input adalah ‘UNION SELECT column_name, column_name FROM information_schema.columns WHERE table_name = ‘users’#. Payload ini berfungsi untuk mencari 2 column name yang diselect oleh server.

Langkah selanjutnya adalah mencari isi dari username dan password tersebut. Payload yang diguankan adalah:

  • Untuk username, kita menggunakan ‘UNION SELECT (SELECT username limit 1), 2 FROM users#. Kita mendapatkan usernamenya adalah impossibletoguess (ini sudah kita dapatkan pada waktu kita memasukkan payload ‘or 1=1#.
  • Untuk password, kit menggunakan ‘UNION SELECT (SELECT password limit 1), 2 FROM users#. Kita mendapatkan passwordnya adalah 1b2f190ad705d7c2afcac45447a31b053fada0c4 (dalam bentuk SHA1)

Setelah mendapatkan username dan password, kita mencoba untuk login dengan menggunakan username dan password yang telah kita dapatkan. Akan tetapi, kita tetap mendapatkan respon “wrong password”. Setelah itu, saya mencoba untuk mencari value asli dari “1b2f190ad705d7c2afcac45447a31b053fada0c4”, akan tetapi hash tersebut tidak ada value aslinya.

Setelah beberapa saat berpikir, saya mencoba untuk input payload seperti ini impossibletoguess’ UNION SELECT 1, sha1(1b2f190ad705d7c2afcac45447a31b053fada0c4)#. Dan pada bagian password, kita juga input 1b2f190ad705d7c2afcac45447a31b053fada0c4.

Kenapa kita bisa mendapatkan flag dengan payload seperti itu? Karena kita mau set value SHA1 dari 1b2f190ad705d7c2afcac45447a31b053fada0c4 terlebih dahulu, jadi nanti ketika password yang kita isi (1b2f190ad705d7c2afcac45447a31b053fada0c4) di check, dia akan di SHA1 terlebih dahulu oleh server dan akan dilakukan pengecekan dengan value yang telah kita inject sebelumnya, karena hasilnya sama, kita bisa mendapatkan flagnya.

Kita tidak harus memasukkan value passwordnya dengan “1b2f190ad705d7c2afcac45447a31b053fada0c4”, kita hanya harus membuat value x dari SHA1(x) yang ada di username dan password yang kita input di kolom password harus sama.

Misal:

Username: impossibletoguess’ UNION SELECT 1, sha1(1)#

Password: 1

Kita bisa mendapatkan flagnya dengan memasukkan inputan seperti di atas.

FLAG: FLAG-wlez73yxtkae9mpr8aerqay7or

Leave a Reply

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