OverTheWire闯关笔记Bandit篇
OverTheWire闯关笔记
前往连接
Bandit
0级
此级别的目标是让您使用 SSH 登录游戏。 您需要连接的主机位于端口 2220
上的bandit.labs.overthewire.org
。 用户名是 bandit0
,密码是 bandit0
。
利用工具
ssh
1 | ssh -p 2220 bandit0@bandit.labs.overthewire.org |
1级
下一级的密码存储在主目录中的名为 readme
的文件中。使用此密码进行记录 使用 SSH 进入 bandit1
。每当您找到关卡的密码时, 使用 SSH(在端口 2220 上)登录该关卡并继续游戏。
利用工具
ssh
1 | ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If |
1 | ssh -p 2220 bandit1@bandit.labs.overthewire.org |
2级
下一级的密码存储在名为 - 的文件中,该文件位于主目录中
利用工具
ssh
难点:特殊字符的文件夹
请使用 cat ./-
打开
1 | 263JGJPfgU6LtdEvgfWU1XP5yac29mFx |
1 | ssh -p 2220 bandit2@bandit.labs.overthewire.org |
3级
下一级的密码存储在名为空格的文件中 在此文件名中位于主目录中
利用工具
ssh
难点:特殊字符的文件夹
请使用 cat ""
打开
1 | MNk8KNH3Usiio41PRUEoDFPqfxLPlSmx |
1 | ssh -p 2220 bandit3@bandit.labs.overthewire.org |
4级
下一级的密码存储在 inhere 目录的隐藏文件中。
利用工具
ssh
1 | 2WmrDFRmJIq3IPxneAaMGhap0pFhF3NJ |
1 | ssh -p 2220 bandit4@bandit.labs.overthewire.org |
5级
下一级的密码存储在唯一人类可读的密码中 文件。提示:如果您的终端混乱 向上,尝试 “重置” 命令。
利用工具
ssh
1 | 4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQw |
1 | ssh -p 2220 bandit5@bandit.labs.overthewire.org |
6级
下一级的密码存储在以下某处的文件中 inhere 目录,并具有以下所有属性:
- 人类可读
- 大小为 1033 字节
- 不可执行
利用工具
ssh
难点:在大量内容内查询文件
1 | find . -type f -readable ! -executable -size 1033c |
- 类型为普通文件(
-type f
) - 可读(
-readable
) - 不可执行(
! -executable
) - 大小为 1033 字节(
-size 1033c
)
1 | HWasnPhtq9AVKe0dmk45nxy20cvUa6EG |
1 | ssh -p 2220 bandit6@bandit.labs.overthewire.org |
7级
下一关的密码存储在 server 的某个地方,并具有以下所有属性:
- 由用户 Bandit7 拥有
- 由 Group Bandit6 拥有6
- 大小为 33 字节
利用工具
ssh
难点:find
指令的运用
1 | find / -user bandit7 -group bandit6 -size 33c 2>/dev/null |
/
:从根目录开始搜索。-user bandit7
:查找所有者是bandit7
的文件。-group bandit6
:查找组是bandit6
的文件。-size 33c
:查找文件大小正好是 33 字节的文件(c
表示字节)。2>/dev/null
:将错误消息(例如权限被拒绝的错误)重定向到/dev/null
以保持输出干净。
1 | morbNTDkSW6jIlUc0ymOdMaLnOlFVAaj |
1 | ssh -p 2220 bandit7@bandit.labs.overthewire.org |
8级
The password for the next level is stored in the file data.txt
next to the word millionth
下一级的密码存储在data.txt的百万分之一
单词旁边的文件
利用工具
ssh
grep
: 搜索文本文件中匹配指定模式的行。sort
: 对文本文件的行进行排序。uniq
: 报告或省略重复的行。
1 | grep "millionth" data.txt |
1 | dfwvzFQi4mU0wfNbFOe9RoWskMLg7eEc |
1 | ssh -p 2220 bandit8@bandit.labs.overthewire.org |
9级
下一级的密码存储在文件data.txt
中,并且是唯一只出现一次的文本行
利用工具
ssh
1 | sort data.txt | uniq -u |
1 | 4CKMh1JI91bUIZZPXDqGanal4xvAg0JM |
1 | ssh -p 2220 bandit9@bandit.labs.overthewire.org |
10级
下一级的密码存储在文件中,data.txt在为数不多的人类可读字符串之一中,前面有几个“=” 字符。
利用工具
ssh
- 使用
strings
命令提取人类可读字符串 - 使用
grep
命令过滤包含“=”字符的字符串
1 | strings data.txt | grep "=" |
1 | FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey |
1 | ssh -p 2220 bandit10@bandit.labs.overthewire.org |
11级
下一级的密码存储在文件data.txt中, 其中包含 base64 编码数据
利用工具
ssh
1 | cat data.txt | base64 --decode |
1 | dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr |
1 | ssh -p 2220 bandit11@bandit.labs.overthewire.org |
12级
下一级的密码存储在文件data.txt中, 其中所有小写 (a-z) 和大写 (A-Z) 字母都为 旋转 13 个位置
利用工具
ssh
1 | cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m' |
1 | 7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4 |
1 | ssh -p 2220 bandit12@bandit.labs.overthewire.org |
13级
下一级的密码存储在文件data.txt中, 这是重复压缩的文件的十六进制转储。 对于此级别,在 /tmp 下创建一个目录可能很有用 你可以工作。使用难以猜测的目录名称的 mkdir。 或者更好的是,使用命令“mktemp -d”。 然后使用 cp 复制数据文件,并使用 mv 重命名它
利用工具
ssh
使用 mktemp
创建一个难以猜测的临时目录
1 | tmp_dir=$(mktemp -d) |
将 data.txt
文件复制到临时目录,并重命名。
1 | cp data.txt "$tmp_dir/data.txt" |
将16进制转为2进制
1 | cat data.txt | xxd -r > data |
用 file
来查看文件属性,再用gzip -d
、bzip2 -d
、tar -xf
解压
1 | FO5dwFsc0cbaIiH0h8J2eUks2vdTDwAn |
1 | ssh -p 2220 bandit13@bandit.labs.overthewire.org |
14级
下一级的密码存储在 /etc/bandit_pass/bandit14 中,只能由用户读取 bandit14 。对于此级别,您不会获得下一个密码,但您 获取可用于登录下一关的私有 SSH 密钥。
难点:要先更改权限700
1 | chmod 700 sshkey.private |
1 | -----BEGIN RSA PRIVATE KEY----- |
1 | ssh -i sshkey.private bandit14@bandit.labs.overthewire.org -p 2220 |
15级
The password for the next level can be retrieved by submitting the password of the current level to port 30000 on localhost.
1 | MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS |
1 | ssh -p 2220 bandit14@bandit.labs.overthewire.org |
1 | 8xCjnmgoKbGLhHFAZlGE5Tmu4M2tKJQo |
1 | ssh -p 2220 bandit15@bandit.labs.overthewire.org |
16级
可以通过提交 当前级别的密码到 localhost 上的端口 30001 使用 SSL 加密。
- openssl s_client是使用 SSL/TLS 连接到服务器的简单客户端的实现。
1 | openssl s_client -connect localhost:30001 |
1 | kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx |
1 | ssh -p 2220 bandit16@bandit.labs.overthewire.org |
17级
可以通过提交 当前级别的密码到 localhost 上的端口,在 31000 到 32000。首先找出这些端口中哪些有服务器 倾听他们。然后找出哪些说SSL,哪些说SSL 不要。只有 1 台服务器将提供下一个凭据,即 其他人只会将您发送给它的任何东西发回给您。
1 | nmap -p 31000-32000 -sV localhost |
- 31046/tcp open echo
- 31518/tcp open ssl/echo
- 31691/tcp open echo
- 31790/tcp open ssl/unknown
- 31960/tcp open echo
1 | echo "kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx" | openssl s_client -connect localhost:31790 -ign_eof |
1 | kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx |
1 | -----BEGIN RSA PRIVATE KEY----- |
1 | ssh -i sshkey.private bandit17@bandit.labs.overthewire.org -p 2220 |
18级
主目录中有 2 个文件:passwords.old 和 passwords.new。下一级的密码位于 passwords.new 中,并且是 passwords.old 和 passwords.new 之间唯一已更改的行
注意:如果您已经解决了此级别并在尝试时看到“再见! 要登录 Bandit18,这与下一个级别 Bandit19 有关
1 | EReVavePLFHtFlFsjn3hyzMlvSuSAcRD |
1 | ssh -p 2220 bandit17@bandit.labs.overthewire.org |
1 | diff passwords.old passwords.new |
1 | bSrACvJvvBSxEM2SGsV5sn09vc3xgqyp |
1 | x2gLTTjFwMOhQ8oWNbMN362QKxfRqGlO |
1 | ssh -p 2220 bandit18@bandit.labs.overthewire.org |
19级
下一级的密码存储在文件自述文件中 主目录。不幸的是,有人修改了 .bashrc 以在您使用 SSH 登录时将您注销。
我们不是使用 SSH 登录计算机,而是通过 SSH 执行命令。首先,我们用来确保自述文件在文件夹中,然后我们可以用来读取它。
1 | $ ssh bandit18@bandit.labs.overthewire.org -p 2220 ls |
1 | cGWpMaKXVwDUNgPAVJbWYuGHVn9zl3j8 |
1 | ssh -p 2220 bandit19@bandit.labs.overthewire.org |
20级
要访问下一级别,您应该使用 setuid 二进制文件 在主目录中。在没有参数的情况下执行它,以了解如何 使用它。此级别的密码可以在通常的 放置 (/etc/bandit_pass),在您使用 setuid 二进制文件之后。
首先,我们检查 setuid
二进制文件的所有者是谁:
1 | ls -la |
1 | ./bandit20-do cat /etc/bandit_pass/bandit20 |
在本例中,所有者是 badit20,组是 bandit19,其中 ‘-rwsr-x—‘ 表示用户 bandit19 可以执行二进制文件,但二进制文件以用户 bandit20 身份执行。
执行二进制文件表示它只是以另一个用户的身份执行另一个命令(如前所述,这个用户是 bandit20)。这意味着我们可以访问 bandit20 用户密码文件,该文件只能由用户 bandit20 读取。
1 | 0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO |
1 | ssh -p 2220 bandit20@bandit.labs.overthewire.org |
21级
主目录中有一个 setuid 二进制文件,它执行以下操作:它在指定为命令行参数的端口上与 localhost 建立连接。然后,它从连接中读取一行文本,并将其与上一级 (bandit20) 中的密码进行比较。如果密码正确,它将传输下一关(bandit21)的密码。
- 使用“netcat”,我们可以在服务器模式下创建一个连接 - 该连接侦听入站连接。为了让 netcat 发送密码,我使用 echo 并将其通过管道传输到 netcat。
- 使用端口 1234 运行 setuid 二进制文件意味着它将连接到我们的 netcat 服务器,接收输入的密码并发回下一个密码。
1 | EeoULMCra2q0dSkYj561DX7s1CpBuOBt |
1 | ssh -p 2220 bandit21@bandit.labs.overthewire.org |
22级
程序从基于时间的作业调度程序 cron 定期自动运行。在 /etc/cron.d/ 中查找配置,并查看正在执行的命令。
首先,我们看一下“/etc/cron.d”文件夹中的内容。具体来说,对于这个级别,我查看了 cronjob ‘cronjob_bandit22’。
此 cronjob 以 bandit22 用户身份运行文件。五颗星表示它每分钟都在运行,每天都在运行。要知道到底执行了什么,我们需要看一下 bash 文件。/usr/bin/cronjob_bandit22.sh
此文件在“tmp”文件夹中创建一个文件,并向所有人授予读取权限(由最后 4 个表示)。然后,它将 bandit22 密码文件的输入复制到新创建的文件中。
因此,下一级的密码在此创建的文件中:
1 | tRae0UfB9v0UzbCdn9cY0gQnds9GF58Q |
1 | ssh -p 2220 bandit22@bandit.labs.overthewire.org |