← writeups

Forensics · Medium · DCSC · Jul 01, 2026

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`.

  • FORENSICS
  • PCAP
  • MISC
  • MEDIUM

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

Sepuh Forensik — figure 1

Analisis Awal PCAP

Pertama buka forensic.pcapng di Wireshark. Di situ banyak traffic HTTP random ke domain umum seperti:

  • google.com

  • facebook.com

  • instagram.com

  • twitter.com

  • github.com

  • stevenjr.space

Sepuh Forensik — figure 2

Traffic-nya rame banget, tapi sebagian besar cuma noise. Kita coba follow stream http terus-terusan.

Sepuh Forensik — figure 3

Nah, di stream ke 94 ada request POST ke:

text
internal-portal.local/login.php

Isi POST-nya:

text
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.

Sepuh Forensik — figure 4

Di stream 95 ada juga request ke:

text
/search?q=SCTF{fake_flag_ini_jebakan_bro}

Kalau ini sih fake flag yak.

Sepuh Forensik — figure 5

Ekstraksi PNG dari Stream 96

Di stream 96 ada response HTTP:

text
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.

Sepuh Forensik — figure 6Kita export gambarnya terlebih dahulu, sekalian dengan login.php karena kena juga.

Sepuh Forensik — figure 7

Ternyata, gambarnya ada QR Code yang rusak..

Sepuh Forensik — figure 8

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

Sepuh Forensik — figure 9

Ini hasilnya:

Sepuh Forensik — figure 10

Setelah dibenerin/recover, QR menghasilkan string Base64 panjang:

text
RUVSRFlKWUlMUkpBRU5BQUhZS1ZTRTJCQjVPUVFPQldBTkFWQVdRQUhCT0ZBTEtWQVVZUU1CWjZBSUtDQVBRQUtGSkVVV0syS0lIQT09PT0=

Trial 1 - Decode Base64

Karena string QR diakhiri =, dan karakternya cocok format Base64, langkah pertama paling masuk akal adalah decode Base64.

Cyberchef:

Sepuh Forensik — figure 11

Hasil:

text
EERDYJYILRJAENAAHYKVSE2BB5OQQOBWANAVAWQAHBOFALKVAUYQMBZ6AIKCAPQAKFJEUWK2KIHA====

Oke, ini sepertinya dijalan yang benar.

Trial 2 - Decode Base32

Sepuh Forensik — figure 12

Decode Base32:

Sepuh Forensik — figure 13

Hasilnya bukan plaintext:

text
!"<'\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.

python
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.

Sepuh Forensik — figure 14

Nah, ketemu deh.

Sepuh Forensik — figure 15

flag

export & files

all writeups →

0x06 / contact

Say hi.

CTF team invites, collabs, or a challenge you think I can't pwn. I read everything.

Elang Dimas Syadewa

available · Malang

    Open email

    Your email app will open with a draft. Review it and press Send there.