介绍
OverTheWire Bandit 是一个针对初学者设计的网络安全挑战平台,旨在帮助用户掌握基本的命令行操作和网络安全技能。Bandit 游戏包含一系列的关卡,每个关卡都需要解决特定的任务来获取进入下一关的凭证。通过逐步挑战更复杂的问题,用户可以逐步提升其 Linux 系统操作和安全技能。
一、平台概述
OverTheWire 是一个提供各种网络安全游戏的平台,Bandit 是其最受欢迎的系列之一。Bandit 主要关注 Linux 系统基础知识,通过一系列逐步递进的任务,引导用户学习基本的命令行操作、文件管理、权限控制、脚本编写等技能。
二、如何参与 Bandit 挑战
- 注册和登录:无需注册,直接通过 SSH 连接到指定的服务器即可开始挑战。
- 连接服务器:每一关的连接方式和凭证会在上一关完成时提供,通常通过 SSH 连接。
- 解决任务:每一关都有特定的任务,用户需要通过执行正确的命令来解决问题并获取下一关的凭证。
- 获取下一关凭证:成功完成任务后,会得到进入下一关的密码,通过该密码登录下一关的服务器。
三、总结
OverTheWire Bandit 是一个极佳的学习和实践 Linux 基础知识的平台,逐步引导用户从简单的命令行操作到更复杂的文件和权限管理。通过完成 Bandit 的挑战,用户不仅能够提升自己的技术水平,还能够培养解决问题的思维能力。
主要技能包括:
- 基本的命令行操作(如
ls
,cat
,file
,find
等) - 文件和目录管理
- 权限控制和操作
- 处理特殊文件名和字符
- 脚本编写和自动化任务
Bandit 为学习网络安全的初学者提供了一个良好的起点,通过一步步的挑战,用户可以打下坚实的基础,为更高级的安全研究和实践做好准备。
一、Bandit Level 25
先用上一关的密码登录
命令和之前一样
#!/bin/bashmyname=$(whoami)cd /var/spool/$myname/foo
echo "Executing and deleting all scripts in /var/spool/$myname/foo:"
for i in * .*;
doif [ "$i" != "." -a "$i" != ".." ];thenecho "Handling $i"owner="$(stat --format "%U" ./$i)"if [ "${owner}" = "bandit23" ]; thentimeout -s 9 60 ./$ifirm -f ./$ifi
done
从中我们了解到,文件夹“bandit24”中保存的任何文件都会被执行,如果文件是由“bandit23”创建的,则执行 60 秒后文件将被删除。如果我们想要“bandit24”的密码,我们需要编写一个将从 bandit24 文件夹执行的脚本。我们编写的脚本应该获取密码并保存在我们可以访问的位置(/tmp
目录)
拿到密码
gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8
二、Bandit Level 26
使用上一关密码登录成功
这一关需要自己编写爆破脚本(通过 for 循环一次一次尝试)
#!/bin/bashfor i in {0000..9999}
doecho gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8 $i >> possibilities.txt
donecat possibilities.txt | nc localhost 30002 > result.txt
思路是先将组合的密码存放入一个字典,再用字典爆破并保存结果
拿到密码
iCi86ttT4KSNe1armKiwbQNmB3YJP3q4
三、Bandit Level 27
使用上一关密码登录成功
家目录下有个 key 文件,直接连接是不行的
通过查看配置文件可以看到 bandit26 的 shell
bandit25@bandit:~$ cat /etc/passwdbandit26:x:11026:11026:bandit level 26:/home/bandit26:/usr/bin/showtext
查看其内容
#!/bin/shexport TERM=linuxexec more ~/text.txt
exit 0
-
exec more ~/text.txt
exec
命令用于执行指定的命令,但不同之处在于它不会创建新的进程,而是用新命令替换当前 shell 进程。这意味着,如果more
命令成功执行,脚本将不会返回到其后续命令(如果有的话),因为exec
之后的命令(在这个例子中是exit 0
)将不会被执行。more
是一个常用的 Unix/Linux 命令,用于分页显示文件内容。当用户按空格键时,它会显示下一页的内容。按q
键可以退出more
。~/text.txt
是文件路径,~
表示当前用户的家目录。所以,这行代码的作用是分页显示当前用户家目录下的text.txt
文件的内容。
-
exit 0
- 这是一个 shell 命令,用于退出当前 shell 或脚本。退出状态码
0
通常表示成功执行。但由于前面的exec
命令,这行代码实际上永远不会被执行,除非more
命令由于某种原因失败(但这种情况很少见)。
- 这是一个 shell 命令,用于退出当前 shell 或脚本。退出状态码
因为 more 在终端上显示的内容量超过终端的大小,则更多工具将进入交互模式,直到我们没有查看文件中的所有内容或我们没有手动退出程序,命令才会退出
为了不让程序进行到 exit 0,我们应该停留在 more 阶段
ssh bandit26@bandit.labs.overthewire.org -p 2220 -i bandit26.sshkey
按“v”键将在由 VISUAL 和 EDITOR 环境变量定义的编辑器中打开当前行。如果这两个变量均未设置,则将使用 Vim。让我们看看按“v”会得到哪个编辑器
应该是使用 Vim 编辑器,这样我们可以修改 shell
:set shell=/bin/bash
查看密码
拿到密码
s0773xxkk0MXfdqOfPRVr9L3jJBUOgCZ
四、Bandit Level 28
接上一关
我们会看到该文件归 bandit27 所有,并且该文件的 SUID 位也已设置。这意味着如果我们使用二进制文件运行任何其他命令,该命令将具有与二进制文件所有者相同的权限(在这种情况下,命令将具有 bandit27 权限)
拿到密码
upsNCc7vzaRDx6oZC6GiR6ERwe1MowGB
五、Bandit Level 29
使用上一关的密码登录成功
在克隆前先创建文件夹
使用 git clone 克隆(注意:要加上端口,详情见图)
进入文件夹查看文件内容
拿到密码
Yz9IpL0sBcCeuG7m9uQFt8ZNpS4HZRcN
六、Bandit Level 30
克隆的仓库但是看不到密码
查看历史提交记录
回复到之前的提交历史
成功拿到密码
4pT1t5DENaYuqnqvadYs1oE4QLCdjmJ7
七、Bandit Level 31
使用上一关的方式无法得到密码
可以先查看分支,然后切换分支
查看提交历史
恢复到某个历史记录
成功拿到密码
qp30ex3VLz5MDG1n91YowTv4Q8l7CDZL
八、Bandit Level 32
和之前一样,这次分支并没有线索,但 git 还有个特性就是标签
成功拿到密码
fb5S2xb7bRyFmAvQYQGEqsbhVyJqhnDy
九、Bandit Level 33
这次您的任务是将一个文件推送到远程存储库
并没有拿到密码,查看隐藏文件发现有 .gitignore
我们在文件中看到一行,*.txt
这意味着如果在存储库文件夹中创建了任何扩展名为“.txt”的文件,则不应将其视为存储库的一部分。因此,如果我们尝试添加我们创建的新文件,它将不会被推送到远程存储库。因此,让我们删除此文件,然后推送该文件。
成功拿到密码
3O9RfhqyAlVBEZpVb6LYStshZoqoSx5K
十、Bandit Level 34
使用上一关密码成功登录
输入命令测试,结果报错,将其转为了大写
- 当你运行
bash $0
时,bash
是一个命令,它会启动一个新的 Bash shell。 $0
作为参数传递给bash
,表示要运行的脚本名。因此,这个命令会创建一个新的 shell 并执行当前脚本,从而产生一个新的 shell 进程
接下来就是查看密码了
成功拿到密码
tQdtbs5D5i2vJwkO8mEyYEyTL8izoeJ0