Halo temen temen cyber sec, karena berhubung kemaren lalu aku share suatu challenge dengan kategori Reverse Engineering di group Bhineka Tech jadi disini aku akan ngebahas gimana sih cara solve challenge tersebut.

Bisa dibaca pada hint dan deskripsi dari challenge disana tertulis jika kita diharuskan untuk membongkar suatu executable file yang diberikan untuk mendapatkan suatu flag dan disitu aku juga menuliskan hint REST API yang nantinya ini bakal berguna saat kita memulai untuk melakukan analysis.

Karena banyak sekali yang mengeluh RE itu suatu topik yang sulit dan memang benar kalo misalkan kita tidak punya pengetahuan dasar jadi disarankan sebelum temen temen belajar Reverse Engineering ada baiknya temen temen mempelajari dulu beberapa konsep dasar dan fundamental tentang programming, memory layouting, cara kerja compiler/linker dan yang lebih penting bagaimana suatu program itu dibuat agar lebih memahami flownya.

Oke kembali ke topik utama, pertama kita lakukan download dulu file .exe pada URL yang diberikan dan langkah awal kita langsung jalankan programnya untuk melihat fungsi dari programnya

Programnya sangat sederhana yaitu dalam UI-nya ada textbox dan suatu button dimana jika dilihat pada labelnya kita diharuskan untuk meng-inputkan suatu License Key.

Jika dilihat pada archive zipnya didalam folder re_chall terdapat 2 libray atau DLL(dynamic library link) yaitu libcurl.dll dan zlib1.dll dimana DLL file ini digunakan untuk external library yang mana function-function dari .dll file ini digunakan didalam source code pada program yang mana jika kita menghapus .dll file ini program akan error, jelas saja karena memang ini file krusial yang di include oleh program.

Disini untuk identifikas awal kita bisa menggunakan command file untuk mengetahui deskripsi dari executable

Jika dilihat dari output command file menunujukkan x86-64 Mono/.Net assembly yang arinya merupakan binary yang di build diattas plaform .NET dimana .NET merupakan suatu  plaform open source yang menyediakan fungsionalitas seperti libray, dependency, module dsb unttuk membuat suatu aplikasi dan bahkan .NET bisa berajalan pada cross platform.

Disini kitta mengetahui jika executable ini di compile menggunakan .NET SDK jadi untuk memulai RE kita bisa menggunakan tools .NET decompiler dan disini kita akan menggunakan salah satu tools yang powerfull yaitu dnSpy yang berfungsi untuk debugger dan assembly editor pada aplikasi yang di build menggunakan .NET

Setelah dibuka pada dnSpy kita bisa melihat dan explore component yang digunakan pada program disitu ada berbagai macam, untuk text program menggunakan label, untuk input menggunakan textbox dan disitu juga disertakan name pada masing masing component. Disini kita akan fokus pada submit_click yaitu component button karena kita tau dalam program setelah dilakukan submit button program akan melakukan action untuk validasi license key.

Hasil decompile dari code yang terdapat pada form submit_click yang pastinya sangat tidak readable ya disini karena hasil decompiling ini merupakan suatu pseudo code bukan code aslinya jadi kita akan melakukan static analysis manual dengan mencoba membaca result codenya

Disini sangat jelas jika program menggunakan bahasa c++ karena ada beberapa namespace c++ yang dipanggil seperti std::char dan std::string.

Saat melakukan source code review disini ditemukan suatu instansiasi libcurl bisa terlihat pada function curl_easy_init() dan curl_easy_setopt, seperti yang tertulis pada hint yaitu REST API yang mungkin program melakukan suatu request HTTP jadi mari coba kita lakukan capture pada wireshark

 

Dan tidak ada result pada saat di filter di protocol HTTPhmm jadi mungkin saja memang host sudah memakai SSL jadi kita coba saja filter menggunakan protocol SSL/TLS

dan ya banyak sekali outputnya jadi kita perlu melakuan filter manual untuk menemukan suatu endpoint REST API dan karena memakai SSL semua request di enkripsi jadi disini kita tidak bisa melihat raw plain-text dari http request tapi dari sini kita bisa menemukan IP address beserta alamat port yang digunakan pada program

Jika kita melihat lagi lebih jauh disini ditemukan ada suatu SSL handshaking pada IP address 103.84.207.73 di pot 3000 dan jika kita melihat SNI(server name indication) yang merupakan extension dari protokol TLS yang menunjukkan cyber-uph.lol jadi kita akan coba akses melaui browser pada https://cyber-uph.lol:3000

Tetapi pada saat diakses dari browser di homepage-nya terdapat response 404 dan juga pada header http disana ter-include X-Powered-By: Express yang bisa disimpulkan jika backend dibuat menggunakan node.js framework yaitu express.

Disini kita perlu mengetahui path endpoint yang digunakan untuk melakukan validasi license key jadi kita akan melakukan analysis lebih lanjut lagi pada program dan jika kita mencoba membaca pada instance curl kita menemukan deklarasi URL di function curl_easy_setopt

yang mana stiring ??_C@_0CH@MEIFFGMC@https?3?1?1cyber?9uph?4lol?33000?1priv@ jika kita bersihkan menjadi https://cyber-uph.lol:3000/priv dan pada saat diakses tetap saja response masih menunjukkan 404 jadi cara cepatnya kita bisa menggunakan utility string dan grep pada string cyber-uph.lol

Dan sekarang ditemukan endpoint yang benar dan langsung coba kita akses pada browser

Sepertinya memerlukan semacam authorization untuk mengakses endpoint /privateData dimana hal ini disebut basic http authentication jadi kita memerlukan suatu credential agar bisa mengakses endpoint tersebut jadi kita perlu analisys lagi

Jika kita explore lagi pada pseudo code kita bisa melihat disana ada suatu user defined function yaitu base64coyy yang kemungkinan besar program melakukan encode dan decode memakai base64

Nah disini ada suatu deklarasi array dan juga while loop untuk operasi string dimana kita bisa melihat dari string yang di assign pada variable untuk membaca string kita perlu mengikuti pola decompiler

Kita bisa melihat pola string seperti ??_C@_0L@KGCJHHFD@keyLicense@; yang sebenarnya string asli merupakan KeyLicense jadi patternya ??_@string_sampah@string_aslinya@ jadi kita bisa langsung mengambil string aslinya

Jika kita melihat pada operasi berikut sederhananya operasi tersebut melakukan append string karena memang hasil dari decompile terlihat sangat rumit jadi kita sekarang mencoba membuka pada hex editor dari string tersebut

Karena tadi kita mendapatkan petujuk yaitu function base64coyy sekarang kita perlu identifikasi string dengan encoding base64 dan kita menemukan 3 string yaitu:

y92cwwGZ

uxWYrFmYhJl

cwMXYn5GM3pDajVGdphmY

Tetapi pada saat dilakukan decode encoding bukan base64 dan menampilkan invalid input

Dan jika kita melihat lagi pada source code terdapat function strrev yang mengambil argument dari string base64 yang di append jadi kita bisa coba melakukan reverse/membalikkan string agar dapat kita lakukan decoding

Saat dilakukan pembalikkan string, kita berhasil melakukan decode dengan plaint-text bhitech:w0ngas0rRabakalndl0sor jadi memang pada http auth username dan password dilakukan pemisahan pada character : artinya berarti bhitech merupakan username dan w0ngas0rRabakalndl0sor adalah passwordnya jadi langsung kita coba pada http auth

hmm ternyata masih gagal atau username/password salah yang berarti analysis static saja belum cukup jadi kita langsung mulai menggunakan x64dbg untuk analysis dynamic yaitu analysis program pada saat runtime/berjalan

Kita buka dan running pada x64dbg dan melihat behaviour pada program saat berjalan, lalu kita trace dan melihat informasi data di stack dan memory

Disini kita menemukan string base64 encode beserta plaintext-nya yaitu YmhpdGVjaDp3MG5nYXMwclJhYmFrYWxuZGwwc29y dan bhitech:w0ngas0rRabakaln artinya sebenarnya flow kita memang sudah benar tetapi compiler dan linker memotong string password yang sebenernya w0ngas0rRabakalndl0sor menjadi w0ngas0rRabakaln

Pada saat login menggunakan credential yang kita dapatkan hasilnya valid dan bisa dilihat REST API tersebut menyimpan kumpulan license key dan sekarang kita coba ambil 1 untuk diinputkan pada program

Dan kita coba cek dari footer response API untuk mendapatkan flagnya

bhitech{Al0n-al0n-pok0k-k3l4k0n}

Penutup

Oke jadi itu saja mungkin WriteUP pada challenge RE kali ini semoga teman teman banyak belajar juga dan lebih memahami konsep Reverse Engineering. ya sebenarnya ada reward 70K untuk yang pertama kali solve tapi berhubung tidak ada yang solve jadi uangnya mungkin nanti ku pake beli kopi golda sama rokok dan bengong mikirin dunia didepan indomaret aja hehe

 

“Kamu tidak perlu menjadi luar biasa untuk memulai, tapi kamu harus memulai untuk menjadi luar biasa.” – Zig Ziglar

By xpl0dec

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *