OverTheWire闯关笔记

前往连接

OverTheWire: Wargames

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

image-20240719101127607

1
ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If
1
ssh -p 2220 bandit1@bandit.labs.overthewire.org

2级

下一级的密码存储在名为 - 的文件中,该文件位于主目录中

利用工具

ssh

难点:特殊字符的文件夹

请使用 cat ./- 打开

image-20240719102316720

1
263JGJPfgU6LtdEvgfWU1XP5yac29mFx
1
ssh -p 2220 bandit2@bandit.labs.overthewire.org

3级

下一级的密码存储在名为空格的文件中 在此文件名中位于主目录中

利用工具

ssh

难点:特殊字符的文件夹

请使用 cat "" 打开

image-20240719102939147

1
MNk8KNH3Usiio41PRUEoDFPqfxLPlSmx
1
ssh -p 2220 bandit3@bandit.labs.overthewire.org

4级

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

利用工具

ssh

image-20240719103214020

1
2WmrDFRmJIq3IPxneAaMGhap0pFhF3NJ
1
ssh -p 2220 bandit4@bandit.labs.overthewire.org

5级

下一级的密码存储在唯一人类可读的密码中 文件。提示:如果您的终端混乱 向上,尝试 “重置” 命令。

利用工具

ssh

image-20240719103543769

1
4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQw
1
ssh -p 2220 bandit5@bandit.labs.overthewire.org

6级

下一级的密码存储在以下某处的文件中 inhere 目录,并具有以下所有属性:

  • 人类可读
  • 大小为 1033 字节
  • 不可执行

利用工具

ssh

难点:在大量内容内查询文件

image-20240719104236295

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 以保持输出干净。

image-20240720095814627

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

image-20240720102924792

1
dfwvzFQi4mU0wfNbFOe9RoWskMLg7eEc
1
ssh -p 2220 bandit8@bandit.labs.overthewire.org

9级

下一级的密码存储在文件data.txt中,并且是唯一只出现一次的文本行

利用工具

ssh

1
sort data.txt | uniq -u

image-20240720103229201

1
4CKMh1JI91bUIZZPXDqGanal4xvAg0JM
1
ssh -p 2220 bandit9@bandit.labs.overthewire.org

10级

下一级的密码存储在文件中,data.txt在为数不多的人类可读字符串之一中,前面有几个“=” 字符。

利用工具

ssh

  • 使用 strings 命令提取人类可读字符串
  • 使用 grep 命令过滤包含“=”字符的字符串
1
strings data.txt | grep "="

image-20240720103918422

1
FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey
1
ssh -p 2220 bandit10@bandit.labs.overthewire.org

11级

下一级的密码存储在文件data.txt中, 其中包含 base64 编码数据

利用工具

ssh

1
cat data.txt | base64 --decode

image-20240720104237658

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'

image-20240720104647769

1
7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4
1
ssh -p 2220 bandit12@bandit.labs.overthewire.org

13级

下一级的密码存储在文件data.txt中, 这是重复压缩的文件的十六进制转储。 对于此级别,在 /tmp 下创建一个目录可能很有用 你可以工作。使用难以猜测的目录名称的 mkdir。 或者更好的是,使用命令“mktemp -d”。 然后使用 cp 复制数据文件,并使用 mv 重命名它

利用工具

ssh

使用 mktemp 创建一个难以猜测的临时目录

1
2
tmp_dir=$(mktemp -d) 
echo "Temporary directory created: $tmp_dir"

data.txt 文件复制到临时目录,并重命名。

1
2
cp data.txt "$tmp_dir/data.txt"
cd "$tmp_dir"

将16进制转为2进制

1
cat data.txt | xxd -r > data

file 来查看文件属性,再用gzip -dbzip2 -dtar -xf解压

image-20240720112438428

1
FO5dwFsc0cbaIiH0h8J2eUks2vdTDwAn
1
ssh -p 2220 bandit13@bandit.labs.overthewire.org

14级

下一级的密码存储在 /etc/bandit_pass/bandit14 中,只能由用户读取 bandit14 。对于此级别,您不会获得下一个密码,但您 获取可用于登录下一关的私有 SSH 密钥。

难点:要先更改权限700

1
chmod 700 sshkey.private

image-20240720112941997

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
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAxkkOE83W2cOT7IWhFc9aPaaQmQDdgzuXCv+ppZHa++buSkN+
gg0tcr7Fw8NLGa5+Uzec2rEg0WmeevB13AIoYp0MZyETq46t+jk9puNwZwIt9XgB
ZufGtZEwWbFWw/vVLNwOXBe4UWStGRWzgPpEeSv5Tb1VjLZIBdGphTIK22Amz6Zb
ThMsiMnyJafEwJ/T8PQO3myS91vUHEuoOMAzoUID4kN0MEZ3+XahyK0HJVq68KsV
ObefXG1vvA3GAJ29kxJaqvRfgYnqZryWN7w3CHjNU4c/2Jkp+n8L0SnxaNA+WYA7
jiPyTF0is8uzMlYQ4l1Lzh/8/MpvhCQF8r22dwIDAQABAoIBAQC6dWBjhyEOzjeA
J3j/RWmap9M5zfJ/wb2bfidNpwbB8rsJ4sZIDZQ7XuIh4LfygoAQSS+bBw3RXvzE
pvJt3SmU8hIDuLsCjL1VnBY5pY7Bju8g8aR/3FyjyNAqx/TLfzlLYfOu7i9Jet67
xAh0tONG/u8FB5I3LAI2Vp6OviwvdWeC4nOxCthldpuPKNLA8rmMMVRTKQ+7T2VS
nXmwYckKUcUgzoVSpiNZaS0zUDypdpy2+tRH3MQa5kqN1YKjvF8RC47woOYCktsD
o3FFpGNFec9Taa3Msy+DfQQhHKZFKIL3bJDONtmrVvtYK40/yeU4aZ/HA2DQzwhe
ol1AfiEhAoGBAOnVjosBkm7sblK+n4IEwPxs8sOmhPnTDUy5WGrpSCrXOmsVIBUf
laL3ZGLx3xCIwtCnEucB9DvN2HZkupc/h6hTKUYLqXuyLD8njTrbRhLgbC9QrKrS
M1F2fSTxVqPtZDlDMwjNR04xHA/fKh8bXXyTMqOHNJTHHNhbh3McdURjAoGBANkU
1hqfnw7+aXncJ9bjysr1ZWbqOE5Nd8AFgfwaKuGTTVX2NsUQnCMWdOp+wFak40JH
PKWkJNdBG+ex0H9JNQsTK3X5PBMAS8AfX0GrKeuwKWA6erytVTqjOfLYcdp5+z9s
8DtVCxDuVsM+i4X8UqIGOlvGbtKEVokHPFXP1q/dAoGAcHg5YX7WEehCgCYTzpO+
xysX8ScM2qS6xuZ3MqUWAxUWkh7NGZvhe0sGy9iOdANzwKw7mUUFViaCMR/t54W1
GC83sOs3D7n5Mj8x3NdO8xFit7dT9a245TvaoYQ7KgmqpSg/ScKCw4c3eiLava+J
3btnJeSIU+8ZXq9XjPRpKwUCgYA7z6LiOQKxNeXH3qHXcnHok855maUj5fJNpPbY
iDkyZ8ySF8GlcFsky8Yw6fWCqfG3zDrohJ5l9JmEsBh7SadkwsZhvecQcS9t4vby
9/8X4jS0P8ibfcKS4nBP+dT81kkkg5Z5MohXBORA7VWx+ACohcDEkprsQ+w32xeD
qT1EvQKBgQDKm8ws2ByvSUVs9GjTilCajFqLJ0eVYzRPaY6f++Gv/UVfAPV4c+S0
kAWpXbv5tbkkzbS0eaLPTKgLzavXtQoTtKwrjpolHKIHUz6Wu+n4abfAIRFubOdN
/+aLoRQ0yBDRbdXMsZN/jvY44eM+xRLdRVyMmdPtP8belRi2E2aEzA==
-----END 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.

image-20240720161548980

image-20240720161600680

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

image-20240720161951361

image-20240720162031292

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

image-20240720164036288

1
echo "kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx" | openssl s_client -connect localhost:31790 -ign_eof
1
kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx
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
-----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-----
1
ssh -i sshkey.private bandit17@bandit.labs.overthewire.org -p 2220

18级

主目录中有 2 个文件:passwords.oldpasswords.new。下一级的密码位于 passwords.new 中,并且是 passwords.oldpasswords.new 之间唯一已更改的行

注意:如果您已经解决了此级别并在尝试时看到“再见! 要登录 Bandit18,这与下一个级别 Bandit19 有关

1
EReVavePLFHtFlFsjn3hyzMlvSuSAcRD
1
ssh -p 2220 bandit17@bandit.labs.overthewire.org
1
diff passwords.old passwords.new

image-20240720172236033

1
bSrACvJvvBSxEM2SGsV5sn09vc3xgqyp
1
x2gLTTjFwMOhQ8oWNbMN362QKxfRqGlO
1
ssh -p 2220 bandit18@bandit.labs.overthewire.org

image-20240720172447599

19级

下一级的密码存储在文件自述文件中 主目录。不幸的是,有人修改了 .bashrc 以在您使用 SSH 登录时将您注销。

我们不是使用 SSH 登录计算机,而是通过 SSH 执行命令。首先,我们用来确保自述文件在文件夹中,然后我们可以用来读取它。

1
2
3
4
5
6
7
8
9
10
11
$ ssh bandit18@bandit.labs.overthewire.org -p 2220 ls         
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

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

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

bandit18@bandit.labs.overthewire.org's password:
cGWpMaKXVwDUNgPAVJbWYuGHVn9zl3j8
1
cGWpMaKXVwDUNgPAVJbWYuGHVn9zl3j8
1
ssh -p 2220 bandit19@bandit.labs.overthewire.org

20级

要访问下一级别,您应该使用 setuid 二进制文件 在主目录中。在没有参数的情况下执行它,以了解如何 使用它。此级别的密码可以在通常的 放置 (/etc/bandit_pass),在您使用 setuid 二进制文件之后。

首先,我们检查 setuid 二进制文件的所有者是谁:

1
ls -la

image-20240720180047511

1
./bandit20-do cat /etc/bandit_pass/bandit20

在本例中,所有者是 badit20,组是 bandit19,其中 ‘-rwsr-x—‘ 表示用户 bandit19 可以执行二进制文件,但二进制文件以用户 bandit20 身份执行。

执行二进制文件表示它只是以另一个用户的身份执行另一个命令(如前所述,这个用户是 bandit20)。这意味着我们可以访问 bandit20 用户密码文件,该文件只能由用户 bandit20 读取。

image-20240720175823912

1
0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO
1
ssh -p 2220 bandit20@bandit.labs.overthewire.org

21级

主目录中有一个 setuid 二进制文件,它执行以下操作:它在指定为命令行参数的端口上与 localhost 建立连接。然后,它从连接中读取一行文本,并将其与上一级 (bandit20) 中的密码进行比较。如果密码正确,它将传输下一关(bandit21)的密码。

  • 使用“netcat”,我们可以在服务器模式下创建一个连接 - 该连接侦听入站连接。为了让 netcat 发送密码,我使用 echo 并将其通过管道传输到 netcat。
  • 使用端口 1234 运行 setuid 二进制文件意味着它将连接到我们的 netcat 服务器,接收输入的密码并发回下一个密码。

image-20240722103620493

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 密码文件的输入复制到新创建的文件中。

  • 因此,下一级的密码在此创建的文件中:

image-20240722104417005

1
tRae0UfB9v0UzbCdn9cY0gQnds9GF58Q
1
ssh -p 2220 bandit22@bandit.labs.overthewire.org

23级