Login Peserta
Gunakan data dummy untuk masuk
(cth: user: siswa1, pass: 123)
Admin Dashboard
Manajemen User
| Username | Role | Score | Aksi |
|---|
Manajemen Soal
🏆 Real-Time Top Hackers
| Rank | Hacker Name | Score (pts) |
|---|
Panduan Penggunaan Aplikasi 📖
Selamat datang di platform CTF Akademi Pemula! Platform ini dirancang untuk mensimulasikan lingkungan peretasan (hacking) secara aman langsung di dalam peramban/browser kamu.
Cara Menggunakan Simulator:
- Membaca Skenario: Setiap soal memiliki skenario dan analogi sederhana. Bacalah dengan saksama.
- Simulasi Terminal: Kotak hitam bergaris di bawah setiap soal adalah simulasi alat (seperti Terminal, Hex Editor, atau Python). Ketikkan perintah/jawabanmu di baris yang tersedia, lalu tekan tombol Enter di keyboard (atau klik tombol aksi).
- Petunjuk Soal: Jika kamu kesulitan atau bingung langkah apa yang harus dilakukan, klik tombol 🏳️ Hint di pojok kanan atas setiap judul soal.
- Submit Flag: Tujuan akhirmu adalah mendapatkan teks dengan format
KODEKREASI{...}. Jika sudah mendapatkannya dari terminal, salin dan tempel (paste) ke kotak input di bagian paling bawah soal, lalu klik Submit.
Tentang Aplikasi ℹ️
CTF Academy
Versi 3.0.1 - Edisi Edukasi RTD (Real-Time DB)
Platform Capture The Flag (CTF) interaktif yang dikembangkan khusus untuk mengenalkan konsep Keamanan Siber (Cybersecurity) kepada pemula dan siswa sekolah. Simulasi berjalan sepenuhnya di sisi klien, sementara skor di-sinkronisasi ke Cloud secara Real-Time.
Pengembang: innit {dev}
Teknologi: HTML5, Vanilla JS, Firebase Firestore (Realtime Database)
Lisensi: Modul Pembelajaran Terbuka
C7: Baca Buku Harian (LFI) 100 pts
Langkah Penyelesaian (Spoiler):
- Uji parameter artikel dengan mencoba mundur ke direktori utama sistem Linux menggunakan
../(dot-dot-slash). - Ketik payload ini di terminal URL:
../../../../../etc/passwdlalu tekan Enter. Jika halaman menampilkan struktur user Linux, kerentanan LFI terkonfirmasi. - Ubah kembali payload untuk membaca kode sumber konfigurasi aplikasi: ketik
php://filter/convert.base64-encode/resource=koneksi.php - Simulasi akan mendeteksi string Base64 yang muncul. Salin kode base64 tersebut dan ubah menjadi teks biasa (Decode Base64) untuk mendapatkan flag.
Skenario: Aplikasi web menampilkan artikel dengan format URL ?artikel=sejarah.txt. Dapatkah kamu membaca /etc/passwd atau file koneksi.php?
💡 Konsep Sederhana (Local File Inclusion)
Bayangkan website ini punya URL: ?artikel=sejarah.txt. Jika server tidak punya pengamanan, kita bisa mengganti URL-nya menjadi ../../../../../etc/passwd untuk memaksa server mundur ke folder paling awal dan membuka file sistem rahasia.
C8: Ping Palsu (Command Injection) 150 pts
Langkah Penyelesaian (Spoiler):
- Pahami bahwa di sistem Linux, tanda titik koma (
;) digunakan untuk memisahkan dan mengeksekusi dua perintah secara berurutan. - Masukkan IP valid diikuti titik koma, misalnya:
127.0.0.1;lslalu tekan Enter. Hasil eksekusi akan memunculkan daftar file. - Setelah melihat file bernama
flag_rahasia.txt, kamu tidak bisa mengetikcat flag_rahasia.txtkarena spasi dilarang. - Gunakan variabel lingkungan sistem sebagai pengganti spasi:
${IFS}. - Masukkan payload akhir:
127.0.0.1;cat${IFS}flag_rahasia.txt
Skenario: Fitur "Cek Status Server" memblokir karakter spasi kosong. Bagaimana cara menjalankan perintah cat flag_rahasia.txt?
💡 Konsep Sederhana (OS Command Injection)
Sistem ini dirancang untuk menjalankan perintah ping [input_kamu]. Jika kamu memasukkan 127.0.0.1;ls, sistem akan menjalankan ping 127.0.0.1 lalu mengeksekusi perintah ls secara ilegal karena adanya pemisah ;.
C1: Gambar Kucing Hilang 100 pts
Langkah Penyelesaian (Spoiler):
- Buka file rahasia.png menggunakan Hex Editor (tersedia simulasi di bawah).
- Amati blok byte pertama. Kamu akan melihat deretan angka
00 00 00 00 00 00 00 00. - Ubah 8 byte pertama tersebut menjadi standar header file PNG yang valid, ketikkan:
89 50 4E 47 0D 0A 1A 0Apada kotak input. - Klik tombol "Simpan & Render Gambar".
- Gambar kini dapat ditampilkan secara normal oleh komputer, dan flag akan tertulis jelas.
Skenario: File rahasia.png tidak bisa dibuka. Hex Editor menunjukkan 8 byte pertamanya adalah nol semua.
💡 Konsep Sederhana (Magic Bytes)
Setiap file komputer punya 'DNA' di baris pertamanya (disebut Header atau Magic Bytes). File gambar PNG yang sehat selalu diawali dengan kode hexadecimal tertentu. Jika header ini rusak atau diganti angka nol, komputer tidak akan mengenali file tersebut sebagai gambar.
C4: Ruang Rahasia (Buffer Overflow) 200 pts
Langkah Penyelesaian (Spoiler):
- Analisis panjang buffer. Ukuran variabel adalah 64 byte, ditambah ukuran register memori dasar (biasanya 8 byte), sehingga total padding sebelum menyentuh Return Address adalah 72 byte.
- Susun payload python di simulasi: Kirim karakter 'A' sebanyak 72 kali disambung dengan alamat memori pencetak bendera.
- Ketik perintah:
b'A' * 72 + p64(0x0804862c)lalu tekan Enter. - Program akan mengalami crash (segfault), namun memori telah dimanipulasi untuk melompat ke fungsi rahasia.
Skenario: Program C meminta password dengan fungsi usang gets(). Variabel password adalah char password[64]. Fungsi rahasia pencetak bendera ada di memori 0x0804862c.
💡 Konsep Sederhana (Ret2Win)
Program ini hanya menyiapkan "gelas" berukuran 64 huruf. Jika kamu tuangkan 72 huruf, datanya akan tumpah (overflow) dan mengenai tombol Return Address sistem operasi. Tumpahan ini bisa kita arahkan dengan menyisipkan alamat fungsi rahasia agar dieksekusi.
C5: Kunci Berulang (XOR Cipher) 100 pts
Langkah Penyelesaian (Spoiler):
- Pahami rumus XOR:
Plaintext XOR Key = Ciphertext, maka berlaku jugaCiphertext XOR Plaintext = Key. - Untuk mencari tahu kuncinya, pada kolom Input masukkan kata
guest(sebagai plaintext awal), dan biarkan token041b1d1a11diproses di latar belakang. Klik tombol Bake!. - Hasilnya akan memunculkan karakter Key yang sebenarnya, yaitu huruf K.
- Sekarang, ganti kolom Input dengan
admin, dan masukkanKpada kolom XOR Key. Klik Bake! lagi untuk membuat token admin palsu dan mendapatkan flag.
Skenario: Token acak 041b1d1a11 adalah hasil enkripsi kata guest menggunakan sebuah kunci rahasia. Bisakah kamu mencari kuncinya dan membuat token baru untuk kata admin?
💡 Konsep Sederhana (Known Plaintext Attack)
Jika kita tahu pesan aslinya ("guest") dan tahu hasil sandinya ("041b1d..."), kita bisa membalik operasinya untuk mengetahui "kunci" yang digunakan. Setelah kuncinya di tangan, kita bisa mengunci kata apa saja (seperti "admin").
C6: Pesan Singkat RSA 150 pts
Langkah Penyelesaian (Spoiler):
- Pahami rumus enkripsi RSA:
c = m^e mod n. - Karena pesan aslinya sangat pendek, hasil pangkat tiganya (m^3) masih lebih kecil dari N. Operasi modulo (sisa bagi) akhirnya tidak berpengaruh sama sekali. Rumus menyusut menjadi
c = m^3. - Untuk mencari pesan asli (m), kita cukup mencari akar pangkat tiga (cube root) dari nilai c.
- Ketik script python ini di terminal:
gmpy2.iroot(c, 3)[0]lalu tekan Enter.
Skenario: Pesan terenkripsi (ciphertext) c, modulus n sangat besar, eksponen e = 3. Pesan (m) sangat pendek sehingga m³ < n.
💡 Konsep Sederhana (Hastad's Broadcast / Cube Root)
Bayangkan RSA itu seperti jam analog (modulo). Jika kita maju 25 jam, jarum menunjuk angka 1 (karena melebihi batas 24). Tapi jika pesan kita sangat kecil dan hanya maju 3 jam, jarum akan tetap menunjuk angka 3 (tidak pernah menyentuh batas modulo N). Ini membuat enkripsinya jadi matematika biasa (akar pangkat).
C9: Sandi Tersembunyi 200 pts
Langkah Penyelesaian (Spoiler):
- Analisis kode Ghidra. Terdapat perulangan yang membandingkan input pengguna dengan isi array
hardcoded_secret. - Perhatikan ada operasi bitwise:
input[i] ^ 0x42. Artinya input pengguna di-XOR dengan angka hex0x42. - Salin nilai XOR Key tersebut dan masukkan ke dalam alat dekripsi di bawah.
- Ketik
0x42pada kolom XOR Key lalu klik Decrypt Array untuk membongkar pesan rahasia yang tersembunyi.
Skenario: Biner cek_lisensi.bin meminta password. Decompiler (Ghidra) menemukan array hex acak dan operasi pembanding yang di-XOR dengan 0x42.
// Hasil Decompile Ghidra:
byte hardcoded_secret[] = {0x09, 0x0D, 0x06, 0x07, 0x09, 0x16...};
for (int i=0; i < len; i++) {
if ( (input[i] ^ 0x42) != hardcoded_secret[i] ) { fail(); }
}
💡 Konsep Sederhana (Hardcoded String Analysis)
Pembuat program mencoba menyembunyikan password asli dengan mengacaknya menggunakan operasi matematika XOR. Karena XOR dapat dibalik, kita tinggal menggunakan kunci XOR yang tertulis jelas di dalam kodenya untuk mengembalikan teks sandi menjadi password asli.
C3: Ular Kobra Terkurung (PyJail) 150 pts
Langkah Penyelesaian (Spoiler):
- Karena kata kunci
importdiblokir, gunakan fungsi internal python__import__yang dipanggil sebagai teks string. - Masukkan payload ini untuk melihat daftar file:
__import__('os').popen('ls').read() - Setelah melihat ada file bernama
flag_asli.txt, ubah payload menjadi pembaca isi file. - Kirim perintah ini:
__import__('os').popen('cat flag_asli.txt').read()
Skenario: Program menerima input python lewat eval(), tapi mengetik kata import akan memutuskan koneksi secara langsung.
💡 Konsep Sederhana (Sandbox Escape)
Fungsi eval() mengeksekusi huruf apa saja yang kamu ketik sebagai kode program aktif. Admin memblokir kata "import" agar kita tidak bisa memanggil modul OS (sistem operasi) untuk mencuri file. Tapi di Python, kita bisa memanggil modul dengan cara lain secara diam-diam.
C2: Aturan Robot (OSINT Dasar) 50 pts
Langkah Penyelesaian (Spoiler):
- Setiap website memiliki file instruksi standar untuk mesin pencari seperti Google yang bernama
robots.txt. - Ketik
robots.txtpada bilah URL browser simulasi lalu tekan Enter. - Di dalam file tersebut, akan tertulis direktori yang dilarang (Disallow) yaitu
/ruang_rahasia_admin_1337.html. - Ketik direktori rahasia tersebut ke dalam URL:
ruang_rahasia_admin_1337.htmllalu Enter untuk mendapatkan flag.
Skenario: Admin menyembunyikan gerbang rahasia dari mesin pencari Google pada situs http://ctf-sekolah.local.
💡 Konsep Sederhana (robots.txt)
Pembuat website yang baik sering meninggalkan "catatan" untuk robot penelusur Google (crawler) tentang halaman mana saja yang tidak boleh di-scan dan dimasukkan ke hasil pencarian. Ironisnya, catatan ini kadang malah membocorkan lokasi halaman rahasia kepada peretas.