Here are the notes I take when walking through the Bandit in OverTheWire‘s wargame.

Level0 -> Level1

1
2
3
4
5
6
7
8
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

So the passwd is ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If

Level1 -> Level2

1
2
bandit1@bandit:~$ cat ./-
263JGJPfgU6LtdEvgfWU1XP5yac29mFx

Level2 -> Level3

1
2
bandit2@bandit:~$ cat ./'--spaces in this filename--'
MNk8KNH3Usiio41PRUEoDFPqfxLPlSmx

Level3 -> Level4

1
2
3
4
5
6
bandit3@bandit:~$ ls                      
inhere
bandit3@bandit:~$ ls -a ./inhere
. .. ...Hiding-From-You
bandit3@bandit:~$ cat ./inhere/...Hiding-From-You
2WmrDFRmJIq3IPxneAaMGhap0pFhF3NJ

Level4 -> Level5

1
2
3
4
5
6
7
8
bandit4@bandit:~/inhere$ ls   
-file00 -file02 -file04 -file06 -file08
-file01 -file03 -file05 -file07 -file09
bandit4@bandit:~/inhere$ cat ./*
\�G�I�d�� �`"��g��� '������Y��:bl�A��t�1�ν%gM�������
��u.Tq`h���Ee�+�<��"!^"�Jߑߟ����>jŠ��C�f�w��f>�<?��>��@F��kYq~Jjs�o��;���6���d�H@�9��I�}�v,��C�����Cy>f�|7�`i�}
�ت�=ؑ�Hz����1�Uk�U���켼�U4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQw
x����/vSژ�5f`}�3Y�ׯ��=9]�

After trials, I find this the passwd: 4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQw

Level5 -> Level6

1
2
3
bandit5@bandit:~/inhere$ cat $(find . -type f -size 1033c)
HWasnPhtq9AVKe0dmk45nxy20cvUa6EG
bandit5@bandit:~/inhere$

Here we should know that -type f selects the normal file type, and -size 1033c selects the file with the size of 1033 bytes (c here stands for char).

Level6 -> Level7

1
2
bandit6@bandit:/$ cat $(find . -type f -user bandit7 -group bandit6 -size 33c 2>/dev/null)
morbNTDkSW6jIlUc0ymOdMaLnOlFVAaj

Here we use -user and -group to filter the file that is owned by a certain user and a certain group.

Level7 -> Level8

1
2
bandit7@bandit:~$ cat data.txt | grep millionth
millionth dfwvzFQi4mU0wfNbFOe9RoWskMLg7eEc

Level8 -> Level9

1
2
bandit8@bandit:~$ sort data.txt | uniq -c | grep '1 '
1 4CKMh1JI91bUIZZPXDqGanal4xvAg0JM

Level9 -> Level10

1
2
3
4
5
bandit9@bandit:~$ strings ./data.txt | grep '=='
========== the
========== password
Q========== is%
>u`9J========== FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey

Level10 -> Level11

1
2
bandit10@bandit:~$ base64 -d ./data.txt
The password is dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr

Level11 -> Level12

1
2
bandit11@bandit:~$ cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
The password is 7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4

Level12 -> Level13

1
2
3
4
5
6
bandit12@bandit:/tmp/haoine159$ ls
data data5.bin data6.bin
bandit12@bandit:/tmp/haoine159$ file data
data: ASCII text
bandit12@bandit:/tmp/haoine159$ cat data
The password is FO5dwFsc0cbaIiH0h8J2eUks2vdTDwAn

In this level, the data.txt is a hex dump extracted from a compressed file, which is compressed from a compressed file, layer by layer, with different type of compression tool. So we need to check the file type with file and discompress it again and again, until it become an ACSII text file.

Level13 -> Level14

login as bandit14 use the ssh with the private key, then cat passwd.

1
2
3
4
5
6
7
8
9
bandit13@bandit:~$ ssh -i sshkey.private -p 2220 bandit14@localhost
bandit14@bandit:/etc/bandit_pass$ ls
bandit0 bandit13 bandit18 bandit22 bandit27 bandit31 bandit6
bandit1 bandit14 bandit19 bandit23 bandit28 bandit32 bandit7
bandit10 bandit15 bandit2 bandit24 bandit29 bandit33 bandit8
bandit11 bandit16 bandit20 bandit25 bandit3 bandit4 bandit9
bandit12 bandit17 bandit21 bandit26 bandit30 bandit5
bandit14@bandit:/etc/bandit_pass$ cat bandit14
MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS

Level14 -> Level15

1
2
3
4
bandit14@bandit:~$ nc localhost 30000
MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS
Correct!
8xCjnmgoKbGLhHFAZlGE5Tmu4M2tKJQo

Level15 -> Level16

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
bandit15@bandit:~$ openssl s_client -connect localhost:30001
CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 CN = SnakeOil
verify error:num=18:self-signed certificate
verify return:1
depth=0 CN = SnakeOil
verify return:1
---
Certificate chain
0 s:CN = SnakeOil
i:CN = SnakeOil
a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256
v:NotBefore: Jun 10 03:59:50 2024 GMT; NotAfter: Jun 8 03:59:50 2034 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFBzCCAu+gAwIBAgIUBLz7DBxA0IfojaL/WaJzE6Sbz7cwDQYJKoZIhvcNAQEL
BQAwEzERMA8GA1UEAwwIU25ha2VPaWwwHhcNMjQwNjEwMDM1OTUwWhcNMzQwNjA4
MDM1OTUwWjATMREwDwYDVQQDDAhTbmFrZU9pbDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBANI+P5QXm9Bj21FIPsQqbqZRb5XmSZZJYaam7EIJ16Fxedf+
jXAv4d/FVqiEM4BuSNsNMeBMx2Gq0lAfN33h+RMTjRoMb8yBsZsC063MLfXCk4p+
09gtGP7BS6Iy5XdmfY/fPHvA3JDEScdlDDmd6Lsbdwhv93Q8M6POVO9sv4HuS4t/
jEjr+NhE+Bjr/wDbyg7GL71BP1WPZpQnRE4OzoSrt5+bZVLvODWUFwinB0fLaGRk
GmI0r5EUOUd7HpYyoIQbiNlePGfPpHRKnmdXTTEZEoxeWWAaM1VhPGqfrB/Pnca+
vAJX7iBOb3kHinmfVOScsG/YAUR94wSELeY+UlEWJaELVUntrJ5HeRDiTChiVQ++
wnnjNbepaW6shopybUF3XXfhIb4NvwLWpvoKFXVtcVjlOujF0snVvpE+MRT0wacy
tHtjZs7Ao7GYxDz6H8AdBLKJW67uQon37a4MI260ADFMS+2vEAbNSFP+f6ii5mrB
18cY64ZaF6oU8bjGK7BArDx56bRc3WFyuBIGWAFHEuB948BcshXY7baf5jjzPmgz
mq1zdRthQB31MOM2ii6vuTkheAvKfFf+llH4M9SnES4NSF2hj9NnHga9V08wfhYc
x0W6qu+S8HUdVF+V23yTvUNgz4Q+UoGs4sHSDEsIBFqNvInnpUmtNgcR2L5PAgMB
AAGjUzBRMB0GA1UdDgQWBBTPo8kfze4P9EgxNuyk7+xDGFtAYzAfBgNVHSMEGDAW
gBTPo8kfze4P9EgxNuyk7+xDGFtAYzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
DQEBCwUAA4ICAQAKHomtmcGqyiLnhziLe97Mq2+Sul5QgYVwfx/KYOXxv2T8ZmcR
Ae9XFhZT4jsAOUDK1OXx9aZgDGJHJLNEVTe9zWv1ONFfNxEBxQgP7hhmDBWdtj6d
taqEW/Jp06X+08BtnYK9NZsvDg2YRcvOHConeMjwvEL7tQK0m+GVyQfLYg6jnrhx
egH+abucTKxabFcWSE+Vk0uJYMqcbXvB4WNKz9vj4V5Hn7/DN4xIjFko+nREw6Oa
/AUFjNnO/FPjap+d68H1LdzMH3PSs+yjGid+6Zx9FCnt9qZydW13Miqg3nDnODXw
+Z682mQFjVlGPCA5ZOQbyMKY4tNazG2n8qy2famQT3+jF8Lb6a4NGbnpeWnLMkIu
jWLWIkA9MlbdNXuajiPNVyYIK9gdoBzbfaKwoOfSsLxEqlf8rio1GGcEV5Hlz5S2
txwI0xdW9MWeGWoiLbZSbRJH4TIBFFtoBG0LoEJi0C+UPwS8CDngJB4TyrZqEld3
rH87W+Et1t/Nepoc/Eoaux9PFp5VPXP+qwQGmhir/hv7OsgBhrkYuhkjxZ8+1uk7
tUWC/XM0mpLoxsq6vVl3AJaJe1ivdA9xLytsuG4iv02Juc593HXYR8yOpow0Eq2T
U5EyeuFg5RXYwAPi7ykw1PW7zAPL4MlonEVz+QXOSx6eyhimp1VZC11SCg==
-----END CERTIFICATE-----
subject=CN = SnakeOil
issuer=CN = SnakeOil
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 2103 bytes and written 373 bytes
Verification error: self-signed certificate
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 4096 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 18 (self-signed certificate)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384
Session-ID: B4DB9ECF39B6A7796C89DED37A840CCD26E3F7F0704BC2D78814B89B813E3759
Session-ID-ctx:
Resumption PSK: B5D54876CF674F514AB366F6591C950BC8DC2D0FEB4AC0F564DB5EA1BF930F52FA27E9B40AB15E73127E7EBDAA3FA464
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - c2 df 63 0f 5f 7e d1 9f-4d c2 84 c8 b7 ec 8b 16 ..c._~..M.......
0010 - 3a 8b 6a cf 4a db f2 e9-ef 35 71 27 7d e2 b2 49 :.j.J....5q'}..I
0020 - d2 fa 77 a1 c1 76 0a 1d-f9 10 ba ce b7 7b b5 66 ..w..v.......{.f
0030 - e9 d1 30 02 6d 0e ff 55-91 2a 03 6a 3d ec 18 b4 ..0.m..U.*.j=...
0040 - 17 e9 54 c4 25 cd 6b f1-8d c2 73 8a a3 84 86 93 ..T.%.k...s.....
0050 - 00 6b 03 75 89 f6 5c 45-b0 84 73 c4 36 a9 be 15 .k.u..\E..s.6...
0060 - 8b 79 29 55 45 af c3 0a-6e 9d cd ef 70 c4 af a5 .y)UE...n...p...
0070 - 5a 69 3a cd 38 c6 d4 b4-a4 88 6d 5a 14 6e d8 56 Zi:.8.....mZ.n.V
0080 - b6 ef bc 5b 14 3a ab 09-e3 e6 b4 14 f3 70 3f e8 ...[.:.......p?.
0090 - f1 c4 43 ac 9a eb 06 c9-c4 c5 12 31 22 aa dc 52 ..C........1"..R
00a0 - b9 b0 70 7d dd ec 97 f8-eb b1 d1 85 4a 78 5c 50 ..p}........Jx\P
00b0 - 70 e8 bb b7 6c 98 fc 84-bb 75 ba 34 0f a1 52 ab p...l....u.4..R.
00c0 - 16 f5 e8 ec ea 73 75 8a-b8 54 34 f6 2f 0c c7 6b .....su..T4./..k
00d0 - b9 59 cb b6 4e 5a 2f 1e-e4 31 cd b6 fa 7a 73 aa .Y..NZ/..1...zs.

Start Time: 1759460255
Timeout : 7200 (sec)
Verify return code: 18 (self-signed certificate)
Extended master secret: no
Max Early Data: 0
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384
Session-ID: EB9BE7C27A4F4AE63B10C52C5C3FBE5A3A800B9BDAA8DD67DA7B3353F28842BD
Session-ID-ctx:
Resumption PSK: 34992F874A3E5EBDBD162282308167C7FE9AABAB3AFA0EA9529B1B99B4289CEDB63E7AAFB8969F7A6BB297510CF257AD
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - c2 df 63 0f 5f 7e d1 9f-4d c2 84 c8 b7 ec 8b 16 ..c._~..M.......
0010 - 44 33 f3 5d e0 83 34 2e-a8 18 de ba cd 99 8b f9 D3.]..4.........
0020 - c8 00 28 b0 37 77 39 5b-e7 2b c4 3b 03 e3 eb c7 ..(.7w9[.+.;....
0030 - 0f a2 eb 3e 76 80 80 cb-72 3f 87 d5 5f 6c 68 26 ...>v...r?.._lh&
0040 - 4a 37 99 31 0f eb d7 de-44 82 0c 03 e9 68 af be J7.1....D....h..
0050 - 43 42 2a 18 f4 52 57 3d-f2 a6 0f 36 3f 66 90 c1 CB*..RW=...6?f..
0060 - c2 8e b0 1c 75 f7 05 98-71 9e 3a f2 f9 2f f7 ec ....u...q.:../..
0070 - 97 a2 02 03 48 f9 63 0a-30 05 23 3b 53 9e f0 c7 ....H.c.0.#;S...
0080 - 13 28 52 d6 6a 9b 18 60-79 60 60 27 f8 01 cc 95 .(R.j..`y``'....
0090 - 19 c6 39 0a 97 b7 90 3e-cb 13 a2 53 24 8c 9d 51 ..9....>...S$..Q
00a0 - 91 90 4d 45 e0 9e e7 89-33 40 26 6f 21 b5 0d 99 ..ME....3@&o!...
00b0 - 61 f7 49 16 9a b3 c5 60-27 60 6c c7 b1 f8 a0 60 a.I....`'`l....`
00c0 - b2 4a af e3 ce 8d b5 cf-58 e3 67 1c 2f 26 20 04 .J......X.g./& .
00d0 - 9c 7f 98 71 7c 75 ad 21-00 ed 3c 5e 4c c3 45 49 ...q|u.!..<^L.EI

Start Time: 1759460255
Timeout : 7200 (sec)
Verify return code: 18 (self-signed certificate)
Extended master secret: no
Max Early Data: 0
---
read R BLOCK
8xCjnmgoKbGLhHFAZlGE5Tmu4M2tKJQo
Correct!
kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx

closed

Level16 -> Level17

This challenge got me blocked and I used AI to solve this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
bandit16@bandit:~$ pw='kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx'; for p in {31000..32000}; do timeout 0.12 bash -c ">/dev/tcp/127.0.0.1/$p" 2>/dev/null || continue; echo "===== port $p ====="; if echo | timeout 2 openssl s_client -connect 127.0.0.1:$p 2>&1 | grep -qE 'BEGIN CERTIFICATE|SSL-Session|Server certificate'; then printf "%s\n" "$pw" | timeout 3 openssl s_client -quiet -connect 127.0.0.1:$p 2>/dev/null || true; else printf "%s\n" "$pw" | timeout 3 nc -w 2 127.0.0.1 $p 2>/dev/null || true; fi; done
===== port 31046 =====
kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx
===== port 31518 =====
kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx
===== port 31691 =====
kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx
===== port 31790 =====
Correct!
-----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-----

===== port 31960 =====
kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx

Here we get a RSA private key instead of a direct password, so we need to try this on our local machine:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ echo "-----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-----" > key.1
$ chmod 600 key.1
$ ssh -i key.1 -p 2220 bandit17@bandit.labs.overthewire.org

Level17 -> Level18

1
2
3
4
5
bandit17@bandit:~$ diff $(ls)  
42c42
< x2gLTTjFwMOhQ8oWNbMN362QKxfRqGlO
---
> gvE89l3AhAhg3Mi9G2990zGnn42c8v20

So the password of bandit18 is x2gLTTjFwMOhQ8oWNbMN362QKxfRqGlO.

Level18 -> Level19

1
2
3
4
5
6
7
8
9
10
11
12
13
14
❯ ssh -p 2220 bandit18@bandit.labs.overthewire.org "cat readme"
_ _ _ _
| |__ __ _ _ __ __| (_) |_
| '_ \ / _` | '_ \ / _` | | __|
| |_) | (_| | | | | (_| | | |_
|_.__/ \__,_|_| |_|\__,_|_|\__|


This is an OverTheWire game server.
More information on http://www.overthewire.org/wargames

backend: gibson-0
bandit18@bandit.labs.overthewire.org's password:
cGWpMaKXVwDUNgPAVJbWYuGHVn9zl3j8

Level19 -> Level20

1
2
bandit19@bandit:~$ ./bandit20-do cat /etc/bandit_pass/bandit20    
0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO

Level20 -> Level21

1
2
3
4
5
6
7
8
9
bandit20@bandit:~$ nc -lvnp 12345 <<< "0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO" &
[1] 4129162
bandit20@bandit:~$ Listening on 0.0.0.0 12345
bandit20@bandit:~$ ./suconnect 12345
Connection received on 127.0.0.1 59596
Read: 0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO
Password matches, sending next password
EeoULMCra2q0dSkYj561DX7s1CpBuOBt
[1]+ Done nc -lvnp 12345 <<< "0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO"

Level21 -> Level22

1
2
3
4
5
6
7
8
9
10
11
12
13
14
bandit21@bandit:~$ ls /etc/cron.d                  
behemoth4_cleanup cronjob_bandit24 otw-tmp-dir
clean_tmp e2scrub_all sysstat
cronjob_bandit22 leviathan5_cleanup
cronjob_bandit23 manpage3_resetpw_job
bandit21@bandit:~$ cat /etc/cron.d/cronjob_bandit22
@reboot bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null
* * * * * bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null
bandit21@bandit:~$ cat /usr/bin/cronjob_bandit22.sh
#!/bin/bash
chmod 644 /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
cat /etc/bandit_pass/bandit22 > /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
bandit21@bandit:~$ cat /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
tRae0UfB9v0UzbCdn9cY0gQnds9GF58Q

Level22 -> Level23

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bandit22@bandit:~$ ls /etc/cron.d
behemoth4_cleanup cronjob_bandit24 otw-tmp-dir
clean_tmp e2scrub_all sysstat
cronjob_bandit22 leviathan5_cleanup
cronjob_bandit23 manpage3_resetpw_job
bandit22@bandit:~$ cat /etc/cron.d/cronjob_bandit23
@reboot bandit23 /usr/bin/cronjob_bandit23.sh &> /dev/null
* * * * * bandit23 /usr/bin/cronjob_bandit23.sh &> /dev/null
bandit22@bandit:~$ 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

Here we could see that the file /usr/bin/cronjob_bandit23.sh is copying the password of bandit23 into a file, whose name is the hash result from string 'I am user bandit23', every minute a time, so we could manually generate that hash result and cat that file.

1
2
bandit22@bandit:~$ cat /tmp/$(echo 'I am user bandit23 | md5sum | cut -d ' ' -f 1)
0Zf11ioIjMVN551jX3CmStKLYqjk54Ga

Level23 -> Level24