Bandit Level 0
关卡目标
本关的目标是通过 SSH 登录游戏。需要连接的主机为:
bandit.labs.overthewire.org
,端口:2220
。
用户名:bandit0
,密码:bandit0
。
登录成功后,请前往 Level 1 页面了解如何通过第 1 关。
思路
本关主要目的在于带领你熟悉ssh
工具,如何自定义参数连接到远程服务器。
值得注意的点就是需要指定端口为 2220 为非默认的 22 端口,需要使用-p 2220
指定,这个端口在后续也是一样的。
P.S 因为本关直接给出了答案,所以解法同下一关。
解法
略。
Bandit Level 0 → Level 1
关卡目标
下一关的密码存储在主目录下名为 readme
的文件中。
使用该密码通过 SSH 登录至 bandit1
。
每当找到某一关的密码时,使用 SSH(端口为 2220)登录到相应的关卡,继续游戏。
思路
本关主要考察 Linux 基本工具ls
和cat
的用法。
ls
是 list directory contents 的缩写,可以显示指定目录下的文件内容。
cat
是 concatenate 的缩写(不是猫的意思),用来把文件内容打印到终端。
解法
Bandit Level 1 → Level 2
关卡目标
下一关的密码存储在主目录下一个名为 -
的文件中。
思路
本关考察的是对于特殊文件名的处理方法,-
作为连接符一般是连接程序传入参数。
如果我们直接使用cat -
会报错因为会理解为在等待一个参数输入。
这里使用了两种方式:
- 第一种:
cat ./-
避免文件名被当作连接符 - 第二种:
cat < -
使用重定向输入。
扩展阅读:Shell 输入/输出重定向
解法
Bandit Level 2 → Level 3
关卡目标
下一关的密码存储在主目录下一个名为 spaces in this filename
的文件中。
思路
与上一关类似,考察对于包含特殊字符文件名的读取方式。
这里依旧有两种思路:
- 第一种:使用转义字符
\
- 第二种:使用双引号包裹。
小技巧:在常见的 shell 中都可以通过 Tab ↹ 键来快速补全文件名。 扩展阅读:Bash命令自动补全的原理
解法
Bandit Level 3 → Level 4
关卡目标
下一关的密码存储在 inhere 目录中的一个隐藏文件中。
思路
考察对于隐藏文件的显示,其实就是ls
命令参数的理解和使用。
题外话:部分发行版比如 Debian 会内置指令别名(alisa),常用的la
指令就是内置别名,等同于ls -a
,同样可以显示隐藏文件。
扩展阅读:在 Linux 中隐藏文件和文件夹的那些事
解法
Bandit Level 4 → Level 5
关卡目标
下一关的密码存储在 inhere 目录中唯一一个人类可读的文件中。
提示: 如果您的终端出现问题,可以尝试使用 reset
命令恢复。
思路
考察文件类型判断,本题给出的十个文件中有九个是不可直接打印的二进制文件。 本题有两种解题方式:
- 第一种:使用
file
命令来筛选文本文件。 - 第二种:使用
strings
命令输出所有可打印字符。 两种方式都使用了文件通配符*
来快速选择所有文件执行命令,其中第二种方式使用strings
在 CTF 比赛中更常见也能更快获得答案。
扩展阅读:
file 命令
strings 命令
通配符| Linux基础概要
解法
Bandit Level 5 → Level 6
关卡目标
下一关的密码存储在 inhere 目录下的某个文件中,该文件具有以下所有特性:
- 人类可读
- 文件大小为 1033 字节
- 不可执行
思路
考察对于 find 工具的使用,find 是一个很强大的工具,这里主要是用来按照属性筛选文件。
首先检查给出的inhere
目录里的文件,使用ls -R
可以递归显示指定目录和子目录的文件。可以看到这么多文件显然是不方便一个个用ls -l
去看详情的,所以这里就利用到了find
。
find ./inhere/ -type f -readable -size 1033c ! -executable
代表在当前目录下的inhere
文件夹下查找类型为f
(即文件),-readable
匹配当前用户可读,size
指定大小(这里数字后面的c
表明单位为字节),最后使用! -executable
排除可执行文件。
扩展阅读:find 命令- 在指定目录下查找文件
解法
Bandit Level 6 → Level 7
关卡目标
下一关的密码存储在服务器上的某个文件中,该文件具有以下所有特性:
- 拥有者是用户
bandit7
- 所属用户组是
bandit6
- 文件大小为 33 字节
思路
与上一关思路几乎一致,问题在于这次搜索范围在整个服务器,而部分目录作为当前用户bandit6
是无法访问的,那么find
命令就会出现很多无权限报错影响输出结果展示,所以我们要使用重定向输出2>/dev/null
将错误信息排除。
扩展阅读:Shell脚本———— /dev/null 2>&1详解