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 基本工具lscat的用法。 ls是 list directory contents 的缩写,可以显示指定目录下的文件内容。 cat是 concatenate 的缩写(不是猫的意思),用来把文件内容打印到终端。

解法

asciicast

Bandit Level 1 → Level 2

关卡目标

下一关的密码存储在主目录下一个名为 - 的文件中。

思路

本关考察的是对于特殊文件名的处理方法,-作为连接符一般是连接程序传入参数。
如果我们直接使用cat -会报错因为会理解为在等待一个参数输入。
这里使用了两种方式:

  • 第一种:cat ./-避免文件名被当作连接符
  • 第二种:cat < -使用重定向输入。

扩展阅读:Shell 输入/输出重定向

解法

asciicast

Bandit Level 2 → Level 3

关卡目标

下一关的密码存储在主目录下一个名为 spaces in this filename 的文件中。

思路

与上一关类似,考察对于包含特殊字符文件名的读取方式。
这里依旧有两种思路:

  • 第一种:使用转义字符\
  • 第二种:使用双引号包裹。

小技巧:在常见的 shell 中都可以通过 Tab ↹ 键来快速补全文件名。 扩展阅读:Bash命令自动补全的原理

解法

asciicast

Bandit Level 3 → Level 4

关卡目标

下一关的密码存储在 inhere 目录中的一个隐藏文件中。

思路

考察对于隐藏文件的显示,其实就是ls命令参数的理解和使用。
题外话:部分发行版比如 Debian 会内置指令别名(alisa),常用的la指令就是内置别名,等同于ls -a,同样可以显示隐藏文件。
扩展阅读:在 Linux 中隐藏文件和文件夹的那些事

解法

asciicast

Bandit Level 4 → Level 5

关卡目标

下一关的密码存储在 inhere 目录中唯一一个人类可读的文件中。
提示: 如果您的终端出现问题,可以尝试使用 reset 命令恢复。

思路

考察文件类型判断,本题给出的十个文件中有九个是不可直接打印的二进制文件。 本题有两种解题方式:

  • 第一种:使用file命令来筛选文本文件。
  • 第二种:使用strings命令输出所有可打印字符。 两种方式都使用了文件通配符*来快速选择所有文件执行命令,其中第二种方式使用strings在 CTF 比赛中更常见也能更快获得答案。

扩展阅读:
file 命令
strings 命令
通配符| Linux基础概要

解法

asciicast

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 命令- 在指定目录下查找文件

解法

asciicast

Bandit Level 6 → Level 7

关卡目标

下一关的密码存储在服务器上的某个文件中,该文件具有以下所有特性:

  • 拥有者是用户 bandit7
  • 所属用户组是 bandit6
  • 文件大小为 33 字节

思路

与上一关思路几乎一致,问题在于这次搜索范围在整个服务器,而部分目录作为当前用户bandit6是无法访问的,那么find命令就会出现很多无权限报错影响输出结果展示,所以我们要使用重定向输出2>/dev/null将错误信息排除。
扩展阅读:Shell脚本———— /dev/null 2>&1详解

解法

asciicast

Bandit Level 7 → Level 8

关卡目标

思路

解法

Bandit Level 8 → Level 9

关卡目标

思路

解法

Bandit Level 9 → Level 10

关卡目标

思路

解法

Bandit Level 10 → Level 11

关卡目标

思路

解法

Bandit Level 11 → Level 12

关卡目标

思路

解法

Bandit Level 12 → Level 13

关卡目标

思路

解法