
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  |