1. Level 11

1.1. 关卡目标

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

1.2. 解决方案

1
2
3
4
5
$ ls
data.txt
$ ls -l
total 4
-rw-r----- 1 bandit12 bandit11 49 Oct 16 2018 data.txt

文件不大, 直接输出出来看看

1
2
$ cat data.txt
Gur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XSP6x2RHh

再根据题目所给的信息, 很明显是 Rot13 加解密了

那么我们可以写个脚本来处理或者用网上的在线工具

不过呢既然是 Linux 的 Wargame 我们当然要用 Linux 里现有的工具来解决

我搜索了一下相关资料, 发现可以用 tr 来替换文本从而达到 Rot13 加解密的效果

1
2
$ cat data.txt | tr 'a-zA-Z' 'n-za-mN-ZA-M'
The password is 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu
1
bandit12_password = 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu

2. Level 12

2.1. 关卡目标

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 using mkdir. For example: mkdir /tmp/myname123.
Then copy the datafile using cp, and rename it using mv (read the
manpages!)

2.2. 解决方案

1
2
$ ls
data.txt

我们看到题目很长, 所以解题的办法可能也很长(确信)

根据题目所给的信息, 这个文件是被多次压缩了的, 至于是什么压缩算法, 题目让我们直接看这个hexdump文件

然后我们得把解压缩的文件搞到我们自己的临时文件夹, 因为在我们用户的文件夹里是没权限创建文件夹的…

并且为了方便后面的操作, 我们把文件也复制过去

1
2
3
4
5
$ mkdir /tmp/ylsword
$ cp data.txt /tmp/ylsword
$ cd /tmp/ylsword
/tmp/ylsword$ ls
data.txt

然后我们用 xxd 命令看看这个文件的前几行内容

注意, 这是个 hexdump 文件, 不能直接用 xxd 查看, 得用 xxd 反向转换成二进制文件以后再查看

1
2
3
/tmp/ylsword$ xxd -r data.txt | xxd -l 30
00000000: 1f8b 0808 d7d2 c55b 0203 6461 7461 322e .......[..data2.
00000010: 6269 6e00 013c 02c3 fd42 5a68 3931 bin..<...BZh91

看不懂是什么压缩?

其实这些压缩算法都有签名, 也就是相当于特征码一样的东西, file 命令就是根据这些特征码来识别文件类型的, 所以下面的做法也可以使用 file 命令来代替

这里提供一个文件签名的在线查询网站: https://filesignatures.net/

我们根据 Signature 查询 1F8B08

发现这是 gzip

那么我们得先改后缀名, 否则会自动帮你改名甚至对于一些解压缩命令来说会无法解压

1
2
3
/tmp/ylsword$ xxd -r data.txt > data.txt.gz
/tmp/ylsword$ gzip -dv data.txt.gz
data.txt.gz: -0.9% -- replaced with data.txt

然后看下一个压缩算法

1
2
3
/tmp/ylsword$ xxd -l 30 data.txt
00000000: 425a 6839 3141 5926 5359 1daa e598 0000 BZh91AY&SY......
00000010: 1bff ffde 7f7f ffbf b7df cf9f fffe ..............

425A68 反查发现是 bzip2

1
2
3
/tmp/ylsword$ mv data.txt data.txt.bz2
/tmp/ylsword$ bzip2 -dv data.txt.bz2
data.txt.bz2: done

下一个

1
2
3
/tmp/ylsword$ xxd -l 30 data.txt
00000000: 1f8b 0808 d7d2 c55b 0203 6461 7461 342e .......[..data4.
00000010: 6269 6e00 edd1 3d48 1b71 1cc6 f1ff bin...=H.q....

还是 gzip

1
2
3
/tmp/ylsword$ mv data.txt data.txt.gz
/tmp/ylsword$ gzip -dv data.txt.gz
data.txt.gz: 98.0% -- replaced with data.txt
1
2
3
/tmp/ylsword$ xxd -l 30 data.txt
00000000: 6461 7461 352e 6269 6e00 0000 0000 0000 data5.bin.......
00000010: 0000 0000 0000 0000 0000 0000 0000 ..............

这个压缩算法的签名看起来不是在文件头, 文件头的字符串明显是文件名

我们输出多几行来看看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/tmp/ylsword$ xxd -l 350 data.txt
00000000: 6461 7461 352e 6269 6e00 0000 0000 0000 data5.bin.......
00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 3030 3030 3634 3400 3030 3030 ....0000644.0000
00000070: 3030 3000 3030 3030 3030 3000 3030 3030 000.0000000.0000
00000080: 3030 3234 3030 3000 3133 3336 3133 3531 0024000.13361351
00000090: 3332 3700 3031 3132 3434 0020 3000 0000 327.011244. 0...
000000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000100: 0075 7374 6172 2020 0072 6f6f 7400 0000 .ustar .root...
00000110: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000120: 0000 0000 0000 0000 0072 6f6f 7400 0000 .........root...
00000130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000140: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000150: 0000 0000 0000 0000 0000 0000 0000 ..............

我们看到个 ustar 的字样, 一般这些压缩算法都会用这种字符串作为文件的特征码的

7573746172 反查得到是 tar

这里跟其他两个压缩命令有点区别在于 tar 命令解压的参数选项是 -x

1
2
3
/tmp/ylsword$ mv data.txt data.txt.tar
/tmp/ylsword$ tar -xvf data.txt.tar
data5.bin

再看看下一个

1
2
3
/tmp/ylsword$ xxd -l 30 data5.bin
00000000: 6461 7461 362e 6269 6e00 0000 0000 0000 data6.bin.......
00000010: 0000 0000 0000 0000 0000 0000 0000 ..............

似曾相识啊, 那我们再解压一次

1
2
3
/tmp/ylsword$ mv data5.bin data5.bin.tar
/tmp/ylsword$ tar -xvf data5.bin.tar
data6.bin

继续下一个吧…

1
2
3
/tmp/ylsword$ xxd -l 30 data6.bin
00000000: 425a 6839 3141 5926 5359 3610 0145 0000 BZh91AY&SY6..E..
00000010: 897f ffdc 5980 40c0 55ff e000 5aa3 ....Y.@.U...Z.

425A68 是 bzip2, 上面出现过了

1
2
3
/tmp/ylsword$ mv data6.bin data6.bin.bz2
/tmp/ylsword$ bzip2 -dv data6.bin.bz2
data6.bin.bz2: done

下一个

1
2
3
/tmp/ylsword$ xxd -l 30 data6.bin
00000000: 6461 7461 382e 6269 6e00 0000 0000 0000 data8.bin.......
00000010: 0000 0000 0000 0000 0000 0000 0000 ..............

很明显是 tar

1
2
3
/tmp/ylsword$ mv data6.bin data6.bin.tar
/tmp/ylsword$ tar -xvf data6.bin.tar
data8.bin

感觉快结束了

1
2
3
/tmp/ylsword$ xxd -l 30 data8.bin
00000000: 1f8b 0808 d7d2 c55b 0203 6461 7461 392e .......[..data9.
00000010: 6269 6e00 0bc9 4855 2848 2c2e 2ecf bin...HU(H,...

又回到了 gzip

1
2
3
/tmp/ylsword$ mv data8.bin data8.bin.gz
/tmp/ylsword$ gzip -dv data8.bin.gz
data8.bin.gz: -4.1% -- replaced with data8.bin
1
2
3
4
5
/tmp/ylsword$ xxd -l 30 data8.bin
00000000: 5468 6520 7061 7373 776f 7264 2069 7320 The password is
00000010: 385a 6a79 4352 6942 5746 596b 6e65 8ZjyCRiBWFYkne
/tmp/ylsword$ cat data8.bin
The password is 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL

说实话如果不看攻略能完成这关还是挺有耐心的~~~

1
bandit13_password = 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL

3. Level 13

3.1. 关卡目标

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.
Note: localhost is a hostname that refers to the machine
you are working on

3.2. 解决方案

1
2
$ ls
sshkey.private

这关给了我们个 ssh 的密钥, 我们得用这个来 ssh 上去

那么我们应该很容易想到: 可以把密钥传输回我们本机, 然后再用这密钥直接登上下一关的账户 bandit14

实际上我们除了可以用 scp 命令来远程传输文件, 也可以用 nc 命令

这里我就不演示上面两个命令的做法了, 干脆直接用 ssh 运行命令搞定

首先, 我们先退出目标主机的 shell

1
$ exit
1
LengSword:~$ ssh -p 2220 bandit13@bandit.labs.overthewire.org 'cat sshkey.private' > sshkey

然后将密码复制粘贴后, ssh 上去以后会执行命令, 并把结果输出重定位到本机上

不过这里注意, 如果你是在 Windows 环境下 ssh 上去的话, 不必在意权限问题

而如果是在 Linux 下的话, 密钥文件需要设定权限只有拥有者才能读写, 否则会提示你密钥文件不受保护, 不过想想看如果其他用户能读取密钥确实也是不安全, 所以还得用 chmod 命令修改一下权限(传输过来的文件权限为644)

1
2
LengSword:~$ chmod 600 sshkey
LengSword:~$ ssh -i sshkey -p 2220 bandit14@bandit.labs.overthewire.org

然后登上去直接获取密码

1
2
$ cat /etc/bandit_pass/bandit14
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
1
bandit14_password = 4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e

4. Level 14

4.1. 关卡目标

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

4.2. 解决方案

这一关让我们向目标机器的本地开放的端口 30000 传输当前关的密码, 然后就能拿到密码了

就是 nc 命令的简单使用, 通过 nc 命令我们可以直接与服务端建立 TCP 连接

建立连接后直接把这关的密码粘贴过去然后回车就会传输数据过去了, 教学关

1
2
3
4
$ nc localhost 30000
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
Correct!
BfMYroe26WYalil77FoDi9qh59eK5xNr
1
bandit15_password = BfMYroe26WYalil77FoDi9qh59eK5xNr

5. Level 15

5.1. 关卡目标

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

Helpful note: Getting “HEARTBEATING” and “Read R BLOCK”? Use -ign_eof and read the “CONNECTED COMMANDS” section in the manpage. Next to ‘R’ and ‘Q’, the ‘B’ command also works in this version of that command…

5.2. 解决方案

与上一关类似

但是这一关我们需要用 SSL 加密的方式传输

从题目下面给出的资料, 我们发现可以用 openssl 命令里包含的 s_client 应用

1
2
3
4
5
6
7
8
$ openssl s_client -connect localhost:30001
...
---
BfMYroe26WYalil77FoDi9qh59eK5xNr
Correct!
cluFn7wTiGryunymYOu4RcffSxQluehd

closed

但是这样做会出现太多我们不需要的信息了, 不太好看…

使用 -help 选项查看了下各个选项, 发现我们可以使用 -quiet 来减少输出

1
2
3
4
5
6
7
8
9
$ openssl s_client -connect localhost:30001 -quiet
depth=0 CN = localhost
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = localhost
verify return:1
BfMYroe26WYalil77FoDi9qh59eK5xNr
Correct!
cluFn7wTiGryunymYOu4RcffSxQluehd
1
bandit16_password = cluFn7wTiGryunymYOu4RcffSxQluehd

6. Level 16

6.1. 关卡目标

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

6.2. 解决方案

这关很明显要让我们查找在 [31000,32000] 这个区间的端口号哪个在监听

至于我们需要以 SSL 方式连接还是不用, 这就得我们自己尝试了

查找端口明显要我们用 nmap 命令, 不过实际上 nc 命令也能端口扫描, 感兴趣的可以自己去试试

这里因为 nmap 是最方便的, 所以我们用它

1
2
3
4
5
6
7
8
9
10
11
$ nmap -p 31000-32000 localhost

Starting Nmap 7.40 ( https://nmap.org ) at 2020-04-04 11:39 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00029s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
31518/tcp filtered unknown
31790/tcp open unknown

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

其中 filtered 意味着防火墙, 过滤器或者其它网络障碍阻止了该端口被访问, nmap 无法得知
它是open(开放的) 还是 closed(关闭的), 所以不用管它

我们先试下 nc 连接发送数据, 发现没返回, 那么应该就是要 SSL 方式传输了

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
$ openssl s_client -connect localhost:31790 -quiet
depth=0 CN = localhost
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = localhost
verify return:1
cluFn7wTiGryunymYOu4RcffSxQluehd
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-----

很明显返回了下一关的私钥文件给我们

那么这里跟 Level 13 的做法一样, 用这个私钥文件登上去下一关(这里略), 再获取密码

1
2
$ cat /etc/bandit_pass/bandit17
xLYVMN9WE5zQ5vHacb0sZEVqbrp7nBTn
1
bandit17_password = xLYVMN9WE5zQ5vHacb0sZEVqbrp7nBTn

7. Level 17

7.1. 关卡目标

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

7.2. 解决方案

1
2
$ ls
passwords.new passwords.old

题目让我们对这两个文件找不同, 那么可以用 diff 命令

1
2
3
4
5
$ diff passwords.new passwords.old
42c42
< kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd
---
> hlbSBPAWJmL6WFDb06gpTx1pPButblOA

上面那一行是在 passwords.new 文件里的, 应该就是我们要找的密码了

1
bandit18_password = kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd

8. Level 18

8.1. 关卡目标

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.

8.2. 解决方案

上一关也提示我们这关直接 ssh 是登不上去的, 原因是 .bashrc 文件被修改了

那么其实绕过的方法我们在 Level 13 已经做过了, 就是用 ssh 远程执行命令的方法

而且题目已经告诉了我们密码藏在了什么地方

1
2
3
4
5
$ ssh -p 2220 bandit18@bandit.labs.overthewire.org 'cat readme'
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

bandit18@bandit.labs.overthewire.org's password:
IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x

很简单吧…

还有就是, 这里如果远程系统装了其他 shell (zsh, fish), 也能绕过这种限制

1
bandit19_password = IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x

9. Level 19

9.1. 关卡目标

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.

9.2. 解决方案

1
2
3
4
5
$ ls
bandit20-do
$ ls -l
total 8
-rwsr-x--- 1 bandit20 bandit19 7296 Oct 16 2018 bandit20-do

我们发现文件权限里有个 s 的字母, 实际上这是 setuid 权限位

具体的信息大家可以上网去查, 查完看完以后大家回来做这道题就应该知道怎么做了

简单来说, 这关在 home 目录给与我们的程序可以让我们以用户 bandit20 的身份运行命令

1
2
3
$ ./bandit20-do
Run a command as another user.
Example: ./bandit20-do id

然后直接获取密码就行了

1
2
$ ./bandit20-do cat /etc/bandit_pass/bandit20
GbKksEFF4yrVs6il55v6gwY5aVje5f0j
1
bandit20_password = GbKksEFF4yrVs6il55v6gwY5aVje5f0j

10. Level 20

10.1. 关卡目标

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

10.2. 解决方案

1
2
3
4
5
$ ls
suconnect
$ ls -l
total 12
-rwsr-x--- 1 bandit21 bandit20 12088 Oct 16 2018 suconnect

文件是类似于上一关的文件, 但是这关显然没有那么简单, 涉及到了两端之间的网络通信

我们先看一下程序的使用方法

1
2
3
$ ./suconnect
Usage: ./suconnect <portnumber>
This program will connect to the given port on localhost using TCP. If it receives the correct password from the other side, the next password is transmitted back.

结合题目所给的提示, 我们很容易发现这相当于给了我们个客户端, 我们得与服务器建立连接后接收到密码才能获取到下一关的密码

而服务器, 我们可以用 nc 命令监听某一未使用的端口, 这样就算是个简单的服务器了

那么这里建议使用 tmux 命令来实现终端复用, 因为这个比 screen 更加常用而且强大

关于 tmux 的学习, 这里我推荐一个讲的比较清楚的文章: http://cenalulu.github.io/linux/tmux/

使用方法也很简单, 我简单演示一下吧

[xxx]表示其终端名或正处于的命令名

[[xxx]]表示输入的按键组合或字符

1
$ tmux new -s server
server
1
2
3
4
$ nc -lp 12345
GbKksEFF4yrVs6il55v6gwY5aVje5f0j

[[Ctrl+B+D]]

1
$ tmux new -s client
client
1
2
3
4
$ ./suconnect 12345
Read: GbKksEFF4yrVs6il55v6gwY5aVje5f0j
Password matches, sending next password
[[Ctrl+B+D]]

1
$ tmux attach -t server
server
1
2
3
$ nc -lp 12345
GbKksEFF4yrVs6il55v6gwY5aVje5f0j
gE269g2h3mw3pwgrj0Ha9Uoqen1c9DGr

最后我们把 tmux 创建的东西都删了吧(强迫症)

1
$ tmux kill-server
1
bandit21_password = gE269g2h3mw3pwgrj0Ha9Uoqen1c9DGr

11. Level 21

11.1. 关卡目标

A program is running automatically at regular intervals from
cron, the time-based job scheduler. Look in /etc/cron.d/ for
the configuration and see what command is being executed.

11.2. 解决方案

这关学习下 cron 计划任务

题目让我们去看看配置文件

1
2
$ ls /etc/cron.d
atop cronjob_bandit22 cronjob_bandit23 cronjob_bandit24

因为我们在 21 关, 我们看看下一关的 cronjob

1
2
3
$ cat /etc/cron.d/cronjob_bandit22
@reboot bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null
* * * * * bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null

这里看到有两条 cron 表达式, 都是运行同一个 shell 脚本, 而且输出直接抛弃掉了

那我们看看这脚本的内容

1
2
3
4
$ cat /usr/bin/cronjob_bandit22.sh
#!/bin/bash
chmod 644 /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
cat /etc/bandit_pass/bandit22 > /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv

可以看到这里把密码给复制了一份存到临时文件夹里

我们直接读取就行了

1
2
$ cat /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
Yk7owGAcWjwMVRwrTesJEwB7WVOiILLI
1
bandit22_password = Yk7owGAcWjwMVRwrTesJEwB7WVOiILLI

评论