OverTheWire Bandit Writeup: Mastering Linux Fundamentals (Level 0 →20)
Level 0
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 -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:
- Melihat Daftar File (
ls) Perintahls(list) digunakan untuk melihat file apa saja yang ada di folder kita saat ini. Saat kita mengetikls, muncul file bernamareadme. Inilah target kita. - Membaca Isi File (
cat) Perintahcat(concatenate) adalah cara tercepat untuk menampilkan isi dari sebuah file teks langsung ke layar terminal. Dengan menjalankancat 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:
- Masalah dengan Karakter
-Di dalam dunia Linux/Unix, tanda hubung (-) biasanya digunakan untuk mengawali sebuah opsi atau bendera (misalnyals -l). Jika kita mengetikcat -, perintahcatakan menunggu input dari keyboard (Standard Input) alih-alih membaca file bernama-. - Solusi: Penunjuk Jalur (Pathname) Untuk memberitahu terminal bahwa
-adalah sebuah nama file, kita harus menyertakan jalurnya.**./* berarti "di direktori saat ini".cat Dengan mengetikcat ./-, 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:
- Penggunaan Tanda Kutip (
" ") Nama file ini mengandung spasi. Tanpa tanda kutip, perintahcatakan menganggap kita mencoba membuka empat file berbeda. Tanda kutip membungkus nama tersebut menjadi satu kesatuan nama file yang utuh. - 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. - Keamanan dalam Eksekusi Menggabungkan
--dengan tanda kutip adalah cara paling aman untuk memastikan perintahcatmembaca 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:
- Aturan Titik (
.) pada Nama File Di Linux, file apa pun yang namanya diawali dengan tanda titik (contoh:.hiddenfileatau...Hiding-From-You) secara otomatis dianggap sebagai hidden file. File-file ini biasanya digunakan untuk konfigurasi sistem agar tidak mengotori tampilan daftar file utama. - Melihat yang Tersembunyi (
ls -la) Perintahlsbiasa 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. - Mengenal
.dan..Saat menjalankanls -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:
- Mengenal Tipe File (
file) Perintahfiledigunakan 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 dengancat. File bertipe ASCII text adalah file yang berisi teks murni yang bisa dibaca oleh manusia. Inilah target kita. - *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. - Kombinasi Double Dash (
--) dan Tanda Kutip Sama seperti level sebelumnya, karena nama filenya diawali dengan tanda hubung (-file07), kita menggunakan--untuk memberitahu perintahcatbahwa-file07adalah 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:
**-type f**: Memastikan kita hanya mencari file, bukan direktori.**-size 1033c: Mencari file dengan ukuran tepat 1033 bytes*. Hurufcdi sini sangat penting karena merujuk pada satuan bytes*.**! -executable: Tanda seru (!) berarti "bukan". Jadi kita mencari file yang tidak memiliki izin eksekusi**.**-exec file {} +**: Bagian ini menjalankan perintahfileterhadap semua hasil yang ditemukan olehfind. Ini membantu kita memverifikasi tipe konten di dalamnya.**| 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:
- 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. - 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). - 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.
2merujuk pada Standard Error.>/dev/nullmembuang 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**.
- 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. - 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. - Kenapa Tidak Menggunakan
cat? Jika kamu menggunakancat 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:
- Perintah
sort(Mengurutkan) Perintahuniqmemiliki kelemahan: ia hanya bisa mendeteksi baris duplikat jika baris-baris tersebut terletak bersebelahan (berurutan). Oleh karena itu, kita harus menjalankansortterlebih dahulu agar semua baris yang sama berkumpul menjadi satu kelompok. - Perintah
uniq -u(Mencari yang Unik) Setelah data terurut, kita menggunakanuniqdengan 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. - 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:
- Perintah
stringsIni 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. - Kenapa Tidak Menggunakan
catataugrepLangsung? Jika kamu melakukancat data.txt, terminal bisa "rusak" atau macet karena mencoba menampilkan kode biner. Sementara itu,grepterkadang tidak bekerja maksimal pada file biner tanpa bantuanstrings. - Filtrasi dengan
grep "=="Setelahstringsmengeluarkan semua teks yang terbaca, kita menggunakan pipe (|) untuk menyalurkannya kegrep. 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.
- 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. - Perintah
base64 -dDi Linux, kita memiliki utilitas bernamabase64.Secara default, jika kita hanya mengetikbase64 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. - 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:
- 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$).
- Perintah
tr(Translate) Perintahtrdigunakan untuk mengganti atau menghapus karakter. Sintaks yang kita gunakan adalahtr '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'. - 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** → Hasilnyagzip compressed.mv data data.gz->gunzip data.gz**file data** → Hasilnyabzip2 compressed.bzip2 -d data(menghasilkan filedata.out)**file data.out** → Hasilnyagzip compressed.mv data.out data.gz->gunzip data.gz**file data** → HasilnyaPOSIX tar archive.tar -xf data(menghasilkan filedata5.bin)**file data5.bin** → HasilnyaPOSIX tar archive.tar -xf data5.bin(menghasilkan filedata6.bin)**file data6.bin** → Hasilnyabzip2 compressed.bzip2 -d data6.bin(menghasilkan filedata6.bin.out)**file data6.bin.out** → HasilnyaPOSIX tar archive.tar -xf data6.bin.out(menghasilkan filedata8.bin)**file data8.bin** → Hasilnyagzip compressed.mv data8.bin data8.gz->gunzip data8.gz**file data8** → HasilnyaASCII text.cat data8

Explaination:
Level ini adalah simulasi nyata bagaimana seorang analis keamanan membongkar lapisan-lapisan package atau malware. Berikut konsep intinya:
- Hexdump &
xxdFiledata.txtbukan file biner asli, melainkan representasi teks dari biner (hexdump). Perintahxxd -r(reverse) digunakan untuk mengubah teks tersebut kembali menjadi format biner aslinya agar bisa dieksekusi atau didekompresi. - Identifikasi dengan
fileJangan tertipu oleh nama file. Di Linux, ekstensi (seperti .gz atau .tar) tidak menentukan tipe file. Kita menggunakan perintahfileuntuk melihat konten sebenarnya di dalam file tersebut sebelum menentukan perintah dekompresi yang tepat. - Algoritma Kompresi Kamu menggunakan tiga alat berbeda di level ini:
- gzip: Membutuhkan ekstensi
.gzuntuk didekompresi dengangunzip. - 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.
- 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). - 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) - 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 - Login Langsung ke Level 14: Gunakan kunci tersebut sebagai identitas untuk login:
ssh -i bandit14.key bandit14@bandit.labs.overthewire.org -p 2220 - 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:
- 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.
- Pentingnya
chmod 600Kunci 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. Perintahchmod 600memastikan hanya Anda (sang pemilik) yang memiliki akses baca dan tulis ke file tersebut. - 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
- How the Internet works in 5 minutes (YouTube) (Not completely accurate, but good enough for beginners)
- IP Addresses
- IP Address on Wikipedia
- Localhost on Wikipedia
- Ports
- Port (computer networking) on Wikipedia
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:
- 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.
- Mengenal
nc(Netcat)ncatau 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 kelocalhostpada port30000. - Localhost (127.0.0.1)
localhostadalah nama standar yang digunakan untuk merujuk pada komputer yang sedang kamu gunakan saat ini. Jadi, perintahnc localhost 30000berarti: "Buka koneksi ke pintu 30000 di mesin ini juga." - 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:
- 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).
- Mengapa
ncGagal? 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. - Mengenal
openssl s_clientIni 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:
- 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. - Kekuatan Flag
-quietSecara default,openssl s_clientmenampilkan 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. - 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:
- Salin isi kunci dari terminal (mulai dari
-----BEGIN RSA PRIVATE KEY-----sampai-----END RSA PRIVATE KEY-----). - Di komputer lokal kamu (PC/Laptop), buat file baru:
nano bandit17.key. - Paste kunci tersebut ke dalamnya, simpan dan keluar.
- 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.
- Mengenal Perintah
diffdiff(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. - 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.
- Alternatif dengan
grepSebenarnya kamu juga bisa menggunakan perintah lain jika ingin bereksperimen, namundiffadalah 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.
- Manipulasi
.bashrcDi Linux, file.bashrcadalah skrip yang otomatis dijalankan setiap kali seorang user masuk ke shell interaktif. Karena admin level ini memasukkan perintahexitatau perintah lain yang memutus sesi di dalam.bashrc, maka setiap kali kita login secara normal, kita langsung ditendang keluar. - 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.bashrcsempat mengusir kita. - Memeriksa Isi Direktori Jika kamu tidak tahu nama filenya, kamu bisa menjalankan
lsterlebih dahulu:ssh bandit18@bandit.labs.overthewire.org -p 2220 'ls'Setelah tahu ada file bernamareadme, barulah gunakancat 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.
- 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. - 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-doadalahbandit20, maka program tersebut punya kekuatan untuk membaca file rahasia milikbandit20. - 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:
- Netcat sebagai “Penyulut” (
nc -l -p) Dengan perintahnc -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. - Kekuatan Simbol
&(Background) Biasanya, jika kita menjalankannc, terminal akan "terkunci" sampai koneksi selesai. Dengan menambahkan&, Linux memindahkan prosesncke latar belakang. Angka[1] 18yang muncul adalah ID proses tersebut. Ini memungkinkan kita tetap bisa mengetik perintah./suconnectdi terminal yang sama. - Mekanisme SetUID Program
suconnectmemiliki bit SetUID aktif (milikbandit21). Saat ia memverifikasi bahwa password yang dikirim olehncbenar, ia menggunakan hak aksesbandit21untuk 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