CTF Walkthrough: Bandit Levels 11-20 — Lanjutan OverTheWire

Setelah berhasil menaklukkan 10 level pertama OverTheWire Bandit, perjalananmu di dunia Capture The Flag (CTF) belum selesai. Level 11 sampai 20 membawa tantangan yang lebih kompleks — kamu akan berurusan dengan enkripsi sederhana, manipulasi file biner, koneksi SSH yang tricky, sampai port scanning dan komunikasi SSL.

Kalau di artikel sebelumnya kita sudah bahas Bandit Levels 1-10 (dasar-dasar command line Linux), sekarang saatnya naik level. Tantangan di level 11-20 ini sering muncul di technical interview untuk posisi junior security — jadi pastikan kamu benar-benar paham, bukan sekadar copy-paste solusi.

Menurut Rudi Hartono, Security Engineer yang rutin menggunakan OverTheWire sebagai materi pelatihan internal di perusahaannya, “Bandit levels 11-20 adalah sweet spot untuk belajar dasar-dasar problem solving di dunia nyata. Saya selalu mewajibkan tim junior menyelesaikan ini dalam minggu pertama onboarding karena melatih mindset investigasi yang esensial.” Rudi menambahkan bahwa dari 15 orang yang ia latih tahun lalu, 12 di antaranya mengatakan level 12 dan 16 adalah yang paling menguras otak sekaligus paling berkesan.

Apa Itu OverTheWire Bandit?

OverTheWire adalah platform wargame/CTF gratis yang sudah ada sejak 2011 dan tetap menjadi salah satu sumber belajar cybersecurity paling direkomendasikan hingga 2026. Seri Bandit fokus pada fundamental Linux dan keamanan dasar — kamu akan belajar command-line, manipulasi file, networking, dan scripting melalui tantangan yang progresif.

Untuk mengakses setiap level, kamu perlu SSH ke server OverTheWire menggunakan kredensial dari level sebelumnya. Formatnya selalu:

ssh bandit[LEVEL]@bandit.labs.overthewire.org -p 2220

Prasyarat sebelum lanjut: Pastikan kamu sudah menyelesaikan Bandit Levels 0-10 dan memahami perintah dasar Linux seperti ls, cat, grep, find, sort, uniq, strings, dan base64. Kalau belum, sebaiknya selesaikan dulu level 1-10 sebelum membaca walkthrough ini.

Level 11 → 12: Dekripsi Rot13

Tantangan: File data.txt berisi password level berikutnya, tapi semua karakternya sudah dirotasi 13 posisi (ROT13 cipher).

Konsep: ROT13 adalah cipher substitusi sederhana yang menggeser setiap huruf alfabet sebanyak 13 posisi. Karena alfabet punya 26 huruf, ROT13 bersifat self-inverse — artinya melakukan ROT13 dua kali akan mengembalikan teks aslinya.

Solusi:

cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'

Perintah tr (translate) memetakan setiap huruf ke huruf 13 posisi setelahnya. Password akan muncul langsung di terminal.

Level 12 → 13: Rantai Kompresi Berlapis

Tantangan: File data.txt adalah hexdump dari file biner yang sudah dikompresi berulang kali. Kamu harus membalikkan prosesnya — dari hexdump kembali ke teks asli.

Konsep: Ini adalah tantangan reverse engineering sederhana. File asli dikompresi dengan berbagai format (gzip, bzip2, tar) secara berlapis, lalu hasil akhirnya diubah menjadi hexdump.

Solusi — langkah demi langkah:

Step 1: Ubah hexdump kembali ke file biner:

mkdir /tmp/bandit12
cp data.txt /tmp/bandit12/
cd /tmp/bandit12
xxd -r data.txt > data.bin

Step 2: Cek tipe file:

file data.bin
# Output: data.bin: gzip compressed data

Step 3: Ekstrak berulang kali. Karena file dikompresi berlapis, kamu harus terus mengecek tipe file dan mengekstraknya sampai dapat teks biasa:

# Iterasi 1: gzip
mv data.bin data.gz && gzip -d data.gz

# Iterasi 2: bzip2
mv data data.bz2 && bzip2 -d data.bz2

# Iterasi 3: gzip lagi
mv data data.gz && gzip -d data.gz

# Iterasi 4: tar
mv data data.tar && tar -xf data.tar

# Iterasi 5: tar lagi
mv data5.bin data.tar && tar -xf data.tar

# Iterasi 6: bzip2
mv data6.bin data.bz2 && bzip2 -d data.bz2

# Iterasi 7: tar
mv data data.tar && tar -xf data.tar

# Iterasi 8: gzip
mv data8.bin data.gz && gzip -d data.gz

# Hasil akhir: file ASCII dengan password!

Tips: Selalu jalankan file setelah setiap ekstraksi untuk tahu format selanjutnya. Jangan lupa rename file sesuai ekstensi yang dibutuhkan (.gz, .bz2, .tar).

Level 13 → 14: Login dengan SSH Private Key

Tantangan: Tidak ada password — hanya ada file sshkey.private yang bisa digunakan untuk login ke level berikutnya sebagai user bandit14 di localhost.

Konsep: SSH mendukung autentikasi menggunakan private key, bukan password. Ini umum digunakan di production environment.

Solusi:

ssh -i sshkey.private bandit14@localhost -p 2220

Begitu login sebagai bandit14, langsung baca password untuk level 15:

cat /etc/bandit_pass/bandit14

Level 14 → 15: Kirim Password via Port Lokal

Tantangan: Password level 15 hanya bisa didapat dengan mengirimkan password level 14 (yang barusan kamu dapat) ke port 30000 di localhost.

Konsep: Netcat (nc) adalah “pisau Swiss Army” networking — bisa mengirim dan menerima data via TCP/UDP.

Solusi:

nc localhost 30000
# Ketik password level 14, lalu tekan Enter
# Server akan membalas dengan password level 15

Alternatif satu baris:

echo "[password_level_14]" | nc localhost 30000

Level 15 → 16: Komunikasi SSL/TLS

Tantangan: Sama seperti level sebelumnya (kirim password ke port localhost), tapi kali ini port 30001 menggunakan enkripsi SSL. Netcat biasa tidak akan berfungsi.

Konsep: SSL/TLS mengenkripsi lalu lintas data. Kamu membutuhkan klien yang mendukung SSL — dalam hal ini openssl s_client.

Solusi:

openssl s_client -connect localhost:30001 -quiet
# Ketik password level 15, lalu Enter
# Password level 16 akan muncul

Flag -quiet menyembunyikan output sertifikat SSL yang panjang, jadi kamu hanya melihat data yang dikirim/diterima.

Level 16 → 17: Port Scanning + SSL

Tantangan: Ini level yang paling kompleks di rentang 11-20. Password level 17 tersembunyi di salah satu port antara 31000-32000 di localhost. Port tersebut harus merespons dengan benar ketika kamu mengirimkan password level 16 — dan mendukung SSL.

Konsep: Port scanning (nmap) + identifikasi service + koneksi SSL.

Solusi:

Step 1: Scan port 31000-32000 untuk menemukan service yang aktif:

nmap -p 31000-32000 localhost

Output akan menunjukkan beberapa port terbuka. Catat semuanya.

Step 2: Coba koneksi SSL ke setiap port yang ditemukan:

openssl s_client -connect localhost:31790 -quiet
# Ketik password level 16
# Jika port benar, kamu akan dapat SSH private key (bukan password biasa!)

Step 3: Setelah dapat private key, simpan dan gunakan untuk login ke level 17. PENTING: Pastikan permission key di-set ke 600 (hanya pemilik yang bisa baca):

# Simpan key di /tmp/
nano /tmp/bandit17_key
# Paste private key yang didapat
# Simpan dan keluar

chmod 600 /tmp/bandit17_key
ssh -i /tmp/bandit17_key bandit17@localhost -p 2220

Level 17 → 18: Membandingkan Dua File

Tantangan: Ada dua file — passwords.old dan passwords.new. Password level 18 adalah satu-satunya baris yang berubah di antara keduanya.

Konsep: Perintah diff membandingkan dua file baris per baris dan menampilkan perbedaannya.

Solusi:

diff passwords.old passwords.new
# Output:
# 42c42
# < [password_lama]
# ---
# > [password_baru]  ← ini password untuk bandit18

Baris dengan tanda > adalah baris baru — itulah password level 18.

Level 18 → 19: .bashrc yang Memutus Koneksi

Tantangan: Setiap kali kamu login sebagai bandit18, file .bashrc langsung mengeksekusi perintah exit alias logout. Kamu tidak bisa login secara normal.

Konsep: SSH bisa menjalankan perintah langsung tanpa membuka shell interaktif. Ini mem-bypass .bashrc yang bermasalah.

Solusi:

ssh [email protected] -p 2220 "cat readme"
# Atau alternatif:
ssh [email protected] -p 2220 /bin/bash --norc

Opsi kedua membuka shell tanpa membaca .bashrc (flag --norc), jadi kamu bisa berinteraksi normal. Password level 19 ada di file readme.

Level 19 → 20: Setuid Binary

Tantangan: Ada binary bernama bandit20-do di home directory. Binary ini memiliki permission setuid — artinya berjalan dengan hak akses pemiliknya (bandit20), meskipun kamu login sebagai bandit19.

Konsep: Setuid (SUID) adalah permission khusus di Linux yang membuat file executable berjalan dengan hak akses pemilik file, bukan pengguna yang menjalankannya. Ini powerful dan sering jadi target privilege escalation.

Solusi: Gunakan binary untuk membaca password bandit20:

./bandit20-do cat /etc/bandit_pass/bandit20

Binary bandit20-do menjalankan perintah apapun dengan hak akses bandit20 — termasuk membaca file password yang hanya bisa dibaca oleh bandit20.

Level 20 → 21: Setuid + Netcat (Bonus)

Tantangan: Ada binary setuid suconnect yang terkoneksi ke port yang kamu tentukan. Binary ini akan membaca satu baris dari koneksi TCP dan membandingkannya dengan password level sebelumnya. Jika cocok, password level 21 akan dikirim balik.

Konsep: Kamu harus membuka port sendiri menggunakan netcat, lalu menjalankan suconnect untuk konek ke port tersebut.

Solusi (butuh dua terminal):

Terminal 1 — jalankan listener:

echo "[password_bandit20]" | nc -l -p 4444

Terminal 2 — jalankan suconnect:

./suconnect 4444

Password level 21 akan muncul di terminal 2 setelah binary memverifikasi password yang kamu kirim dari terminal 1.

Atau dalam satu terminal menggunakan background process:

echo "[password_bandit20]" | nc -l -p 4444 &
./suconnect 4444

Tabel Ringkasan: Konsep Kunci per Level

LevelKonsepCommand/Tool Kunci
11→12Cipher ROT13tr
12→13Reverse hexdump + rantai kompresixxd, gzip, bzip2, tar, file
13→14SSH private key authssh -i
14→15Netcat TCP communicationnc
15→16SSL/TLS connectionopenssl s_client
16→17Port scanning + SSL servicenmap, openssl s_client
17→18File comparisondiff
18→19SSH command execution, bypass .bashrcssh ... "command"
19→20SUID binary exploitation./setuid_binary
20→21Netcat listener + setuid networkingnc -l, suconnect

Pertanyaan yang Sering Diajukan (FAQ)

Kenapa saya harus repot-repot main CTF?

CTF melatih problem solving mindset — skill paling dicari di dunia cybersecurity. Banyak konsep di Bandit (port scanning, SSL, file manipulation) yang langsung aplikatif di pekerjaan nyata.

Level 12 kok susah banget?

Level 12 memang dirancang sebagai “filter” — memisahkan yang benar-benar mau belajar dari yang cuma coba-coba. Pro tip: selalu jalankan file setelah setiap ekstraksi, dan bikin folder kerja di /tmp/ biar bersih.

Port mana yang benar di level 16?

Gunakan nmap -sV -p 31000-32000 localhost untuk melihat tidak hanya port yang terbuka, tapi juga service apa yang berjalan. Cari yang mendukung SSL. Port yang benar biasanya di range atas dan akan membalas dengan private key, bukan password biasa.

Apakah cheat di CTF itu wajar?

Walkthrough seperti ini adalah alat belajar, bukan contekan. Goal-nya bukan sekadar dapat password — tapi paham kenapa solusinya seperti itu. Baca walkthrough, pahami, lalu coba sendiri tanpa lihat. Kalau bisa menjelaskan setiap langkah ke orang lain, kamu sudah paham.

Kesimpulan

Level 11-20 OverTheWire Bandit memperkenalkan konsep-konsep yang jauh lebih realistis dibanding 10 level pertama. Kamu sudah belajar dekripsi sederhana, reverse engineering file terkompresi, autentikasi SSH key, komunikasi SSL, port scanning, perbandingan file, bypass .bashrc, dan privilege escalation dasar via SUID.

Skill-skill ini adalah fondasi untuk tantangan yang lebih besar — baik di CTF lanjutan seperti Natas (web security), Leviathan, atau Krypton (kriptografi), maupun di dunia profesional sebagai security engineer atau pentester.

Kalau kamu serius ingin menguasai skill ini dengan bimbingan terstruktur, ShinoBee punya program belajar cybersecurity dari nol sampai mahir dengan sistem daily accountability yang bikin kamu konsisten. Karena di dunia cybersecurity, konsistensi belajar setiap hari adalah pembeda antara yang berhasil dan yang menyerah di tengah jalan.