Forensics · DCSC · Medium · 2026-07-01

Sepuh Forensik

Di chall ini kita dikasih `forensic.pcapng` yang awalnya keliatan rame banget karena banyak traffic HTTP random. Setelah dipilah, ada beberapa hal yang mencurigakan: login ke `internal-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

Di chall ini kita dikasih forensic.pcapng yang awalnya keliatan rame banget karena banyak traffic HTTP random. Setelah dipilah, ada beberapa hal yang mencurigakan: login ke internal-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:

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:

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}