challenge

Tantangan Capture The Flag

Keamanan siber dari berbagai sisi dalam satu tempat: serang target latihan sebagai red team, selidiki insiden sebagai blue team, dan kumpulkan petunjuk dari sumber terbuka lewat OSINT. Setiap tantangan punya petunjuk bertahap beserta tools yang bisa dipakai.

0/6 selesai · 0 poin

Red Team

Berpikir seperti penyerang: rekon, cari celah, eksploitasi.

red-01Mudah100 poin

Staging yang Lupa Dibersihkan

Skenario
Anda disewa untuk uji penetrasi PT NusaLogistik (fiktif). Satu-satunya titik masuk dalam cakupan adalah portal karyawan versi staging. Form login-nya dimatikan, tapi developer terkenal suka meninggalkan jejak.
Misi
Lakukan rekon pada portal, temukan berkas konfigurasi yang bocor, lalu ambil flag yang tersembunyi di dalam token layanan.
Berkas & target
Format flag
FLAG{...}

Petunjuk Buka satu per satu hanya bila buntu.

Petunjuk 1 — Mulai dari yang terlihat

Halaman yang terlihat kosong sering menyimpan catatan di kode sumbernya. Baca HTML-nya, bukan tampilannya.

Tools
  • View Source (Ctrl+U) — membaca HTML mentah, termasuk komentar <!-- -->
  • DevTools → Elements — memeriksa elemen dan komentar di DOM
  • curl — curl -s <url> | less untuk melihat respons apa adanya
Petunjuk 2 — Yang dilarang justru menarik

robots.txt hanya permintaan sopan untuk crawler, bukan kontrol akses. Path yang di-Disallow sering menunjuk ke berkas sensitif.

Tools
  • curl — ambil robots.txt di folder yang sama dengan portal
  • gobuster / ffuf / dirsearch — enumerasi direktori & berkas (.bak, .old, ~) dengan wordlist bila tidak ada petunjuk
  • Burp Suite — memetakan semua request & respons situs target
Petunjuk 3 — Bongkar tokennya

Token tiga bagian dipisah titik itu JWT: header.payload.signature, masing-masing Base64URL. Isi payload tidak terenkripsi. Ada satu field yang nilainya bukan teks biasa.

Tools
  • CyberChef — resep JWT Decode, lalu From Hex untuk field yang aneh
  • jwt.io — melihat header & payload JWT (jangan tempel token produksi asli ke situs pihak ketiga)
  • base64 / xxd — echo <payload> | base64 -d, lalu echo <hex> | xxd -r -p

Blue Team

Berpikir seperti pembela: deteksi, analisis, respons.

blue-01Mudah100 poin

Malam yang Terlalu Sibuk

Skenario
Tim SOC menerima alarm dari server portal PT NusaLogistik (fiktif) pada 12 Oktober 2026 dini hari. Ada lonjakan request dan file aneh di folder unggahan. Anda mendapat salinan access log web server-nya.
Misi
Rekonstruksi serangannya: siapa penyerang yang berhasil masuk, webshell apa yang ia unggah, dan ke server mana data dikirim keluar.
Berkas & target
Format flag
FLAG{ippenyerang_namafilewebshell_ipservereksfiltrasi}

Petunjuk Buka satu per satu hanya bila buntu.

Petunjuk 1 — Siapa yang paling berisik?

Hitung request per IP dan per status code. Banyak 401 beruntun ke /login lalu satu 302 adalah pola brute force yang berhasil. Hati-hati: tidak semua IP berisik itu berhasil masuk.

Tools
  • awk + sort + uniq — awk '{print $1}' access.log | sort | uniq -c | sort -rn
  • grep — grep '"POST /login' access.log | awk '{print $1, $9}' | sort | uniq -c
  • GoAccess — dasbor ringkas dari access log (goaccess access.log --log-format=COMBINED)
Petunjuk 2 — Ikuti jejaknya setelah login

Filter semua request dari IP penyerang dan baca berurutan. Fitur unggah avatar yang menerima berkas .php adalah tanda bahaya.

Tools
  • grep — grep '^<ip> ' access.log untuk timeline satu penyerang
  • Splunk / Elastic (Kibana) — query per IP lalu urutkan berdasarkan waktu
  • User-Agent — perhatikan kolom terakhir: perubahan UA menandai perubahan alat
Petunjuk 3 — Perintah yang disamarkan

Parameter ?c= pada webshell berisi perintah yang di-URL-encode lalu di-Base64. Dekode satu per satu; salah satunya mengirim arsip ke server luar.

Tools
  • CyberChef — resep URL Decode → From Base64
  • base64 -d — grep -o 'c=[^ ]*' access.log | cut -d= -f2 | sed 's/%3D/=/g' | while read x; do echo "$x" | base64 -d; echo; done
  • Python — urllib.parse.unquote + base64.b64decode untuk otomatisasi

blue-02Sedang150 poin

Bisikan Lewat DNS

Skenario
Dua hari setelah insiden portal, IDS menandai workstation 10.10.5.23 milik staf keuangan PT NusaLogistik (fiktif) karena menghubungi IP yang sama dengan server eksfiltrasi sebelumnya. Tim jaringan sempat merekam lalu lintasnya selama satu menit.
Misi
Buka capture-nya di Wireshark, cari tahu perintah apa yang diterima malware dari server C2, lalu rekonstruksi data yang dicuri. Data itulah flag-nya.
Berkas & target
Format flag
FLAG{...}

Petunjuk Buka satu per satu hanya bila buntu.

Petunjuk 1 — Lihat gambaran besarnya dulu

Jangan langsung membaca paket satu per satu. Cari tahu protokol apa saja yang ada dan dengan siapa workstation ini berbicara. Satu IP tidak termasuk jaringan internal 10.x.

Tools
  • Wireshark → Statistics → Protocol Hierarchy — melihat komposisi protokol (DNS, HTTP, TCP)
  • Wireshark → Statistics → Conversations — tab IPv4 menunjukkan pasangan IP yang berkomunikasi
  • tshark — tshark -r capture.pcap -q -z conv,ip
Petunjuk 2 — Dengarkan percakapan dengan C2

Malware mengambil tugas lewat HTTP biasa. Rangkai paket TCP-nya menjadi satu percakapan utuh dan baca balasan servernya. Awas jebakan: string FLAG{...} yang ketemu lewat strings/grep belum tentu flag yang benar.

Tools
  • Display filter — http.request atau ip.addr == <ip-luar>
  • Follow → TCP Stream / HTTP Stream — klik kanan paket HTTP, lalu Follow untuk membaca request & response
  • File → Export Objects → HTTP — menyimpan semua berkas yang lewat HTTP
  • NetworkMiner — alternatif untuk mengekstrak berkas & host dari pcap
Petunjuk 3 — Data menyamar jadi nama domain

Tugas dari C2 menyebut zona DNS dan format label <seq>-<hex>, dikirim acak. Ambil semua query ke zona itu, urutkan berdasarkan nomor seq, gabungkan bagian hex-nya, lalu dekode.

Tools
  • Display filter — dns.qry.name contains "cdn-metrics" atau dns.flags.rcode == 3 (NXDOMAIN)
  • Apply as Column — jadikan dns.qry.name kolom, lalu urutkan
  • tshark — tshark -r capture.pcap -Y 'dns.flags.response==0 && dns.qry.name contains "cdn-metrics"' -T fields -e dns.qry.name | sort
  • CyberChef — resep From Hex untuk gabungan potongan hex

OSINT

Berpikir seperti penyelidik: kumpulkan, hubungkan, dan verifikasi informasi dari sumber terbuka tanpa menyentuh target.

osint-01Mudah100 poin

Liburan di Bandung, Katanya

Skenario
Seorang karyawan PT NusaLogistik (fiktif) mengunggah foto "liburan akhir pekan di Bandung" di hari yang sama ketika ia mengaku cuti sakit. Tim HR meminta bantuan verifikasi, dan Anda hanya diberi berkas foto aslinya.
Misi
Tentukan kapan foto itu benar-benar dipotret dan di mana lokasinya. Jangan percaya keterangan fotonya; percayai datanya.
Berkas & target
Format flag
FLAG{YYYYMMDD_lintang_bujur} (koordinat desimal, 3 angka di belakang koma)

Petunjuk Buka satu per satu hanya bila buntu.

Petunjuk 1 — Foto menyimpan lebih dari gambar

Foto dari ponsel biasanya membawa metadata EXIF: merek kamera, aplikasi edit, waktu, bahkan GPS. Unduh berkas aslinya, jangan tangkapan layar.

Tools
  • exiftool — exiftool -a -G1 liburan.jpg untuk melihat semua tag beserta grupnya
  • Jeffrey's Image Metadata Viewer / exif.tools — alternatif web (hanya untuk foto latihan, bukan foto pribadi)
  • File → Properties (Windows) / Get Info (macOS) — cara cepat melihat sebagian metadata
Petunjuk 2 — Tidak semua tanggal sama

Ada beberapa tag waktu. ModifyDate berubah saat foto diedit, sedangkan DateTimeOriginal mencatat saat rana ditekan. Keterangan (ImageDescription) bisa diketik siapa saja.

Tools
  • exiftool — exiftool -time:all -G1 liburan.jpg
  • CyberChef — resep Extract EXIF langsung di browser
Petunjuk 3 — Dari derajat ke peta

GPS di EXIF ditulis dalam derajat, menit, detik (DMS) plus arah. Desimal = derajat + menit/60 + detik/3600, lalu beri tanda minus untuk Selatan atau Barat. Tempel hasilnya ke peta untuk memastikan.

Tools
  • exiftool -n — exiftool -n -GPSPosition liburan.jpg langsung memberi angka desimal
  • Google Maps / OpenStreetMap — tempel "lintang, bujur" di kotak pencarian
  • Google Earth / Street View — bandingkan bentuk bangunan di foto dengan lokasi

osint-02Sedang150 poin

Server yang Tidak Ada di Daftar

Skenario
PT NusaLogistik (fiktif) meminta penilaian permukaan serang secara pasif. Menurut tim IT, semua layanan mereka ada di satu blok IP resmi. Anda sudah mengekspor riwayat sertifikat dari log Certificate Transparency dan data passive DNS untuk domain mereka.
Misi
Baca dokumen cakupan, lalu temukan satu subdomain yang masih aktif tetapi di-hosting di luar blok IP resmi (shadow IT).
Berkas & target
Format flag
FLAG{labelsubdomain_ip} (label paling kiri saja, mis. FLAG{www_192.0.2.10})

Petunjuk Buka satu per satu hanya bila buntu.

Petunjuk 1 — Daftar semua nama dulu

Log Certificate Transparency mencatat setiap sertifikat TLS yang pernah diterbitkan, jadi nama host yang tidak pernah dipublikasikan pun ikut tercatat. Ambil semua name_value unik. Sertifikat wildcard tidak menyebut nama host, jadi abaikan.

Tools
  • jq — jq -r '.[].name_value' crtsh.json | sort -u
  • crt.sh — di dunia nyata: https://crt.sh/?q=%25.domain.com&output=json
  • subfinder / amass (mode pasif) — mengumpulkan subdomain dari banyak sumber terbuka sekaligus
Petunjuk 2 — Ke mana nama itu menunjuk?

Passive DNS menyimpan riwayat jawaban DNS beserta kapan pertama dan terakhir terlihat. Saring rekaman A yang IP-nya bukan 192.0.2.x.

Tools
  • awk — awk -F, '$2=="A" && $3 !~ /^192\.0\.2\./' passive-dns.csv
  • csvkit / Excel / LibreOffice — filter kolom rrtype dan rdata
  • SecurityTrails / VirusTotal — sumber passive DNS di dunia nyata
Petunjuk 3 — Aktif atau sudah mati?

Ada lebih dari satu host di luar blok resmi, tapi beberapa sudah lama tidak terlihat. Bandingkan kolom last_seen dengan tanggal di dokumen cakupan; yang masih terlihat minggu ini adalah jawabannya.

Tools
  • sort — sort -t, -k5 passive-dns.csv untuk mengurutkan menurut last_seen
  • jq — jq '.[] | select(.name_value|test("<label>")) | {not_before, not_after}' crtsh.json untuk melihat sertifikat terbarunya

osint-03Sedang150 poin

Internet Tidak Pernah Lupa

Skenario
Sebagai bagian dari program security awareness yang disetujui PT NusaLogistik (fiktif) dan karyawannya, Anda diminta menilai jejak digital sysadmin mereka, Raka Pratama. Informasi seperti handle lama dan email pribadi sering dipakai penyerang untuk phishing yang sangat tertarget.
Misi
Mulai dari profil media sosialnya sekarang, temukan handle lama Raka lalu email pribadi yang pernah ia publikasikan.
Berkas & target
Format flag
FLAG{handlelama_emailpribadi}

Petunjuk Buka satu per satu hanya bila buntu.

Petunjuk 1 — Baca juga yang tidak ditampilkan

Profil media sosial sering memuat tautan terverifikasi ke situs pemiliknya. Tautan itu tidak selalu terlihat di halaman, tapi ada di kode sumber.

Tools
  • View Source (Ctrl+U) — cari tag <link> dan <meta> di <head>
  • rel="me" — atribut yang dipakai Mastodon dkk. untuk memverifikasi kepemilikan situs
  • curl + grep — curl -s <url> | grep -i 'rel="me"'
Petunjuk 2 — Domain mati bukan berarti hilang

Situs yang sudah dimatikan sering masih punya salinan di arsip web. Cari domain lama Raka di indeks arsip.

Tools
  • Wayback Machine — di dunia nyata: web.archive.org/web/*/domain.com/*
  • archive.today — arsip alternatif, kadang menyimpan halaman yang tidak ada di Wayback
  • Sherlock / WhatsMyName — di dunia nyata: cek handle yang sama di ratusan situs
Petunjuk 3 — Yang dihapus pernah ada

Tangkapan terbaru menyebut email sudah dihapus. Buka tangkapan yang lebih lama satu per satu.

Tools
  • Perbandingan tangkapan — fitur Changes di Wayback Machine untuk membandingkan dua tanggal
  • grep — grep -rEo '[[:alnum:]._-]+@[[:alnum:].-]+' pada salinan halaman yang diunduh

Aturan main

  • Semua target ada di folder /ctf/ situs ini dan bersifat statis. Jangan menyerang bagian lain situs, server hosting, atau pihak mana pun.
  • Perusahaan, orang, akun, domain (.invalid), dan IP dalam skenario fiktif (IP dari blok dokumentasi RFC 5737).
  • Flag diperiksa di browser Anda dengan membandingkan hash SHA-256; tidak ada yang dikirim ke server. Progres disimpan di browser ini saja.
  • Teknik di sini hanya untuk latihan dan sistem yang Anda miliki izin tertulisnya. Teknik OSINT pada orang sungguhan butuh izin dan dasar yang sah; jangan dipakai untuk menguntit atau doxing.