← Back to list

OverTheWire Bandit Writeup: Mastering Linux Fundamentals (Level 0 →20)

Level 0

LunarX · 2026-02-20 12:04 · 0 claps · 27.1 min read
#ctf #overthewire #bandit-walkthrough #ctf-writeup
Open on Medium ↗
Wiki topics: 🔓 · Open Source

OverTheWire Bandit Writeup: Mastering Linux Fundamentals (Level 0 →20)

Level 0

The goal of this level is for you to log into the game using SSH. The host to which you need to connect is bandit.labs.overthewire.org, on port 2220. The username is bandit0 and the password is bandit0. Once logged in, go to the Level 1 page to find out how to beat Level 1.

Commands you may need to solve this level

ssh

ssh -p 2220 bandit0@bandit.labs.overthewire.org

pw: bandit0

Bandit Level 0 → Level 1

Level Goal

The password for the next level is stored in a file called readme located in the home directory. Use this password to log into bandit1 using SSH. Whenever you find a password for a level, use SSH (on port 2220) to log into that level and continue the game.

Commands you may need to solve this level

ls , cd , cat , file , du , find

TIP: Create a file for notes and passwords on your local machine!

Passwords for levels are not saved automatically. If you do not save them yourself, you will need to start over from bandit0.

Passwords also occasionally change. It is recommended to take notes on how to solve each challenge. As levels get more challenging, detailed notes are useful to return to where you left off, reference for later problems, or help others after you’ve completed the challenge.

Solve:

Target kita adalah menemukan password untuk level berikutnya yang disimpan dalam sebuah file bernama **readme* di dalam direktori home*. Password ini akan digunakan untuk login ke user bandit1 menggunakan SSH melalui port 2220.

Login:

ssh -p 2220 bandit0@bandit.labs.overthewire.org

pw: bandit0

Setelah berhasil login ke bandit0, jalankan perintah berikut di terminal:

bandit0@bandit:~$ ls
readme
bandit0@bandit:~$ cat readme

bandit0@bandit:~$ cat readme Congratulations on your first steps into the bandit game!! Please make sure you have read the rules at https://overthewire.org/rules/ If you are following a course, workshop, walkthrough or other educational activity, please inform the instructor about the rules as well and encourage them to contribute to the OverTheWire community so we can keep these games free!

The password you are looking for is: ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If

Explaination:

Untuk menyelesaikan level pembuka ini, kita hanya perlu memahami dua konsep dasar navigasi Linux:

  1. Melihat Daftar File (ls) Perintah ls (list) digunakan untuk melihat file apa saja yang ada di folder kita saat ini. Saat kita mengetik ls, muncul file bernama readme. Inilah target kita.
  2. Membaca Isi File (cat) Perintah cat (concatenate) adalah cara tercepat untuk menampilkan isi dari sebuah file teks langsung ke layar terminal. Dengan menjalankan cat readme, sistem akan membukakan isi dokumen tersebut sehingga kita bisa menyalin password yang ada di dalamnya.

Tips: Jangan lupa untuk selalu mencatat password yang ditemukan (seperti ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If) di notepad lokal kamu, karena setiap level memerlukan password dari level sebelumnya untuk bisa masuk.

Password:

ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If

Bandit Level 1 → Level 2

Level Goal

The password for the next level is stored in a file called — located in the home directory

Commands you may need to solve this level

ls , cd , cat , file , du , find

Helpful Reading Material

Solve:

Password untuk level berikutnya disimpan dalam sebuah file yang namanya hanya berupa satu karakter tanda hubung atau dash (**-*) yang berlokasi di direktori home*.

Login:

ssh -p 2220 bandit1@bandit.labs.overthewire.org

pw: ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If

Jika kita langsung mengetik cat -, terminal akan bingung karena menyangka kita sedang memberikan instruksi tambahan (argumen), bukan nama file. Gunakan jalur absolut atau relatif untuk membukanya:

bandit1@bandit:~$ ls
-
bandit1@bandit:~$ cat ./-

Explaination:

Level ini melatih kita menangani Dashed Filenames (nama file yang diawali tanda hubung). Inilah alasannya mengapa cara biasa sering gagal:

  1. Masalah dengan Karakter - Di dalam dunia Linux/Unix, tanda hubung (-) biasanya digunakan untuk mengawali sebuah opsi atau bendera (misalnya ls -l). Jika kita mengetik cat -, perintah cat akan menunggu input dari keyboard (Standard Input) alih-alih membaca file bernama -.
  2. Solusi: Penunjuk Jalur (Pathname) Untuk memberitahu terminal bahwa - adalah sebuah nama file, kita harus menyertakan jalurnya. **./* berarti "di direktori saat ini".cat Dengan mengetik cat ./-, kita menegaskan: "Tolong tampilkan isi dari file bernama '-' yang ada di folder ini."*

Password:

263JGJPfgU6LtdEvgfWU1XP5yac29mFx

Bandit Level 2 → Level 3

Level Goal

The password for the next level is stored in a file called --spaces in this filename-- located in the home directory

Commands you may need to solve this level

ls , cd , cat , file , du , find

Helpful Reading Material

Solve:

Password untuk level berikutnya disimpan dalam sebuah file yang memiliki spasi pada namanya, yaitu: **spaces in this filename*. File ini berada di direktori home*.

Login:

ssh -p 2220 bandit2@bandit.labs.overthewire.org

pw: 263JGJPfgU6LtdEvgfWU1XP5yac29mFx

Di terminal, spasi digunakan sebagai pemisah antar argumen. Agar terminal membaca seluruh nama file sebagai satu kesatuan, kita perlu menggunakan tanda kutip.

bandit2@bandit:~$ ls
--spaces in this filename--
bandit2@bandit:~$ cat -- "--spaces in this filename--"

Explaination:

Tantangan ini mengajarkan kita cara menangani nama file yang tidak standar di Linux. Berikut adalah alasan mengapa perintah di atas sangat efektif:

  1. Penggunaan Tanda Kutip (" ") Nama file ini mengandung spasi. Tanpa tanda kutip, perintah cat akan menganggap kita mencoba membuka empat file berbeda. Tanda kutip membungkus nama tersebut menjadi satu kesatuan nama file yang utuh.
  2. Fungsi Double Dash (--) Ini adalah teknik tingkat lanjut. Di banyak perintah Linux, -- digunakan untuk menandakan "akhir dari opsi perintah". Segala sesuatu yang diketik setelah -- akan dianggap sebagai nama file/argumen murni, bahkan jika nama file tersebut diawali dengan tanda hubung atau karakter aneh lainnya yang bisa disalahartikan sebagai instruksi tambahan.
  3. Keamanan dalam Eksekusi Menggabungkan -- dengan tanda kutip adalah cara paling aman untuk memastikan perintah cat membaca file tersebut dengan tepat tanpa gangguan dari bagaimana shell menginterpretasikan spasi atau karakter spesial lainnya.

Password:

MNk8KNH3Usiio41PRUEoDFPqfxLPlSmx

Bandit Level 3 → Level 4

Level Goal

The password for the next level is stored in a hidden file in the inhere directory.

Commands you may need to solve this level

ls , cd , cat , file , du , find

Solve:

Password untuk level berikutnya disimpan dalam sebuah file tersembunyi yang terletak di dalam direktori bernama inhere.

ssh -p 2220 bandit3@bandit.labs.overthewire.org

pw: MNk8KNH3Usiio41PRUEoDFPqfxLPlSmx

Saat masuk ke folder inhere, perintah ls biasa tidak akan memunculkan apa-apa. Kita harus menggunakan opsi tambahan untuk melihat file yang disembunyikan:

bandit3@bandit:~$ cd inhere
bandit3@bandit:~/inhere$ ls -la
total 12
drwxr-xr-x 2 root    root    4096 Oct 14 09:26 .
drwxr-xr-x 3 root    root    4096 Oct 14 09:26 ..
-rw-r----- 1 bandit4 bandit3   33 Oct 14 09:26 ...Hiding-From-You
bandit3@bandit:~/inhere$ cat ...Hiding-From-You

Explaination:

Level ini sangat penting untuk memahami bagaimana Linux mengelola visibilitas file. Berikut adalah poin-poin utamanya:

  1. Aturan Titik (.) pada Nama File Di Linux, file apa pun yang namanya diawali dengan tanda titik (contoh: .hiddenfile atau ...Hiding-From-You) secara otomatis dianggap sebagai hidden file. File-file ini biasanya digunakan untuk konfigurasi sistem agar tidak mengotori tampilan daftar file utama.
  2. Melihat yang Tersembunyi (ls -la) Perintah ls biasa tidak akan menampilkan file tersembunyi. Untuk memunculkannya, kita perlu menggunakan flag atau opsi: **-a (all): Menampilkan semua file, termasuk yang diawali dengan titik. `-l` (long listing):** Menampilkan detail file seperti hak akses, pemilik, dan ukuran file.
  3. Mengenal . dan .. Saat menjalankan ls -la, kamu akan melihat dua entri unik: . (satu titik): Merujuk pada direktori saat ini. .. (dua titik): Merujuk pada direktori induk (satu tingkat di atas).

Password:

2WmrDFRmJIq3IPxneAaMGhap0pFhF3NJ

Bandit Level 4 → Level 5

Level Goal

The password for the next level is stored in the only human-readable file in the inhere directory. Tip: if your terminal is messed up, try the “reset” command.

Commands you may need to solve this level

ls , cd , cat , file , du , find

Solve:

Password untuk level berikutnya disimpan di dalam satu-satunya file yang bisa dibaca manusia (human-readable) di dalam direktori inhere.

ssh -p 2220 bandit4@bandit.labs.overthewire.org

pw: 2WmrDFRmJIq3IPxneAaMGhap0pFhF3NJ

Di dalam folder inhere terdapat banyak file yang namanya diawali dengan tanda hubung (-). Kita perlu mengidentifikasi tipe file tersebut satu per satu menggunakan perintah file:

bandit4@bandit:~$ cd inhere
bandit4@bandit:~/inhere$ file ./*
./-file00: data
./-file01: OpenPGP Public Key
./-file02: OpenPGP Public Key
./-file03: data
./-file04: data
./-file05: data
./-file06: data
./-file07: ASCII text
./-file08: data
./-file09: data
bandit4@bandit:~/inhere$ cat -- "-file07"

Explaination:

Pada level ini, kita belajar bahwa tidak semua file berisi teks biasa, meskipun mereka berada di server yang sama. Berikut adalah poin-poin penjelasannya:

  1. Mengenal Tipe File (file) Perintah file digunakan untuk menentukan tipe data di dalam suatu file tanpa harus membukanya. File bertipe data atau OpenPGP biasanya berisi karakter aneh (biner) yang akan membuat terminal kita berantakan jika dipaksa buka dengan cat. File bertipe ASCII text adalah file yang berisi teks murni yang bisa dibaca oleh manusia. Inilah target kita.
  2. *Wildcard Asterisk (`)** Dengan menjalankanfile ./, simbol bintang (`) memberitahu terminal untuk memeriksa semua file yang ada di direktori saat ini secara sekaligus. Ini jauh lebih cepat daripada mengetik nama file satu per satu.
  3. Kombinasi Double Dash (--) dan Tanda Kutip Sama seperti level sebelumnya, karena nama filenya diawali dengan tanda hubung (-file07), kita menggunakan -- untuk memberitahu perintah cat bahwa -file07 adalah nama file, bukan sebuah opsi/perintah tambahan.

Password:

4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQw

Bandit Level 5 → Level 6

Level Goal

The password for the next level is stored in a file somewhere under the inhere directory and has all of the following properties:

  • human-readable
  • 1033 bytes in size
  • not executable

Commands you may need to solve this level

ls , cd , cat , file , du , find

Solve:

Password untuk level berikutnya tersembunyi di suatu tempat di bawah direktori inhere dengan kriteria yang sangat spesifik:

  • Bisa dibaca manusia (human-readable).
  • Berukuran tepat 1033 bytes.
  • Tidak bisa dieksekusi (not executable).

ssh -p 2220 bandit5@bandit.labs.overthewire.org

pw: 4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQw

Karena terdapat banyak sekali sub-direktori di dalam inhere, kita tidak mungkin mencarinya secara manual. Kita gunakan kekuatan perintah find dengan filter yang lengkap:

bandit5@bandit:~$ cd inhere
bandit5@bandit:~/inhere$ find . -type f -size 1033c ! -executable -exec file {} + | grep ASCII
./maybehere07/.file2: ASCII text, with very long lines (1000)
bandit5@bandit:~/inhere$ cat ./maybehere07/.file2

Explaination:

Level ini adalah ujian sesungguhnya dalam menggunakan perintah find. Mari kita bedah perintah "sakti" yang digunakan di atas:

  1. **-type f**: Memastikan kita hanya mencari file, bukan direktori.
  2. **-size 1033c: Mencari file dengan ukuran tepat 1033 bytes*. Huruf c di sini sangat penting karena merujuk pada satuan bytes*.
  3. **! -executable: Tanda seru (!) berarti "bukan". Jadi kita mencari file yang tidak memiliki izin eksekusi**.
  4. **-exec file {} +**: Bagian ini menjalankan perintah file terhadap semua hasil yang ditemukan oleh find. Ini membantu kita memverifikasi tipe konten di dalamnya.
  5. **| grep ASCII**: Melakukan filter akhir untuk hanya menampilkan hasil yang mengandung kata "ASCII" (artinya file tersebut adalah teks yang bisa dibaca manusia).

Dengan menggabungkan semua kriteria ini, kita berhasil memangkas ribuan kemungkinan file menjadi satu hasil yang pasti.

Password:

HWasnPhtq9AVKe0dmk45nxy20cvUa6EG

Bandit Level 6 → Level 7

Level Goal

The password for the next level is stored somewhere on the server and has all of the following properties:

  • owned by user bandit7
  • owned by group bandit6
  • 33 bytes in size

Commands you may need to solve this level

ls , cd , cat , file , du , find , grep

Solve:

Password untuk level berikutnya tersimpan di suatu tempat di dalam server (bukan hanya di folder home) dan memiliki karakteristik sebagai berikut:

  • Dimiliki oleh user: bandit7
  • Dimiliki oleh grup: bandit6
  • Ukuran file: 33 bytes

ssh -p 2220 bandit6@bandit.labs.overthewire.org

pw:HWasnPhtq9AVKe0dmk45nxy20cvUa6EG

Karena kita harus mencari di seluruh sistem dari akar (/), kita akan menggunakan perintah find dengan pengalihan error agar hasilnya bersih:

bandit6@bandit:~$ find / -user bandit7 -group bandit6 -size 33c 2>/dev/null
/var/lib/dpkg/info/bandit7.password
bandit6@bandit:~$ cat /var/lib/dpkg/info/bandit7.password

Explaination:

Pada level ini, kita belajar cara melakukan pencarian file lintas direktori sistem dengan kriteria kepemilikan (ownership). Berikut detailnya:

  1. Pencarian dari Root (/) Berbeda dengan level sebelumnya yang menggunakan titik (.), di sini kita menggunakan garis miring (/) yang berarti mencari di seluruh isi server, termasuk folder sistem yang sensitif.
  2. Filter Kepemilikan (-user & -group) Kita menggunakan kriteria kepemilikan file untuk mempersempit pencarian. File password target secara spesifik diatur agar dimiliki oleh user level berikutnya (bandit7) dan grup level saat ini (bandit6).
  3. Menangani Pesan Error (2>/dev/null) Ini adalah bagian krusial. Saat mencari di seluruh sistem, terminal akan menampilkan banyak pesan "Permission denied" karena user kita tidak punya akses ke folder tertentu.
  • 2 merujuk pada Standard Error.
  • >/dev/null membuang pesan error tersebut ke "lubang hitam" virtual.
  • Tanpa perintah ini, hasil pencarian yang benar akan tenggelam di antara ratusan baris error.

Password:

morbNTDkSW6jIlUc0ymOdMaLnOlFVAaj

Bandit Level 7→ Level 8

Level Goal

The password for the next level is stored in the file data.txt next to the word millionth

Commands you may need to solve this level

man, grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Solve:

Password untuk level berikutnya disimpan di dalam file **data.txt, tepat di sebelah kata "millionth"**.

ssh -p 2220 bandit7@bandit.labs.overthewire.org

pw:morbNTDkSW6jIlUc0ymOdMaLnOlFVAaj

Kita akan menggunakan perintah grep untuk menyaring ribuan baris data dan hanya menampilkan baris yang mengandung kata kunci yang kita cari:

bandit7@bandit:~$ ls
data.txt
bandit7@bandit:~$ grep "millionth" data.txt

Explaination:

Level ini memperkenalkan kita pada salah satu alat paling kuat di Linux untuk mengolah teks, yaitu **grep**.

  1. Apa itu grep? grep (Global Regular Expression Print) adalah perintah yang berfungsi untuk mencari pola teks tertentu di dalam sebuah file. Bayangkan seperti fitur Find (Ctrl+F) di aplikasi pengolah kata, tetapi versi terminal.
  2. Cara Kerjanya Saat kita menjalankan grep "millionth" data.txt, terminal akan memindai seluruh isi file tersebut dan hanya menampilkan baris yang memiliki kata "millionth". Karena instruksinya mengatakan password berada di sebelah kata tersebut, maka password akan langsung terlihat di baris yang sama.
  3. Kenapa Tidak Menggunakan cat? Jika kamu menggunakan cat data.txt, terminal kamu akan dibanjiri oleh ribuan baris teks acak yang sangat panjang. Ini akan membuat terminal lambat dan sangat sulit bagi mata manusia untuk menemukan satu kata di antara jutaan kata lainnya.

Password:

dfwvzFQi4mU0wfNbFOe9RoWskMLg7eEc

Bandit Level 8 → Level 9

Level Goal

The password for the next level is stored in the file data.txt and is the only line of text that occurs only once

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Helpful Reading Material

Solve:

Password untuk level berikutnya disimpan di dalam file **data.txt dan merupakan satu-satunya baris teks yang hanya muncul satu kali** (unik) di antara sekian banyak baris yang duplikat.

ssh -p 2220 bandit8@bandit.labs.overthewire.org

pw:dfwvzFQi4mU0wfNbFOe9RoWskMLg7eEc

Untuk menyelesaikan ini, kita tidak bisa hanya menggunakan satu perintah. Kita harus menggabungkan perintah sort dan uniq menggunakan teknik piping (|):

bandit8@bandit:~$ ls
data.txt
bandit8@bandit:~$ sort data.txt | uniq -u

Explaination:

Level ini mengajarkan kita tentang Piping dan pengolahan data teks yang efisien. Inilah alasan mengapa kita menggunakan kombinasi perintah tersebut:

  1. Perintah sort (Mengurutkan) Perintah uniq memiliki kelemahan: ia hanya bisa mendeteksi baris duplikat jika baris-baris tersebut terletak bersebelahan (berurutan). Oleh karena itu, kita harus menjalankan sort terlebih dahulu agar semua baris yang sama berkumpul menjadi satu kelompok.
  2. Perintah uniq -u (Mencari yang Unik) Setelah data terurut, kita menggunakan uniq dengan flag -u. Flag -u (unique) instruksikan terminal untuk hanya menampilkan baris yang benar-benar tidak memiliki duplikat sama sekali. Baris yang muncul lebih dari sekali akan langsung dibuang dari tampilan.
  3. Teknik Piping (|) Simbol garis tegak (|) disebut pipe. Fungsinya adalah mengirimkan hasil (output) dari perintah pertama (sort) untuk langsung diproses sebagai masukan (input) bagi perintah kedua (uniq). Ini jauh lebih cepat daripada harus membuat file sementara.

Password:

4CKMh1JI91bUIZZPXDqGanal4xvAg0JM

Bandit Level 9 → Level 10

Level Goal

The password for the next level is stored in the file data.txt in one of the few human-readable strings, preceded by several ‘=’ characters.

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Solve:

Password untuk level berikutnya disimpan di dalam file **data.txt. Password tersebut terselip di antara beberapa string yang bisa dibaca manusia (human-readable) dan diawali oleh beberapa karakter sama dengan (`=`**).

ssh -p 2220 bandit9@bandit.labs.overthewire.org

pw:4CKMh1JI91bUIZZPXDqGanal4xvAg0JM

Karena file ini bertipe biner, kita akan menggunakan perintah strings untuk menyaring teks, lalu menggabungkannya dengan grep untuk mencari karakter = yang banyak:

bandit9@bandit:~$ ls
data.txt
bandit9@bandit:~$ strings data.txt | grep "=="

Explaination:

Level ini mengajarkan kita cara mengekstraksi informasi dari file non-teks (biner). Berikut adalah rahasia di balik perintahnya:

  1. Perintah strings Ini adalah "penyelamat" saat kita berhadapan dengan file biner (seperti file executable atau data). Perintah ini berfungsi untuk mencari dan menampilkan urutan karakter yang bisa dibaca oleh manusia (biasanya minimal 4 karakter) dan mengabaikan karakter biner/aneh lainnya.
  2. Kenapa Tidak Menggunakan cat atau grep Langsung? Jika kamu melakukan cat data.txt, terminal bisa "rusak" atau macet karena mencoba menampilkan kode biner. Sementara itu, grep terkadang tidak bekerja maksimal pada file biner tanpa bantuan strings.
  3. Filtrasi dengan grep "==" Setelah strings mengeluarkan semua teks yang terbaca, kita menggunakan pipe (|) untuk menyalurkannya ke grep. Sesuai petunjuk soal (preceded by several '=' characters), kita mencari baris yang mengandung banyak tanda sama dengan. Hasilnya, password akan muncul dengan jelas di samping deretan tanda = tersebut.

Password:

FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey

Bandit Level 10 → Level 11

Level Goal

The password for the next level is stored in the file data.txt, which contains base64 encoded data

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Helpful Reading Material

Solve:

Password untuk level berikutnya disimpan di dalam file **data.txt. File ini berisi data yang telah di-encode (disandikan) menggunakan format Base64**.

ssh -p 2220 bandit10@bandit.labs.overthewire.org

pw:FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey

Untuk mendapatkan password aslinya, kita perlu melakukan proses decoding pada file tersebut menggunakan perintah base64:

bandit10@bandit:~$ ls
data.txt
bandit10@bandit:~$ cat data.txt 
VGhlIHBhc3N3b3JkIGlzIGR0UjE3M2ZaS2IwUlJzREZTR3NnMlJXbnBOVmozcVJyCg==
bandit10@bandit:~$ base64 -d data.txt 

Explaination:

Level ini melatih kita untuk mengenali dan memproses format data yang umum ditemukan dalam dunia keamanan siber dan transmisi data.

  1. Apa itu Base64? Base64 bukanlah sebuah enkripsi (karena tidak memerlukan kunci untuk membukanya), melainkan sebuah encoding. Tujuannya adalah mengubah data biner atau teks menjadi karakter ASCII (huruf A-Z, a-z, angka 0–9, serta simbol + dan /). Ciri khas data Base64 biasanya diakhiri dengan tanda sama dengan (=) sebagai padding.
  2. Perintah base64 -d Di Linux, kita memiliki utilitas bernama base64.Secara default, jika kita hanya mengetik base64 data.txt, terminal akan melakukan encoding (menyandikan). Flag **-d* (singkatan dari decode*) digunakan untuk membalikkan proses tersebut, yaitu mengubah teks Base64 kembali menjadi teks biasa yang bisa kita baca.
  3. Metode Alternatif (Piping) Kamu juga bisa menggunakan teknik piping jika ingin menampilkan isi file terlebih dahulu: cat data.txt | base64 -d

Password:

dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr

Bandit Level 11 → Level 12

Level Goal

The password for the next level is stored in the file data.txt, where all lowercase (a-z) and uppercase (A-Z) letters have been rotated by 13 positions

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Helpful Reading Material

Solve:

Password untuk level berikutnya disimpan di dalam file **data.txt. Semua huruf kecil (a-z) dan huruf besar (A-Z) di dalamnya telah diputar atau digeser sebanyak 13 posisi**.

ssh -p 2220 bandit11@bandit.labs.overthewire.org

pw:dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr

Kita akan menggunakan perintah tr (translate) untuk memetakan kembali huruf-huruf yang telah digeser ke huruf aslinya:

bandit11@bandit:~$ ls
data.txt
bandit11@bandit:~$ cat data.txt 
Gur cnffjbeq vf 7k16JArUVv5LxVuJfsSVdbbtaHGlw9D4
bandit11@bandit:~$ cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'

Explaination:

Level ini melatih logika manipulasi teks menggunakan perintah tr. Berikut adalah penjelasan mendalam tentang teknik yang digunakan:

  1. Apa itu ROT13? ROT13 (Rotate 13) adalah algoritma sederhana di mana setiap huruf diganti dengan huruf ke-13 setelahnya dalam alfabet. Karena alfabet memiliki 26 huruf, melakukan ROT13 dua kali pada teks yang sama akan mengembalikannya ke teks asli ($13 + 13 = 26$).
  2. Perintah tr (Translate) Perintah tr digunakan untuk mengganti atau menghapus karakter. Sintaks yang kita gunakan adalah tr 'set1' 'set2'. Set 1 ('A-Za-z'): Daftar huruf asli (A sampai Z besar, lalu a sampai z kecil). Set 2 ('N-ZA-Mn-za-m'): Tujuan pemetaan. Huruf 'A' digeser 13 posisi menjadi 'N', 'B' menjadi 'O', dan seterusnya. Setelah sampai 'Z', ia berputar kembali ke 'A'.
  3. Kenapa Menggunakan Jalur N-ZA-M? Kita memberi tahu terminal: “Gantilah huruf A dengan N, B dengan O, …, M dengan Z, lalu lanjut gantilah N dengan A, O dengan B, dan seterusnya.” Ini secara efektif membalikkan pergeseran 13 posisi tersebut.

Password:

7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4

Bandit Level 12 → Level 13

Level Goal

The password for the next level is stored in the file data.txt, which is a hexdump of a file that has been repeatedly compressed. For this level it may be useful to create a directory under /tmp in which you can work. Use mkdir with a hard to guess directory name. Or better, use the command “mktemp -d”. Then copy the datafile using cp, and rename it using mv (read the manpages!)

Commands you may need to solve this level

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd, mkdir, cp, mv, file

Helpful Reading Material

Solve:

Password disimpan di dalam file **data.txt*, yang merupakan hasil hexdump* dari sebuah file yang telah dikompres berulang kali menggunakan berbagai metode berbeda.

ssh -p 2220 bandit12@bandit.labs.overthewire.org

pw:7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4

Karena kita akan melakukan banyak perubahan file, pertama-tama buatlah folder kerja di /tmp, salin filenya ke sana, lalu ubah hexdump tersebut kembali menjadi file biner asli:

# 1. Persiapan folder kerja
bandit12@bandit:~$ mktemp -d
/tmp/tmp.XXXXXX (misal: /tmp/tmp.work123)
bandit12@bandit:~$ cp data.txt /tmp/tmp.work123
bandit12@bandit:~$ cd /tmp/tmp.work123
# 2. Mengubah hexdump menjadi file biner
bandit12@bandit:/tmp/tmp.work123$ xxd -r data.txt > data

Sekarang, kamu harus melakukan dekompresi berulang kali dengan mengecek tipe file menggunakan perintah file:

  • **file data** → Hasilnya gzip compressed.
  • mv data data.gz -> gunzip data.gz
  • **file data** → Hasilnya bzip2 compressed.
  • bzip2 -d data (menghasilkan file data.out)
  • **file data.out** → Hasilnya gzip compressed.
  • mv data.out data.gz -> gunzip data.gz
  • **file data** → Hasilnya POSIX tar archive.
  • tar -xf data (menghasilkan file data5.bin)
  • **file data5.bin** → Hasilnya POSIX tar archive.
  • tar -xf data5.bin (menghasilkan file data6.bin)
  • **file data6.bin** → Hasilnya bzip2 compressed.
  • bzip2 -d data6.bin (menghasilkan file data6.bin.out)
  • **file data6.bin.out** → Hasilnya POSIX tar archive.
  • tar -xf data6.bin.out (menghasilkan file data8.bin)
  • **file data8.bin** → Hasilnya gzip compressed.
  • mv data8.bin data8.gz -> gunzip data8.gz
  • **file data8** → Hasilnya ASCII text.
  • cat data8

Explaination:

Level ini adalah simulasi nyata bagaimana seorang analis keamanan membongkar lapisan-lapisan package atau malware. Berikut konsep intinya:

  1. Hexdump & xxd File data.txt bukan file biner asli, melainkan representasi teks dari biner (hexdump). Perintah xxd -r (reverse) digunakan untuk mengubah teks tersebut kembali menjadi format biner aslinya agar bisa dieksekusi atau didekompresi.
  2. Identifikasi dengan file Jangan tertipu oleh nama file. Di Linux, ekstensi (seperti .gz atau .tar) tidak menentukan tipe file. Kita menggunakan perintah file untuk melihat konten sebenarnya di dalam file tersebut sebelum menentukan perintah dekompresi yang tepat.
  3. Algoritma Kompresi Kamu menggunakan tiga alat berbeda di level ini:
  • gzip: Membutuhkan ekstensi .gz untuk didekompresi dengan gunzip.
  • bzip2: Bisa langsung menggunakan bzip2 -d.
  • tar: Merupakan archive (pengarsip), digunakan untuk membungkus beberapa file menjadi satu.

Password:

FO5dwFsc0cbaIiH0h8J2eUks2vdTDwAn

Bandit Level 13 → Level 14

Level Goal

The password for the next level is stored in /etc/bandit_pass/bandit14 and can only be read by user bandit14. For this level, you don’t get the next password, but you get a private SSH key that can be used to log into the next level. Look at the commands that logged you into previous bandit levels, and find out how to use the key for this level.

Commands you may need to solve this level

ssh, scp, umask, chmod, cat, nc, install

Helpful Reading Material

Solve:

Password untuk level berikutnya tersimpan di /etc/bandit_pass/bandit14, namun hanya bisa diakses oleh user bandit14. Kita diberikan sebuah kunci SSH pribadi (Private Key) bernama sshkey.private di direktori home bandit13.

ssh -p 2220 bandit13@bandit.labs.overthewire.org

pw:FO5dwFsc0cbaIiH0h8J2eUks2vdTDwAn

Daripada mencoba melakukan SSH dari dalam server yang sering kali dibatasi, kita akan membawa kunci tersebut ke komputer lokal kita untuk login langsung dari luar.

  1. Di server Bandit 13: Tampilkan isi kunci dan salin (copy) seluruh teksnya: bandit13@bandit:~$ cat sshkey.private (Salin semua teks mulai dari -----BEGIN RSA PRIVATE KEY----- sampai akhir).
  2. Di komputer lokal Anda: Keluar dari server Bandit, lalu buat file baru untuk menyimpan kunci tersebut: # Gunakan editor teks seperti nano nano bandit14.key # Paste kunci yang tadi di-copy, lalu simpan (Ctrl+O, Enter, Ctrl+X)
  3. Atur Izin File (Paling Penting!): SSH tidak akan mengizinkan penggunaan kunci yang izinnya terlalu bebas. Kita harus mengubahnya agar hanya bisa dibaca oleh pemiliknya: chmod 600 bandit14.key
  4. Login Langsung ke Level 14: Gunakan kunci tersebut sebagai identitas untuk login: ssh -i bandit14.key bandit14@bandit.labs.overthewire.org -p 2220
  5. Ambil Password: Setelah masuk sebagai bandit14, baca file password-nya: bandit14@bandit:~$ cat /etc/bandit_pass/bandit14

Explaination:

Metode yang kita gunakan kali ini mencakup beberapa konsep keamanan siber yang sangat penting:

  1. Manual Key Exfiltration Terkadang, pembatasan jaringan di dalam server (seperti blokir akses ke localhost) memaksa kita untuk memindahkan kredensial ke mesin kita sendiri. Ini adalah skenario nyata dalam praktik penetration testing.
  2. Pentingnya chmod 600 Kunci pribadi adalah rahasia yang sangat sensitif. SSH memiliki mekanisme keamanan bawaan di mana ia akan menolak kunci jika file tersebut bisa dibaca oleh user lain di komputer yang sama. Perintah chmod 600 memastikan hanya Anda (sang pemilik) yang memiliki akses baca dan tulis ke file tersebut.
  3. Opsi -i (Identity File) Dengan menggunakan -i bandit14.key, kita memberi tahu klien SSH untuk menggunakan file kunci tersebut sebagai pengganti password saat melakukan jabat tangan (handshake) dengan server.

Password:

MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS

Bandit Level 14 → Level 15

Level Goal

The password for the next level can be retrieved by submitting the password of the current level to port 30000 on localhost.

Commands you may need to solve this level

ssh, telnet, nc, openssl, s_client, nmap

Helpful Reading Material

Solve:

Password untuk level berikutnya bisa didapatkan dengan cara mengirimkan (submit) password level saat ini (bandit14) ke port 30000 yang berjalan di localhost.

ssh -p 2220 bandit14@bandit.labs.overthewire.org

pw:MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS

Kita akan menggunakan “Pisau Swiss” dalam dunia jaringan, yaitu perintah **nc** (Netcat), untuk menyambungkan diri ke port tersebut:

# 1. Pastikan Anda sudah login sebagai bandit14
# 2. Kirim password bandit14 ke port 30000
bandit14@bandit:~$ nc localhost 30000

Setelah kamu menekan Enter, kursor akan berkedip menunggu input. Masukkan password bandit14 yang kamu dapatkan di level sebelumnya: MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS

Explaination:

Di level ini, kita beralih dari manipulasi file ke komunikasi jaringan dasar. Berikut adalah konsep intinya:

  1. Apa itu Port? Bayangkan alamat IP server sebagai alamat sebuah apartemen. Port adalah nomor pintu kamar di dalam apartemen tersebut. Dalam kasus ini, ada sebuah aplikasi yang sedang “menunggu” di kamar nomor 30000. Aplikasi tersebut diprogram untuk memberikan password level berikutnya jika kita memberinya password yang benar.
  2. Mengenal nc (Netcat) nc atau Netcat adalah utilitas yang sangat kuat untuk membaca dan menulis data di seluruh koneksi jaringan menggunakan protokol TCP atau UDP. Di sini, kita menggunakannya sebagai klien sederhana untuk membuka koneksi ke localhost pada port 30000.
  3. Localhost (127.0.0.1) localhost adalah nama standar yang digunakan untuk merujuk pada komputer yang sedang kamu gunakan saat ini. Jadi, perintah nc localhost 30000 berarti: "Buka koneksi ke pintu 30000 di mesin ini juga."
  4. Interaksi dengan Layanan Banyak layanan di server bekerja dengan cara ini: kamu mengirimkan data (request), dan server akan memberikan balasan (response). Jika password yang kamu masukkan salah, server biasanya akan langsung memutus koneksi atau memberi tahu bahwa input salah.

Password:

8xCjnmgoKbGLhHFAZlGE5Tmu4M2tKJQo

Bandit Level 15 → Level 16

Level Goal

The password for the next level can be retrieved by submitting the password of the current level to port 30001 on localhost using SSL/TLS encryption.

Helpful note: Getting “DONE”, “RENEGOTIATING” or “KEYUPDATE”? Read the “CONNECTED COMMANDS” section in the manpage.

Commands you may need to solve this level

ssh, telnet, nc, ncat, socat, openssl, s_client, nmap, netstat, ss

Helpful Reading Material

Solve:

Password untuk level berikutnya bisa didapatkan dengan mengirimkan password level saat ini (bandit15) ke port 30001 di localhost. Namun, kali ini koneksi tersebut wajib menggunakan dekripsi/enkripsi SSL/TLS.

ssh -p 2220 bandit15@bandit.labs.overthewire.org

pw:8xCjnmgoKbGLhHFAZlGE5Tmu4M2tKJQo

Karena port ini menggunakan SSL, perintah nc (Netcat) biasa akan gagal. Kita harus menggunakan perintah **openssl s_client** yang berfungsi sebagai klien untuk koneksi yang terenkripsi:

# Gunakan openssl s_client untuk terhubung ke localhost port 30001
bandit15@bandit:~$ openssl s_client -connect localhost:30001

Setelah menjalankan perintah tersebut, terminal akan menampilkan banyak informasi tentang sertifikat SSL. Tunggu sampai muncul pesan **CONNECTED**.

Silakan tempel (paste) password bandit15 kamu, lalu tekan Enter. Jika kamu mendapatkan pesan seperti DONE, jangan khawatir, cukup perhatikan output yang muncul setelah kamu mengirimkan password.

Explaination:

Di level ini, kita belajar tentang pentingnya enkripsi dalam komunikasi jaringan:

  1. SSL/TLS Encryption SSL (Secure Sockets Layer) dan penerusnya, TLS (Transport Layer Security), adalah protokol yang memastikan data yang dikirimkan antara klien dan server tidak bisa diintip oleh orang di tengah jalan (Man-in-the-Middle attack).
  2. Mengapa nc Gagal? Netcat biasa mengirimkan data apa adanya (raw data). Ketika ia mencoba bicara dengan port 30001 yang menunggu "bahasa enkripsi", port tersebut tidak akan mengerti dan koneksi akan terputus.
  3. Mengenal openssl s_client Ini adalah alat yang sangat sakti untuk melakukan troubleshooting atau berinteraksi dengan layanan yang terenkripsi (seperti HTTPS, IMAPS, atau dalam kasus ini, port custom 30001).
  • Opsi **-connect** digunakan untuk menentukan target IP dan Port.
  • Alat ini secara otomatis menangani proses “jabat tangan” (handshake) enkripsi sehingga kita bisa mengirim teks biasa dan sistem akan mengenkripsinya sebelum dikirim.

Password:

kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx

Bandit Level 16 → Level 17

Level Goal

The credentials for the next level can be retrieved by submitting the password of the current level to a port on localhost in the range 31000 to 32000. First find out which of these ports have a server listening on them. Then find out which of those speak SSL/TLS and which don’t. There is only 1 server that will give the next credentials, the others will simply send back to you whatever you send to it.

Helpful note: Getting “DONE”, “RENEGOTIATING” or “KEYUPDATE”? Read the “CONNECTED COMMANDS” section in the manpage.

Commands you may need to solve this level

ssh, telnet, nc, ncat, socat, openssl, s_client, nmap, netstat, ss

Helpful Reading Material

Solve:

Password untuk level berikutnya disembunyikan di salah satu port dalam rentang 31000 hingga 32000. Kita harus menemukan port yang menggunakan SSL dan memberikan respon berupa kunci (bukan sekadar memantulkan teks).

ssh -p 2220 bandit16@bandit.labs.overthewire.org

pw:kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx

Pertama, kita lakukan pemindaian untuk menemukan port yang aktif dan menggunakan SSL:

bandit16@bandit:~$ nmap -p 31000-32000 -sV localhost

Dari hasil scan, kita menemukan bahwa port 31790 adalah port SSL yang aktif. Selanjutnya, kita hubungkan ke port tersebut menggunakan openssl dengan opsi -quiet agar output lebih bersih:

bandit16@bandit:~$ openssl s_client -connect localhost:31790 -quiet

Setelah terhubung, masukkan password bandit16 kamu.

bandit17@bandit:~$ cat /etc/bandit_pass/bandit17
EReVavePLFHtFlFsjn3hyzMlvSuSAcRD

Explaination:

Ada beberapa teknik penting yang kita gunakan untuk efisiensi di level ini:

  1. Nmap Service Detection (-sV) Tanpa -sV, Nmap hanya akan memberi tahu port itu "buka" atau "tutup". Dengan -sV, Nmap mencoba "berjabat tangan" dengan setiap port untuk mengetahui apakah itu layanan Echo biasa atau layanan SSL yang kita cari.
  2. Kekuatan Flag -quiet Secara default, openssl s_client menampilkan detail teknis sertifikat (siapa yang membuat, masa berlaku, dll). Flag **-quiet** menyembunyikan semua itu dan langsung membuka saluran komunikasi. Ini sangat krusial agar kita bisa fokus pada data yang dikirimkan server tanpa terganggu ribuan baris teks sampah.
  3. Transisi Kredensial Di level ini, kita belajar bahwa “kunci masuk” tidak selamanya berupa kata sandi. RSA Private Key adalah identitas digital. Siapa pun yang memiliki file kunci ini (dan izin file yang tepat) bisa masuk ke server tanpa perlu password.

Password:

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAvmOkuifmMg6HL2YPIOjon6iWfbp7c3jx34YkYWqUH57SUdyJ
imZzeyGC0gtZPGujUSxiJSWI/oTqexh+cAMTSMlOJf7+BrJObArnxd9Y7YT2bRPQ
Ja6Lzb558YW3FZl87ORiO+rW4LCDCNd2lUvLE/GL2GWyuKN0K5iCd5TbtJzEkQTu
DSt2mcNn4rhAL+JFr56o4T6z8WWAW18BR6yGrMq7Q/kALHYW3OekePQAzL0VUYbW
JGTi65CxbCnzc/w4+mqQyvmzpWtMAzJTzAzQxNbkR2MBGySxDLrjg0LWN6sK7wNX
x0YVztz/zbIkPjfkU1jHS+9EbVNj+D1XFOJuaQIDAQABAoIBABagpxpM1aoLWfvD
KHcj10nqcoBc4oE11aFYQwik7xfW+24pRNuDE6SFthOar69jp5RlLwD1NhPx3iBl
J9nOM8OJ0VToum43UOS8YxF8WwhXriYGnc1sskbwpXOUDc9uX4+UESzH22P29ovd
d8WErY0gPxun8pbJLmxkAtWNhpMvfe0050vk9TL5wqbu9AlbssgTcCXkMQnPw9nC
YNN6DDP2lbcBrvgT9YCNL6C+ZKufD52yOQ9qOkwFTEQpjtF4uNtJom+asvlpmS8A
vLY9r60wYSvmZhNqBUrj7lyCtXMIu1kkd4w7F77k+DjHoAXyxcUp1DGL51sOmama
+TOWWgECgYEA8JtPxP0GRJ+IQkX262jM3dEIkza8ky5moIwUqYdsx0NxHgRRhORT
8c8hAuRBb2G82so8vUHk/fur85OEfc9TncnCY2crpoqsghifKLxrLgtT+qDpfZnx
SatLdt8GfQ85yA7hnWWJ2MxF3NaeSDm75Lsm+tBbAiyc9P2jGRNtMSkCgYEAypHd
HCctNi/FwjulhttFx/rHYKhLidZDFYeiE/v45bN4yFm8x7R/b0iE7KaszX+Exdvt
SghaTdcG0Knyw1bpJVyusavPzpaJMjdJ6tcFhVAbAjm7enCIvGCSx+X3l5SiWg0A
R57hJglezIiVjv3aGwHwvlZvtszK6zV6oXFAu0ECgYAbjo46T4hyP5tJi93V5HDi
Ttiek7xRVxUl+iU7rWkGAXFpMLFteQEsRr7PJ/lemmEY5eTDAFMLy9FL2m9oQWCg
R8VdwSk8r9FGLS+9aKcV5PI/WEKlwgXinB3OhYimtiG2Cg5JCqIZFHxD6MjEGOiu
L8ktHMPvodBwNsSBULpG0QKBgBAplTfC1HOnWiMGOU3KPwYWt0O6CdTkmJOmL8Ni
blh9elyZ9FsGxsgtRBXRsqXuz7wtsQAgLHxbdLq/ZJQ7YfzOKU4ZxEnabvXnvWkU
YOdjHdSOoKvDQNWu6ucyLRAWFuISeXw9a/9p7ftpxm0TSgyvmfLF2MIAEwyzRqaM
77pBAoGAMmjmIJdjp+Ez8duyn3ieo36yrttF5NSsJLAbxFpdlc1gvtGCWW+9Cq0b
dxviW8+TFVEBl1O4f7HVm6EpTscdDxU+bCXWkfjuRb7Dy9GOtt9JPsX8MBTakzh3
vBgsyi/sN3RqRBcGU40fOoZyfAMT8s1m/uYv52O6IgeuZ/ujbjY=
-----END RSA PRIVATE KEY-----
EReVavePLFHtFlFsjn3hyzMlvSuSAcRD

Bandit Level 17 → Level 18

Level Goal

There are 2 files in the homedirectory: passwords.old and passwords.new. The password for the next level is in passwords.new and is the only line that has been changed between passwords.old and passwords.new

NOTE: if you have solved this level and see ‘Byebye!’ when trying to log into bandit18, this is related to the next level, bandit19

Commands you may need to solve this level

cat, grep, ls, diff

Solve:

ssh -p 2220 bandit17@bandit.labs.overthewire.org

pw:EReVavePLFHtFlFsjn3hyzMlvSuSAcRD

Cara Login Menggunakan RSA Key

Setelah mendapatkan kunci RSA di level 16, kamu tidak bisa langsung menggunakannya sebagai “password”. Kamu harus menggunakannya sebagai identitas. Ikuti langkah cerdas ini:

  1. Salin isi kunci dari terminal (mulai dari -----BEGIN RSA PRIVATE KEY----- sampai -----END RSA PRIVATE KEY-----).
  2. Di komputer lokal kamu (PC/Laptop), buat file baru: nano bandit17.key.
  3. Paste kunci tersebut ke dalamnya, simpan dan keluar.
  4. Ubah Izin File: Ini wajib! SSH akan menolak kunci yang terlalu “terbuka”.

chmod 600 bandit17.key

Login:

ssh -i bandit17.key bandit17@bandit.labs.overthewire.org -p 2220

Setelah berhasil masuk ke Level 17, kamu akan menemukan dua file di direktori home: passwords.old dan passwords.new. Password untuk level berikutnya adalah satu-satunya baris yang berubah di dalam file passwords.new jika dibandingkan dengan passwords.old.

Mencari perbedaan baris secara manual di antara ratusan baris data sangatlah melelahkan. Gunakan perintah **diff** untuk menemukan perbedaannya dalam sekejap:

bandit17@bandit:~$ ls
passwords.new  passwords.old
bandit17@bandit:~$ diff passwords.old passwords.new

Explaination:

Level ini sangat penting untuk memahami konsep manajemen versi dan audit file.

  1. Mengenal Perintah diff diff (difference) adalah utilitas standar di Linux yang digunakan untuk membandingkan isi dua buah file baris demi baris. Perintah ini akan menampilkan baris mana saja yang berbeda di antara keduanya.
  2. Membaca Output diff
  • Tanda **<** (kurang dari): Menunjukkan baris yang ada di file pertama (passwords.old) tapi sudah berubah/hilang.
  • Tanda **> (lebih dari): Menunjukkan baris yang ada di file kedua (passwords.new). Inilah password** yang kita cari karena ini adalah baris hasil perubahan terbaru.
  1. Alternatif dengan grep Sebenarnya kamu juga bisa menggunakan perintah lain jika ingin bereksperimen, namun diff adalah cara yang paling tepat dan singkat untuk skenario "mencari perbedaan".

Password:

x2gLTTjFwMOhQ8oWNbMN362QKxfRqGlO

Bandit Level 18 → Level 19

Level Goal

The password for the next level is stored in a file readme in the homedirectory. Unfortunately, someone has modified .bashrc to log you out when you log in with SSH.

Commands you may need to solve this level

ssh, ls, cat

Solve:

Password untuk level berikutnya ada di file **readme di direktori home. Masalahnya, user bandit18 memiliki file .bashrc yang sudah dimodifikasi untuk langsung mengeluarkan kamu (logout*) seketika setelah kamu berhasil login. Itulah alasan muncul pesan "Byebye!"*.

Karena kita tidak bisa masuk ke dalam shell interaktif, kita harus mengirimkan perintah langsung melalui protokol SSH dari komputer lokal kita:

# Tambahkan perintah 'ls' atau 'cat readme' di akhir baris perintah SSH
ssh bandit18@bandit.labs.overthewire.org -p 2220 'cat readme'

Setelah kamu menekan Enter, masukkan password bandit18 yang kamu dapatkan dari level sebelumnya (diff).

x2gLTTjFwMOhQ8oWNbMN362QKxfRqGlO

Explaination:

Level ini mengajarkan kita tentang fleksibilitas protokol SSH dan urutan eksekusi startup script di Linux.

  1. Manipulasi .bashrc Di Linux, file .bashrc adalah skrip yang otomatis dijalankan setiap kali seorang user masuk ke shell interaktif. Karena admin level ini memasukkan perintah exit atau perintah lain yang memutus sesi di dalam .bashrc, maka setiap kali kita login secara normal, kita langsung ditendang keluar.
  2. Eksekusi Perintah Jarak Jauh (Remote Command) SSH memungkinkan kita untuk menjalankan perintah di server tujuan tanpa harus membuka shell interaktif. Caranya adalah dengan menuliskan perintah tersebut di dalam tanda kutip di akhir baris SSH. Saat kita menjalankan ssh user@host 'perintah', server akan menjalankan perintah tersebut, mengirimkan hasilnya kembali ke layar kita, lalu langsung memutuskan koneksi sebelum .bashrc sempat mengusir kita.
  3. Memeriksa Isi Direktori Jika kamu tidak tahu nama filenya, kamu bisa menjalankan ls terlebih dahulu: ssh bandit18@bandit.labs.overthewire.org -p 2220 'ls' Setelah tahu ada file bernama readme, barulah gunakan cat readme.

Password:

cGWpMaKXVwDUNgPAVJbWYuGHVn9zl3j8

Bandit Level 19 → Level 20

Level Goal

To gain access to the next level, you should use the setuid binary in the homedirectory. Execute it without arguments to find out how to use it. The password for this level can be found in the usual place (/etc/bandit_pass), after you have used the setuid binary.

Helpful Reading Material

Solve:

Gunakan sebuah file biner khusus bernama **bandit20-do yang ada di direktori home. File ini memiliki izin SetUID**, yang berarti ia bisa menjalankan perintah sebagai user bandit20. Target kita adalah membaca password level berikutnya di lokasi standar: /etc/bandit_pass/bandit20.

ssh -p 2220 bandit19@bandit.labs.overthewire.org

pw:cGWpMaKXVwDUNgPAVJbWYuGHVn9zl3j8

Pertama, kita cek dulu cara menggunakan file biner tersebut:

bandit19@bandit:~$ ls -l
-rwsr-x--- 1 bandit20 bandit19 14876 Oct 14 09:26 bandit20-do
# Jalankan tanpa argumen untuk melihat instruksi
bandit19@bandit:~$ ./bandit20-do
Run a command as another user.
  Example: ./bandit20-do id

Karena file ini bisa menjalankan perintah sebagai bandit20, kita tinggal menyuruhnya untuk membaca file password yang sebelumnya tidak bisa kita akses:

bandit19@bandit:~$ ./bandit20-do cat /etc/bandit_pass/bandit20

Explaination:

Level ini memperkenalkan kita pada konsep Privilege Escalation (Eskalasi Hak Akses) yang sah melalui SetUID.

  1. Mengenal Tanda ‘s’ pada Izin File Jika kamu perhatikan hasil ls -l, izin filenya adalah -rwsr-x---. Huruf 's' kecil pada bagian pemilik (owner) menandakan bahwa bit SetUID aktif.
  2. Apa itu SetUID? Biasanya, saat kamu menjalankan program, program itu berjalan dengan hak akses kamu. Namun, dengan SetUID, program tersebut berjalan dengan hak akses pemilik file. Karena pemilik file bandit20-do adalah bandit20, maka program tersebut punya kekuatan untuk membaca file rahasia milik bandit20.
  3. Kenapa Ini Penting? Dalam sistem nyata, SetUID digunakan untuk perintah seperti passwd (agar user biasa bisa mengubah password mereka sendiri yang tersimpan di file sistem yang diproteksi). Namun, jika salah dikonfigurasi, SetUID bisa menjadi celah keamanan yang sangat berbahaya.

Password:

0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO

Bandit Level 20 → Level 21

Level Goal

There is a setuid binary in the homedirectory that does the following: it makes a connection to localhost on the port you specify as a commandline argument. It then reads a line of text from the connection and compares it to the password in the previous level (bandit20). If the password is correct, it will transmit the password for the next level (bandit21).

NOTE: Try connecting to your own network daemon to see if it works as you think

Commands you may need to solve this level

ssh, nc, cat, bash, screen, tmux, Unix ‘job control’ (bg, fg, jobs, &, CTRL-Z, …)

Solve:

Gunakan file biner SetUID bernama **suconnect** di direktori home. Program ini akan melakukan koneksi ke localhost pada port yang kamu tentukan, membaca teks dari koneksi tersebut, dan membandingkannya dengan password level saat ini (bandit20). Jika cocok, ia akan memberikan password level berikutnya.

ssh -p 2220 bandit20@bandit.labs.overthewire.org

pw:0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO

Tantangan utamanya adalah kita harus mengirimkan password sambil menjalankan program tersebut. Kita bisa menggunakan teknik background process agar satu terminal bisa melakukan dua tugas sekaligus:

# 1. Gunakan nc untuk mendengarkan di port 1234 dan kirimkan password bandit20
# Tambahkan simbol '&' agar perintah berjalan di background
bandit20@bandit:~$ echo "0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO" | nc -l -p 1234 &
[1] 18
# 2. Jalankan program suconnect untuk menghubungkan ke port 1234 tersebut
bandit20@bandit:~$ ./suconnect 1234

Explaination:

Kenapa metode ini sangat cerdas? Mari kita bedah logikanya:

  1. Netcat sebagai “Penyulut” (nc -l -p) Dengan perintah nc -l -p 1234, kita membuat sebuah layanan sementara di server yang menunggu koneksi di port 1234. Karena kita menggunakan pipe (echo ... |), maka siapa pun yang mengetuk pintu 1234 akan langsung menerima teks password tersebut.
  2. Kekuatan Simbol & (Background) Biasanya, jika kita menjalankan nc, terminal akan "terkunci" sampai koneksi selesai. Dengan menambahkan &, Linux memindahkan proses nc ke latar belakang. Angka [1] 18 yang muncul adalah ID proses tersebut. Ini memungkinkan kita tetap bisa mengetik perintah ./suconnect di terminal yang sama.
  3. Mekanisme SetUID Program suconnect memiliki bit SetUID aktif (milik bandit21). Saat ia memverifikasi bahwa password yang dikirim oleh nc benar, ia menggunakan hak akses bandit21 untuk mengambil dan mengirimkan password level berikutnya kepada kita.

Password:

EeoULMCra2q0dSkYj561DX7s1CpBuOBt

메타데이터
post_id
727945fa6aa2
slug
overthewire-bandit-writeup-mastering-linux-fundamentals-level-0-20-727945fa6aa2
url
https://medium.com/@lunarx/overthewire-bandit-writeup-mastering-linux-fundamentals-level-0-20-727945fa6aa2
canonical_url
https://medium.com/@lunarx/overthewire-bandit-writeup-mastering-linux-fundamentals-level-0-20-727945fa6aa2
author_url
https://medium.com/@lunarx
status
ok
fetched_at
2026-07-13 06:23:13