Write-Up Hacker Class CTF Compfest 12
Assalamualaikum Warahmatullahi Wabarakatuh
Btw ini tulisan pertama saya di medium, semoga gak mengecewakan yah :) Disini saya mau share sedikit pengalaman saya kemarin ikut kompetisi Capture The Flag Compfest 12 dari kakak kakak UI khususnya Hacker Class-nya. Yah walaupun gak jago-jago amat yaudah lah ya tulis aja write-up nya semoga aja berguna buat yang baru belajar kaya saya.
Capture The Flag (CTF)
CTF adalah salah satu jenis dari kompetisi hacking yang dimana mengharuskan seorang/tim untuk mengambil sebuah file/string yang sudah disembunyikan sistem yang dimana disebut dengan istilah “Flag”.
Untuk tipe CTF kali ini adalah jeopardy, menggunakan server untuk menyimpan soal yang bisa berbentuk web exploitation, reverse engineering, binary exploitation, forensic, cryptography, steganography, dan lain lain dengan tujuan yang tetap sama yaitu mencari string/flag yang disembunyikan oleh server.
1. Hash Hash Hashoo (Web)
Diberikan tampilan web soal berupa source code di bawah ini.
Setelah saya analisa ternyata terdapat if yang mengharuskan hash nya sama, dan if yang mengharuskan value tidak boleh sama.
Saya mencari kesana kesini dan mulai membaca mulai dari md5 collision dan php juggling loose comparison, ternyata saya temukan ketika kita berikan inputan berupa array pada fungsi get di parameter url tersebut akan selalu menghasilkan nilai true.
Sehingga menjadi: http://128.199.104.41:27824/?a[]=a&b[]=b
Flag: COMPFEST12{md5_hashing_php_is_so_bad_3087c22}
2. Only Admin (Web)
Saat membuka web tersebut hanya terdapat tampilan seperti ini
Saya melihat source code nya juga tidak ada yang aneh
Lalu coba saya berbagai macam link url pada umumnya untuk masuk ke halaman lain atau login admin namun tetap tidak bisa dan menghasilkan 404 not found pada tampilannya.
Saya pun mencoba melihat header dari web tersebut ketika mengirimkan dan menerima request.
Ternyata header tersebut mengirimkan request dengan cookie admin bernilai False. Saya gunakan fitur dari Mozilla Firefox untuk Edit and Reply request tersebut dan mengganti nilai Cookie Admin menjadi True.
Lalu saya lihat respon balasan dari request yang baru saya kirim.
Flag: COMPFEST12{congratz_haha_ez_admin_1ce9307db61}
3. Only Admin 2 (Web)
Kali ini dengan judul yang sama namun versi kedua, setelah saya buka ternyata menampilkan tampilan yang sama namun sepertinya ada salah penulisan pada tittle web tersebut yang seharusnya 2 menjadi 3.
Langsung saya buka kembali bagian header request dari web tersebut, ternyata menampilkan request yang berbeda dari yang sebelumnya.
Saya melihat masih dengan cookie admin yang di setting false, namun sekarang menggunakan JWT (JSON Web Token), sehingga tidak bisa mengganti value dari cookie maupun JWT karena sudah ter-Encode.
Saya coba kembali untuk melihat lihat source code.
Tidak terdapat sesuatu yang aneh juga. Saya cari kembali apakah ada halaman login untuk admin atau halaman lainnya.
Ternyata tidak ada juga, namun saya menemukan hal yang menarik disini yaitu debug modenya aktif, sehingga saat terdapat error manampilkan profiler server web tersebut.
Setelah melihat-lihat seluruh isi dari panel side bar, ada sesuatu yang dapat digunakan, yaitu secret key dari JWT yang nantinya dapat digunakan untuk melakukan encoding ulang.
Setelah mendapat secret key dari JWT, saya membuka situs https://www.jsonwebtoken.io/ untuk melihat isi payload dan melakukan encoding ulang.
Saya ubah nilai is_admin menjadi True dan mendapat JWT String yang baru untuk kemudian dipakai membuat request.
Lihat responnya.
Flag: COMPFEST12{wanjir_gua_lupa_set_debug_nya_jadi_false_79f2622f}
4. Ketik Ketik (Web)
Diberikan tampilan website seperti dibawah ini, ternyata permainan mengetik dengan mengharuskan 100% akurasi di bawah 2 detik untuk mendapatkan flagnya.
Saya mencoba untuk melakukan game nya dengan benar, namun sudah pasti tidak bisa dibawah 2 detik.
Saya coba lagi dibawah 2 detik dengan kata bebas/ngawur, namun tetap tidak bisa.
Saya mencoba menganalisis engine dan teknologi yang diapakai web tersebut, ternyata menggunakan react untuk front end dan python dengan framework flask.
Saya coba untuk melihat saat saya menyelesaikan permainan tersebut akan dikirim kemana hasilnya, ternyata terdapat 2 jenis yaitu option dan post, pada post bisa dilihat request bodynya berupa json, yaitu berisi benar salah jawaban, dan lama kita mengetik.
Jika benar menghasilkan payload -2 dan jika salah -1.
Saya menggunakan edit and reply dan mengubah nilai -1 menjadi -2 semua dan waktunya menjadi kurang dari 2 detik.
Saya lihat responnya.
Flag: COMPFEST12{you_sneaky_hacker_you!}
5. Unyu (Reverse Engineering)
Diberikan tampilan pada sebuah web untuk mencoba validasi flagnya.
Jika dilihat pada console maka disitu terdapat array yang menampung flag dan harus mencocokkannya.
Karena menggunakan Javascript maka pasti source code terdapat disisi user, dan dapat dilihat source code javascript tersebut.
Saya melihat satu persatu javascriptnya dan mendapatkan bahwa array flag tersebut tersimpan pada http://128.199.104.41:23400/static/js/main.f4f188a2.chunk.js.
Saya menggunakan Javascript beautifier agar lebih mudah dibaca.
Setelah saya analisis, saya coba membuat coding reversenya.
Dengan memasukkan satu persatu arraynya maka akan mengeluarkan hasil dari array tersebut kedalam sebuah huruf/angka/symbol.
Setelah mencoba semua array nya didapatkan hasilnya.
Flag: COMPFEST12{tH3_c4T_15_v3rY_cutt}
Yah mungkin itu saja yang bisa saya share, semoga bisa bermanfaat dan menambah ilmu. Semangat belajar dan terus berkembang! :)
Thanks to tim saya TrioWKWK
Github: https://github.com/w4h4z/