You Cant C Me
HackTheBox Reversing Challenge
You Cant C Me adalah soal CTF kategori Reversing dengan tingkat kesulitan Easy. Soal ini dibuat oleh MinatoTW dan telah dirilis pada 13 April 2021.
Berikut adalah deskripsi dari tantangan ini:
Can you see me?
Introduction
Setelah mengesktrak archive soal, saya menemukan satu file bernama auth.
β ls -lah
total 28K
drwxrwxr-x 3 kali kali 4.0K Mar 5 05:06 .
drwxrwxr-x 5 kali kali 4.0K Mar 5 05:03 ..
-rwxr-xr-x 1 kali kali 15K Dec 1 2020 auth
β file auth
auth: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, strippedFile ini merupakan executable Linux berformat ELF 64-bit LSB PIE. Selain itu, file ini telah di-strip sehingga nama fungsi tidak tersimpan.
Ketika menjalankan program ini, saya mencoba menginput "test" dan hasilnya program memberikan respons:
I said, you can't c me!Penggunaan perintah strings tidak menemukan hal yang menarik. Terdapat string "this_is_the_password", ketika saya mencoba menginputkannya, program tetap memberikan respons yang sama (gagal).
β strings auth
..<SNIPPED>..
Welcome!
I said, you can't c me!
HTB{%s}
this_is_the_password
m^&&fi
Uo&kUZ'ZUYUc)
;*3$"
..<SNIPPED>..Proof of Concept
1. Analisis dinamis dengan ltrace
Untuk mendapatkan string yang valid, saya melakukan pengujian dinamis menggunakan ltrace. Dengan alat ini, saya dapat melihat fungsi-fugnsi yang dipanggil ketika program berjalan.
Terlihat bahwa program melakukan validasi input dengan menggunakan fungsi strcmp, yang membandingkan input pengguna dengan string "wh00ps!_y0u_d1d_c_m3". Ketika saya menginputkan string tersebut, program akan menampilkan flag.
2. Analisis statik dengan decompiler
Karena program telah di-strip, saya harus melihat setiap fungsi untuk menentukan mana yang merupakan fungsi utama. Setelah melihat-lihat, saya menemukan fungsi FUN_00401160(void) yang memiliki string "I said, you can't c me!".
Untuk mempermudah analisis, saya mengubah beberapa nama variabel sehingga terlihat seperti berikut:
Dari sini, saya dapat menyimpulkan bahwa terdapat string terenkripsi, yaitu:
0x5517696626265e6d
0x555a275a556b266f
0x29635559
Untuk mendapatkan hasil dekripsi, kita harus menambahkan nilai \n (nilai ASCII 10) ke setiap karakter.
Dari hasil analisis ini, saya mencoba merekode program tersebut menggunakan bahasa C sehingga terlihat seperti berikut:
Hasilnya:
Last updated