W1-D3 Pemeriksa Kredensial
Detail Soal
| Field | Value |
|---|---|
| Nama Challenge | W1-D3: Pemeriksa Kredensial |
| Kategori | Reverse Binary |
| Event | ZERO DAY Mini Games 2026 |
| File | pemeriksa_kredensial |
Deskripsi Singkat
Pada challenge W1-D3: Pemeriksa Kredensial, diberikan sebuah binary bernama pemeriksa_kredensial. Binary ini meminta input kredensial, lalu menentukan apakah input tersebut benar atau salah. Tujuan dari challenge ini adalah melakukan analisis reverse engineering untuk mengetahui kredensial yang valid.
Analisis Awal
Pertama, saya menjalankan pengecekan awal terhadap binary menggunakan perintah file.
file pemeriksa_kredensial
Hasilnya menunjukkan bahwa file merupakan binary ELF 64-bit untuk Linux dan tidak ter-strip, sehingga nama fungsi masih dapat terlihat saat dianalisis.
Selanjutnya, saya menggunakan strings untuk melihat string yang tersimpan di dalam binary.
strings pemeriksa_kredensial
Dari hasil tersebut ditemukan beberapa string menarik seperti:
ADMIN-CREDENTIAL-2026
ROOT-ACCESS-TOKEN
fWQza2M0cmNfbjE0aGNfNDYzczRiXzNzcjN2M3J7Z2FsZg==
Dua string pertama terlihat seperti kredensial, tetapi kemungkinan hanya decoy atau pengalih perhatian. String ketiga terlihat seperti Base64 karena memiliki pola karakter Base64 dan diakhiri dengan tanda ==.
Langkah Penyelesaian
Binary kemudian dianalisis lebih lanjut menggunakan objdump.
objdump -d -Mintel pemeriksa_kredensial
Dari fungsi main, ditemukan bahwa program melakukan beberapa proses terhadap input pengguna. Alurnya adalah:
- Program menerima input dari user.
- Karakter newline dihapus.
- Input dibalik menggunakan fungsi
reverse_str. - Hasil reverse kemudian di-encode menggunakan fungsi
b64_encode. - Hasil encoding dibandingkan dengan string Base64 yang tersimpan di binary.
String pembanding yang ditemukan adalah:
fWQza2M0cmNfbjE0aGNfNDYzczRiXzNzcjN2M3J7Z2FsZg==
Karena program melakukan proses:
input → reverse → base64 encode → compare
maka untuk mendapatkan input asli, urutan tersebut harus dibalik:
base64 decode → reverse
Saya menggunakan Python untuk melakukan decoding.
python3 -c 'import base64; s="fWQza2M0cmNfbjE0aGNfNDYzczRiXzNzcjN2M3J7Z2FsZg=="; print(base64.b64decode(s).decode())'
Hasil decode Base64:
}d3kc4rc_n14hc_463s4b_3sr3v3r{galf
Hasil tersebut masih dalam kondisi terbalik, sehingga perlu dibalik lagi.
python3 -c 'import base64; s="fWQza2M0cmNfbjE0aGNfNDYzczRiXzNzcjN2M3J7Z2FsZg=="; print(base64.b64decode(s).decode()[::-1])'
Hasil akhirnya adalah:
flag{r3v3rs3_b4s364_ch41n_cr4ck3d}
Setelah input tersebut dimasukkan ke program, binary menampilkan pesan bahwa kredensial benar dan akses diberikan.
printf 'flag{r3v3rs3_b4s364_ch41n_cr4ck3d}\n' | ./pemeriksa_kredensial
Output:
Kredensial benar! Akses diberikan.
Flag
flag{r3v3rs3_b4s364_ch41n_cr4ck3d}
Kesimpulan / Hal yang Dipelajari
Pada challenge ini, flag tidak langsung tersimpan dalam bentuk plaintext. Binary melakukan beberapa lapisan transformasi, yaitu membalik input lalu melakukan encoding Base64 sebelum membandingkannya dengan nilai yang sudah disimpan. Dari challenge ini dipelajari bahwa saat melakukan reverse engineering, penting untuk memahami urutan transformasi yang dilakukan program. Untuk mendapatkan nilai asli, proses tersebut harus dibalik dengan urutan yang berlawanan.