Bandit(0-17)-Linux游戏

一个学习Linux的游戏,可以很好的练习和理解学过的Linux命令

题目地址:Bandit


Bandit Level 0

任务目标使用SSH连接bandit.labs.overthewire.org

1
2
3
4
5
6
# target: bandit.labs.overthewire.org
# username: bandit<N>
# password: bandit<N>
# <N>为数字
# ssh命令:
ssh bandit0@bandit.labs.overthewire.org 2220

(注意<N>表示第几关),如刚开始是bandit0

我个人使用的是Xshell来玩这个游戏,因为这个游戏一关过了就没上一关的事了,在接受主机密钥时选择一次性接收即可。

1
2
3
# ls
cat readme
boJ9jbbUNNfktd78OOpsqOltutMc3MY1

有一个readme文件,就是下一关的密码

KEY

boJ9jbbUNNfktd78OOpsqOltutMc3MY1


Level 1 –> Level 2

1
2
3
ssh bandit1@bandit.labs.overthewire.org 2220
# password
boJ9jbbUNNfktd78OOpsqOltutMc3MY1

大致玩法就这样,以后会省略这步

ls查看后发现是一个特殊字符命名的文件,特殊字符命名的文件经常还会引起一些安全问题,所以最好避免以特殊字符命名文件。本题中的文件名为‘-’一个减号,要知道在Linux中这个符号经常用到指定参数上

为了解决这个问题,我们要告诉shell不要将特殊字符后的字符解释为参数。
解决方法:

1
2
3
4
5
vim -- -
# or
cat ./-
# 下一关密码
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9

经测试cat不能使用– -打开vim可以。

Linux 下如何处理包含空格和特殊字符的文件名

KEY

CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9


Level 2 –> Level 3

这关文件名叫”spaces in this filename”,这个文件名里含有空格,啥都不说加反斜杠转义

1
2
3
bandit2@bandit:~$ cat spaces\ in\ this\ filename

UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK

KEY

UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK


Level 3 –> Level 4

这个简单,直接上过程

1
2
3
4
5
6
7
8
9
10
11
bandit3@bandit:~$ ls
inhere
bandit3@bandit:~$ cd inhere/
bandit3@bandit:~/inhere$ ls
bandit3@bandit:~/inhere$ ls -al
total 12
drwxr-xr-x 2 root root 4096 Oct 16 14:00 .
drwxr-xr-x 3 root root 4096 Oct 16 14:00 ..
-rw-r----- 1 bandit4 bandit3 33 Oct 16 14:00 .hidden
bandit3@bandit:~/inhere$ cat .hidden
pIwrPrtPN36QITSp3EQaw936yaFoFgAB

KEY

pIwrPrtPN36QITSp3EQaw936yaFoFgAB


Level 4 –> Level 5

刚开始硬着头皮直接

1
cat ./-*

后来

1
2
3
4
5
6
7
8
9
10
11
12
13
bandit4@bandit:~/inhere$ file ./*
./-file00: data
./-file01: data
./-file02: data
./-file03: data
./-file04: data
./-file05: data
./-file06: data
./-file07: ASCII text
./-file08: data
./-file09: data
# 只有文件97是可读的上面的cat一堆乱码,可以得到key但是没这个效率高
koReBOKuIDDepwhWk7jZC0RTdopnAYKh

KEY

koReBOKuIDDepwhWk7jZC0RTdopnAYKh


Level 5 –> Level 6

一看那么多我第一步就是

1
bandit5@bandit:~$ cat inhere/maybehere*/*

可不要这样,文件多,数据还多
将cat换成file看了一下19个文件夹,每个文件夹中有6个文件,注意题目有文件大小
使用find

1
bandit5@bandit:~$ find inhere -size 1033c

KEY

DXjZPULLxYr17uwoI01bNLQbtFemEgo7


Level 6 –> Level 7

题目给出三个提示

  • 属于用户bandit7
  • 属于用户组bandit6
  • 33bytes的大小

要使用find 的-user来指定文件拥有者,-group 来指定用户组,-size 来指定文件大小

1
find / -user bandit7 -group bandit6 -size 33c

出现很多Permission denied,想办法用grep过滤没有成功,不得不佩服大佬的 2> 的使用啊

1
find / -user bandit7 -group bandit6 -size 33c 2>/dev/null

KEY

HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs


Level 7 –> Level 8

登录ls发现data.txt文件,出手就是

1
2
3
4
bandit7@bandit:~$ cat data.txt | grep "password"
password's OnplaHV7DRbmveA3HgrPFBMwin0CAcZn
password ZySlP1BLPNbPmeZkambeGEYvBC6zyyfu
passwords QJIcoAmCWhkmsPbONAfFH3pmN91Ua9OX

注意题目,在单词millionth后

1
2
bandit7@bandit:~$ grep "millionth" data.txt 
millionth cvX2JJa4CFALtqS87jk27qwqGhBM9plV

(注意审题)

KEY

cvX2JJa4CFALtqS87jk27qwqGhBM9plV


Level 8 –> Level 9

sort 命令对文件的数据进行排序并使用uniq 命令的-u参数打印出不重复行

uniq接收或指定已排序好的文本文件。

1
2
bandit8@bandit:~$ sort data.txt | uniq -u
UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR

KEY

UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR


Level 9 –> Level 10

strings可以打印出对象文件或二进制文件中可以打印的字符串,
加上grep即可

1
2
3
4
5
6
7
bandit9@bandit:~$ strings data.txt | grep -P "^="
========== password
========== isa
=FQ?P\U
= F[
=)$=
========== truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk

KEY

truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk


Level 10 –> Level 11

bash64编码问题,使用-d解码即可

1
2
bandit10@bandit:~$ bash64 -d data.txt 
The password is IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR

KEY

IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR


Level 11 –> Level 12

刚开始还以为理解错题了,真是凯撒加密,这次偏移量为13,又叫ROT13

(python有个模块可以像下面这样转,此处待补充)

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

KEY

5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu


Level 12 –> Level 13

此题善于循环,主要是使用file,bzip2,gzip,tar

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
bandit12@bandit:~$ cd /tmp
bandit12@bandit:/tmp$ ls
ls: cannot open directory '.': Permission denied
bandit12@bandit:/tmp$ mkdir bandit12
mkdir: cannot create directory ‘bandit12’: File exists
bandit12@bandit:/tmp$ mkdir test2018
bandit12@bandit:/tmp$ cd test2018
bandit12@bandit:/tmp/test2018$ ls
bandit12@bandit:/tmp/test2018$ cp /home/bandit12/data.txt .
bandit12@bandit:/tmp/test2018$ ls
data.txt
bandit12@bandit:/tmp/test2018$ xxd -r data0
xxd: data0: No such file or directory
bandit12@bandit:/tmp/test2018$ xxd -r data.txt data0
bandit12@bandit:/tmp/test2018$ ls
data0 data.txt
bandit12@bandit:/tmp/test2018$ file data0
data0: gzip compressed data, was "data2.bin", last modified: Tue Oct 16 12:00:23 2018, max compression, from Unix
bandit12@bandit:/tmp/test2018$ mv data0 data.gz
bandit12@bandit:/tmp/test2018$ gzip -d data.gz
bandit12@bandit:/tmp/test2018$ file data
data: bzip2 compressed data, block size = 900k
bandit12@bandit:/tmp/test2018$ ls
data data.txt
bandit12@bandit:/tmp/test2018$ bzip -d data
-bash: bzip: command not found
bandit12@bandit:/tmp/test2018$ bzip2 -d data
bzip2: Can't guess original name for data -- using data.out
bandit12@bandit:/tmp/test2018$ ls
data.out data.txt
bandit12@bandit:/tmp/test2018$ file data.out
data.out: gzip compressed data, was "data4.bin", last modified: Tue Oct 16 12:00:23 2018, max compression, from Unix
bandit12@bandit:/tmp/test2018$ gzip -d data.out
gzip: data.out: unknown suffix -- ignored
bandit12@bandit:/tmp/test2018$ mv data.out data4.gz && gzip -d data4.gz
bandit12@bandit:/tmp/test2018$ ls
data4 data.txt
bandit12@bandit:/tmp/test2018$ file data4
data4: POSIX tar archive (GNU)
bandit12@bandit:/tmp/test2018$ tar -xvf data4
data5.bin
bandit12@bandit:/tmp/test2018$ file data5.bin
data5.bin: POSIX tar archive (GNU)
bandit12@bandit:/tmp/test2018$ tar -xvf data5
tar: data5: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
bandit12@bandit:/tmp/test2018$ tar -xvf data5.bin
data6.bin
bandit12@bandit:/tmp/test2018$ file data6.bin
data6.bin: bzip2 compressed data, block size = 900k
bandit12@bandit:/tmp/test2018$ bzip2 -d data6.bin
bzip2: Can't guess original name for data6.bin -- using data6.bin.out
bandit12@bandit:/tmp/test2018$ file data6.bin.out
data6.bin.out: POSIX tar archive (GNU)
bandit12@bandit:/tmp/test2018$ tar -xvf data6.bin.out
data8.bin
bandit12@bandit:/tmp/test2018$ file data8.bin
data8.bin: gzip compressed data, was "data9.bin", last modified: Tue Oct 16 12:00:23 2018, max compression, from Unix
bandit12@bandit:/tmp/test2018$ mv data8.bin data8.gz && gzip -d data8.gz
bandit12@bandit:/tmp/test2018$ ls
data4 data5.bin data6.bin.out data8 data.txt
bandit12@bandit:/tmp/test2018$ file data8
data8: ASCII text
bandit12@bandit:/tmp/test2018$ cat data8
The password is 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL
bandit12@bandit:/tmp/test2018$

KEY

8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL


Level 13 –> Level 14

这关需要使用ssh的-i参数

题目要求

下一级别的密码存储在 / etc / bandit_pass / bandit14中,只能由用户bandit14读取。对于此级别,您不会获得下一个密码,但您将获得可用于登录下一级别的私有SSH密钥。 注意: localhost是引用您正在处理的计算机的主机名(自豪的使用了谷歌翻译)

1
2
3
4
ssh -i sshkey.private bandit14@localhost


bandit14@bandit:~$ cat /etc/bandit_pass/bandit14

KEY

4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e


Level 14 –> Level 15

要求使用14账户连接本地30000端口发送上一关得到的密钥

1
2
3
4
bandit14@bandit:~$ nc localhost 30000
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
Correct!
BfMYroe26WYalil77FoDi9qh59eK5xNr

KEY

BfMYroe26WYalil77FoDi9qh59eK5xNr


Level 15 –> Level 16

使用以下命令

1
2
3
4
5
openssl s_client -connect localhost:30001 -ign_eof

# 提交
BfMYroe26WYalil77FoDi9qh59eK5xNr
Correct!

参数-ign_eof的作用:当输入文件到达文件尾的时候并不断开连接

KEY

cluFn7wTiGryunymYOu4RcffSxQluehd


Level 16 –> Level 17

1
2
3
4
5
6
7
8
9
10
11
12
13
bandit16@bandit:~$ nmap -p31000-32000 127.0.0.1

Starting Nmap 7.40 ( https://nmap.org ) at 2018-12-27 03:52 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00019s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
31518/tcp open unknown
31790/tcp open unknown

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

bandit16@bandit:/tmp/pq$ echo cluFn7wTiGryunymYOu4RcffSxQluehd | openssl s_client -quiet -connect localhost:31790 > sshkey.private

因为使用了nmap的-A参数我这里没有反应,于是没有使用这个参数

-A: 启用操作系统检测,版本检测,脚本扫描和跟踪路由

经过测试在31518端口测试,都会返回你提交的内容,在31790端口测试时提交得到一个ssh私钥,保存下来
然后使用此私钥连接即可。(我将内容输出到文件后,然后通过vim删除了其他无用的内容)

1
bandit16@bandit:/tmp/pq$ cat sshkey.private

KEY

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

-----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-----

需要修改一下sshkey.private文件的权限

1
2
chmod 600 sshkey.private
ssh -i sshkey.private bandit17@localhost

参考资料:
file命令

openssl命令


参考博客:

Bandit-通关题解

OverTheWire Bandit Writeup(11-20)


总结

这个游戏真心不错,对我这种整天看书的来说,是一个实践的很好的机会,很多命令都知道但是不会使用,玩了一半,能掌握一些基本的命令操作,对我个人来说已经算是又进阶了一个层次。