Project

Ph4nt0m 1ntrud3r — picoCTF 2025: Network Forensics

Analisis PCAP file untuk menemukan flag yang disembunyikan dalam TCP segment data — mencakup filtering paket, decoding hex, dan rekonstruksi Base64.

🔍 Introduction

Introduction

Challenge Ph4nt0m 1ntrud3r mengajak kita untuk menganalisis file PCAP — sebuah rekaman lalu lintas jaringan — untuk menemukan flag yang disembunyikan oleh attacker.

Yang menarik dari challenge ini: flag-nya tidak langsung tersimpan dalam satu paket. Attacker sengaja memecah dan menyembunyikan flag ke dalam beberapa paket TCP secara tidak berurutan. Kita harus:

  1. Menemukan paket-paket yang relevan
  2. Mengekstrak data dari dalamnya
  3. Mendekode dari format hex → Base64 → teks asli
  4. Menyusun ulang potongan-potongan tersebut menjadi flag yang utuh

Tools yang dibutuhkan:

ToolFungsi
tsharkAnalisis PCAP via command line
xxdKonversi hex ke binary/ASCII
base64Decode Base64 string
sortMengurutkan berdasarkan timestamp
awkMengambil field tertentu dari output

Belum punya tshark? Install dengan: sudo apt install tshark


🧩 Step-by-Step Solution

Step 1 — Download & Buka File PCAP

Download file myNetworkTraffic.pcap dari link yang diberikan di challenge, lalu pindahkan ke direktori kerja kamu. Dalam contoh ini kita simpan di ~/Downloads.

1
2
cd ~/Downloads
ls -lh myNetworkTraffic.pcap

Sebelum langsung filter, ada baiknya kita lihat dulu gambaran umum isi file ini — paket apa saja yang ada di dalamnya.

1
tshark -r myNetworkTraffic.pcap -T fields -e tcp.segment_data

Penjelasan command:

  • -r myNetworkTraffic.pcap → baca file PCAP ini
  • -T fields → tampilkan hanya field tertentu, bukan output lengkap
  • -e tcp.segment_data → tampilkan isi data/payload dari tiap paket TCP

Output awal tshark Hasil output mentah — deretan hex string dari tiap paket TCP

Hasilnya adalah deretan hex string yang merupakan isi dari masing-masing paket. Terlihat banyak paket, tapi kita belum tahu mana yang relevan.


Step 2 — Filter Paket yang Relevan

Setelah melihat outputnya, kita perlu menyaring hanya paket yang mengandung data flag. Caranya dengan memfilter berdasarkan panjang TCP payload.

Dalam challenge ini, paket yang relevan adalah yang memiliki panjang 12 byte atau 4 byte.

1
tshark -r myNetworkTraffic.pcap -Y "tcp.len==12 || tcp.len==4" -T fields -e tcp.segment_data

Penjelasan tambahan:

  • -Y "tcp.len==12 || tcp.len==4" → filter display: hanya tampilkan paket TCP dengan payload sepanjang 12 atau 4 byte

Output setelah filter panjang paket Jumlah paket berkurang signifikan setelah difilter

Hasilnya sudah jauh lebih sedikit. Tapi outputnya masih berupa hex — belum bisa dibaca.


Step 3 — Konversi Hex ke ASCII

Kita sambungkan output tadi ke xxd -r -p untuk mengubah hex menjadi teks yang bisa dibaca.

1
tshark -r myNetworkTraffic.pcap -Y "tcp.len==12 || tcp.len==4" -T fields -e tcp.segment_data | xxd -r -p

Penjelasan xxd -r -p:

  • -r → mode reverse: ubah hex dump kembali ke binary/ASCII
  • -p → plain hex input (tanpa offset atau kolom samping)

Output setelah konversi hex ke ASCII Teks sudah terbaca, tapi masih dalam format Base64

Hasilnya sekarang terlihat seperti string Base64 — ditandai dengan karakter = atau == di akhir tiap potongan. Tapi urutannya masih acak!


Step 4 — Urutkan Berdasarkan Timestamp

Masalahnya: paket-paket ini tidak terurut berdasarkan waktu saat dibaca. Jika kita langsung decode, flag yang kita dapat tidak akan berurutan.

Solusinya: tambahkan field frame.time ke output, lalu sort berdasarkan timestamp sebelum decode.

1
2
3
4
5
6
7
8
9
tshark -r myNetworkTraffic.pcap \
  -Y "tcp.len==12 || tcp.len==4" \
  -T fields \
  -e frame.time \
  -e tcp.segment_data \
  | sort -k4 \
  | awk '{print $6}' \
  | xxd -p -r \
  | base64 -d

Penjelasan tiap bagian:

BagianFungsi
-e frame.timeAmbil timestamp tiap paket
sort -k4Urutkan berdasarkan kolom ke-4 (bagian waktu dari timestamp)
awk '{print $6}'Ambil kolom ke-6 saja, yaitu hex data payload
xxd -p -rKonversi hex → binary
base64 -dDecode Base64 → teks asli

Output setelah sort dan decode Flag muncul setelah paket diurutkan dan di-decode


Step 5 — Rekonstruksi Flag

Hasil decode menghasilkan potongan-potongan seperti ini:

Base64Decoded
cGljb0NURg==picoCTF
ezF0X3c0cw=={1t_w4s
bnRfdGg0dA==nt_th4t
XzM0c3lfdA==_34sy_t
YmhfNHJfOQ==bh_4r_9
NjZkMGJmYg==66d0bfb
fQ==}

Susun potongan-potongan tersebut secara logis berdasarkan konteks kalimat:

1
picoCTF + {1t_w4s + nt_th4t + _34sy_t + bh_4r_9 + 66d0bfb + }

Flag: picoCTF{1t_w4snt_th4t_34sy_tbh_4r_966d0bfb}

Terjemahan tersembunyi dari flagnya: “It wasn’t that easy, to be honest.” — pesan dari si pembuat soal.


Penutup & Kesimpulan

Chall Solved

Challenge Ph4nt0m 1ntrud3r mengajarkan kita bahwa data tidak selalu tersimpan dalam satu tempat yang mudah ditemukan. Attacker bisa menyembunyikan informasi dengan cara:

  1. Memecah data menjadi potongan-potongan kecil
  2. Mengenkode tiap potongan dalam format Base64
  3. Mengirimnya secara tidak berurutan melalui jaringan

Untuk mengungkapnya, kita butuh pendekatan yang sistematis:

  • Filter dulu paket yang benar-benar relevan — jangan langsung olah semua paket
  • Perhatikan timestamp — urutan pengiriman paket sangat penting untuk rekonstruksi data
  • Kenali encoding — Base64, hex, dan format lainnya adalah teknik umum dalam CTF maupun serangan nyata

Satu hal yang menarik dari challenge ini: tshark saja sudah cukup untuk menyelesaikan semuanya. Kita tidak butuh tool berat — cukup pahami alur data dari paket ke flag, lakukan satu pipeline command yang tepat, dan flag pun terbuka.