Sepuh Forensik
Di chall ini kita dikasih
forensic.pcapngyang awalnya keliatan rame banget karena banyak traffic HTTP random. Setelah dipilah, ada beberapa hal yang mencurigakan: login keinternal-portal.local/login.php, fake flag yang jelas-jelas jebakan, dan file PNG yang dikirim lewat TCP stream 96. PNG itu ternyata berisi QR code rusak/kurang kebaca, jadi perlu direcover dulu. Setelah QR kebaca, datanya masih belum langsung jadi flag karena masih berlapis Base64, Base32, lalu XOR. Key XOR-nya diambil dari password login yang ketangkep di traffic:rahasia.
Sepuh Forensik
Analisis Awal PCAP
Pertama buka forensic.pcapng di Wireshark. Di situ banyak traffic HTTP random ke domain umum seperti:
google.comfacebook.cominstagram.comtwitter.comgithub.comstevenjr.space
Traffic-nya rame banget, tapi sebagian besar cuma noise. Kita coba follow stream http terus-terusan.
Nah, di stream ke 94 ada request POST ke:
internal-portal.local/login.php
Isi POST-nya:
username=admin&password=rahasia&submit=Login
Ini langsung masuk daftar hal penting, karena di CTF forensic, credential yang kelihatan jelas di traffic sering banget bukan pajangan doang. Minimal dia bisa jadi clue, key, atau pivot ke tahap berikutnya.
Di stream 95 ada juga request ke:
/search?q=SCTF{fake_flag_ini_jebakan_bro}
Kalau ini sih fake flag yak.
Ekstraksi PNG dari Stream 96
Di stream 96 ada response HTTP:
HTTP/1.1 200 OK
Content-Type: image/png
Content-Disposition: attachment; filename=secret_evidence.png
Content-Length: 5049
Karena content type-nya PNG dan filename-nya secret_evidence.png, file ini diekspor dari Wireshark.
Kita export gambarnya terlebih dahulu, sekalian dengan login.php karena kena juga.
Ternyata, gambarnya ada QR Code yang rusak..
QR-nya tidak langsung kebaca normal, sebenarnya, aku mau ngerecovery QR ini menggunakan QRazyBox. Tapi websitenya error, alhasil aku meminta claude untuk recover QR ini.
https://claude.ai/share/a9af7246-d5f4-4f16-844b-97f18a1ebcb6
Ini hasilnya:
Setelah dibenerin/recover, QR menghasilkan string Base64 panjang:
RUVSRFlKWUlMUkpBRU5BQUhZS1ZTRTJCQjVPUVFPQldBTkFWQVdRQUhCT0ZBTEtWQVVZUU1CWjZBSUtDQVBRQUtGSkVVV0syS0lIQT09PT0=
Trial 1 - Decode Base64
Karena string QR diakhiri =, dan karakternya cocok format Base64, langkah pertama paling masuk akal adalah decode Base64.
Cyberchef:
Hasil:
EERDYJYILRJAENAAHYKVSE2BB5OQQOBWANAVAWQAHBOFALKVAUYQMBZ6AIKCAPQAKFJEUWK2KIHA====
Oke, ini sepertinya dijalan yang benar.
Trial 2 - Decode Base32
Decode Base32:
Hasilnya bukan plaintext:
!"<'\R4>YA]86APZ8\P-U1> >QRJYZR
Di sini sempat keliatan kayak dead end, tapi sebenernya justru makin jelas: ini kemungkinan ciphertext. Kita disuruh ngawang di sini.
Trial 3 - Coba Cari Pola Cipher
Karena hasil Base32 berupa byte non-printable, beberapa kemungkinan muncul:
XOR
AES/crypto lain
data compressed
QR-nya masih salah
perlu key dari artefak lain
Aku cek dulu kemungkinan sederhana. Untuk CTF forensic, kalau ada credential di traffic dan ada ciphertext pendek, XOR dengan password adalah tebakan yang worth it banget.
Sebenarnya aku ada 1 yang mengganjal sih, yaitu login.php tadi.
POST /login.php HTTP/1.1
Host: internal-portal.local
Content-Type: application/x-www-form-urlencoded
Content-Length: 44
username=admin&password=rahasia&submit=Login
Di sini ada password=rahasia, ini seperti key. Meskipun cuman asumsi, tapi layak untuk dicoba.
Nah, ketemu deh.
Flag
SCTF{53pUh_f0r3n5iK_b312aK51_4mPun_puH_s838823}