[RingZer0] – Thinking outside the box is the key

Link soal: https://ringzer0ctf.com/challenges/39/?id=2

Dikarenakan soal tersebut merupakan soal SQLinjection, kita langsung mencoba untuk menambahkan ‘ pada akhir url tersebut

https://ringzer0ctf.com/challenges/39/?id=2′

Lalu terdapat tampilan error sebagai berikut

Dapat kita lihat, ternyata mereka menggunakan SQLite dan kita berhasil menemukan tempat untuk melaksanakan SQLinjection attack ini

Selanjutnya, kita menentukan ada berapa column yang diperlukan agar kita bisa menggunakan SQL injection UNION attack. Ketika kita ingin melakukan sql injection union attack, ada 2 metode yang efektif untuk mengetahui berapa banyak column yang direturn dari sebuah query. Salah satu dari 2 metode tersebut adalah dengan menggunakan ORDER BY clauses yang akan kita lakukan.

https://ringzer0ctf.com/challenges/39/?id=2 ORDER BY 1–

https://ringzer0ctf.com/challenges/39/?id=2 ORDER BY 2–

https://ringzer0ctf.com/challenges/39/?id=2 ORDER BY 3–

Dengan menggunakan ORDER BY, kita tidak perlu mengetahui nama-nama column untuk mencari jumlah column yang digunakan. Dan pada saat kita inject “ORDER BY 3–” terjadi error yang disebabkan oleh index column yang ditentukan melebihi jumlah column pada saat result set.
Sehingga kita mendapatkan column yang diperlukan berjumlah 2 column dikarenakan pada saat kita melakukan inject “ORDER BY 2–“, tidak terjadi error.

Langkah selanjutnya adalah kita mengextract table name dengan menggunakan payload di bawah ini.

https://ringzer0ctf.com/challenges/39/?id=2 UNION SELECT 1,GROUP_CONCAT(tbl_name) FROM sqlite_master WHERE type=’table’ AND tbl_name NOT like ‘sqlite_%’

Alasan kita meletakkan “group_concat(tbl_name)” pada column yang kedua adalah dikarenakan ketika kita meletakkannya pada column yang pertama, tidak ada respon yang diberikan dari server. Sehingga kita meletakkannya pada column yang kedua.

Payload tersebut berguna untuk mengextract table name yang digunakan oleh server. Maksud dari payload terebut adalah kita ingin mengambil nama-nama dari table maka dari itu kita menambahkan type=’table’ dan tbl_name NOT like ‘sqlite_%’ ditambahkan agar table bawaan dari SQLite tidak ikut diextract.

Hasil yang kita dapatkan setelah kita menginject payload tersebut adalah sebagai berikut

Kita berhasil mendapatkan nama-nama table yaitu random_stuff, ajklshfajks, troll, dan aatrol

Kita mencoba untuk mencari column ‘flag’ pada table ajklshfajks dengan menggunakan payload

https://ringzer0ctf.com/challenges/39/?id=2 UNION SELECT 1,(SELECT flag FROM ajklshfajks LIMIT 0,1) FROM sqlite_master

Payload tersebut berguna untuk mengambil value pertama pada column flag sebanyak 1, dan kita berhasil mendapatkan flagnya.

Flag: FLAG-13lIBUTHNFLEprz2KKMx6yqV

Leave a Reply

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