[HackToday 2019 Qualification] – nani the fuk

 

Diberikan sebuah soal berbentuk binary, binary dapat di download di: https://s.id/6aIo7

Jika binary dieksekusi maka binary akan meminta input, setelah mencoba inputan, ternyata program hanya menerima input 1 karakter, seperti berikut

Ketika input yang dimasukan salah maka program akan exit. Program tersebut terlihat seperti akan meminta input 1 karakter sebanyak 20 kali seperti yang terlihat pada gambar. Untuk mengetahui lebih lanjut, maka kita harus menganalisa asemmblynya, apa yang terjadi jika input benar dan salah.

Setelah dianalisa, program menyimpan input yang kita masukan ke dalam ‘qword_4068’, dan setelah itu input kita akan di proses dengan shl dan xor seperti berikut ini,

 

Namun ketika diteliti lebih lanjut, return yang dikeluarkan program akan selalu sama, sampai kita memasukan inputan sebanyak 20 kali. Dibuktikan dengan informasi berikut,

Pada pertama kali program dimulai, program melakukan syscall pada ‘a0120’, setelah inputan diproses dan benar, maka akan dilanjutkan pada ‘a0220’.dst. Karena output yang diberikan program akan selalu sama sampai inputan ke-20, maka kita dapat melakukan bruteforce dengan output program sebagai acuan true or false, dengan code berikut:

Dengan code tersebut kita membruteforce program dengan module subprocess untuk open binary tersebut dan string untuk membuat charset yang digunakan untuk melakukan input char per char yang diambil dari variable charset [a-z,A-Z,0-9 dan _] yang merupakan karakter yang printable dan biasanya terkandung dalam flag. Lalu dilakukan bruteforce dengan looping sebanyak charset dengan membandingkan angka output program sebagai acuannya, jika bertambah / lebih besar dari variable param sebelumnya, berarti char yang diinput adalah benar dan disimpan kedalam variable flag, dan update variable param sebagai acuan next brute, serta set variable x menjadi 0, agar mengulang kembali dari charset ‘a’, hingga variable x == len(charset) yang berarti bruteforce telah selesai.

Kita jalan kan code berikut, dan hasilnya:

Flag berhasil didapatkan! hacktoday{s1g_c0ntorl_fl0w_xD_}

 

Leave a Reply

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