OverTheWire-Wargames Ⅰ

OverTheWire-Wargames Ⅰ

Bandit

一个适合初学者的靶场,里面包含了其它靶场所需的基础知识。

大部分都是关于 linux 系统的一些命令学习,对从0到1的新手相当友好,手把手教你进行一些渗透测试中的常见操作,有很多零碎的知识点,有些大佬都不知道的知识盲区。

从 0~33 级,环环相扣,完成上一级的挑战才知道下一级所讲的东西。

Level 0

提示使用 SSH 登录游戏,连接 bandit.labs.overthewire.org 端口 2220

用户名:bandit0

密码:bandit0

SSH 是专为远程登录会话和其他网络服务提供安全性的协议,通过 SSH 可以把所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗。(现学现卖ing)

SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑上是否安装了客户端和服务器。

dpkg -l | grep ssh

通过 SSH 口令方式连接。

$ ssh -p<port> <username>@<server-ip-address>

这里的命令是:

ssh -p2220 bandit0@bandit.labs.overthewire.org

输入密码再回车即可成功连接。(中途询问回复 yes)

Level 0 → Level 1

提示下一级的密码存在主目录中的 readme 中,用户为 bandit1。

还提供了一些需要学习了解的命令:ls、cd、cat、file、du、find

不懂的还是要多学学

ls 显示指定工作目录下之内容
cd 切换当前工作目录到目标目录
cat 连接文件并打印到标准输出设备上,简单来说就是查看文件
file 用于辨识文件类型
du 显示目录或文件的大小
find 在指定目录下查找文件

就这样。(打码防绕过)

logout 命令退出,连接下一个等级。

ssh -p2220 bandit1@bandit.labs.overthewire.org

Level 1 → Level 2

提示下一级的密码在名为 - 的文件中,文件位于主目录中。

这还不简单吗,直接 “cat -” 不就好了。

貌似有点不对劲,但是又说不出,试了一下,果然不行。

涉及知识盲区,学习学习,看了很多资料。- 会被当作参数前的 -,比如 ls -a 中的 -。

资料:tldp.org/LDP/abs/html/s

就这样。(打码防绕过)

下一个。

Level 2 → Level 3

提示密码在主目录中文件名为“spaces in this filename”的文件,刚才的方法不行了。

又看了一下刚才那个资料,发现转义一下就可以了。用 \ 让它忽略下一个字符。

Level 3 → Level 4

提示密码在 inhere 目录下的隐藏文件中。

查看隐藏文件,这里需要使用命令

ls -a
ls 显示目录下的文件名
-a 显示所有文件(包含隐藏文件),以.开头的文件为隐藏文件
-A 显示所有文件(不包含.和..)

so,迎刃而解。

Level 4 → Level 5

提示密码在 inhere 目录下只有人类可读的文件中。让我们进去看看:

不想说话,甚至想骂人%#¥#¥%!

如果我们使用刚才的方法进行文件查看,需要查看 1-10 次,因为不确定密码在哪个文件里。

再看看题目,题目中提示“只有人类可读的文件”,那可以先扫一遍所有文件的类型再做判断。

file ./*
file 显示文件类型
./* 指匹配当前目录下所有文件

这里只有一个 ASCII text 类型,那就一定是它了。

Level 5 → Level 6

提示密码在 inhere 目录下的某个文件中,包含以下属性:

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

试试刚才的方法,想进去看看:

好吧,我换条路。(18个文件夹,头铁的可以一个一个打开看)

find 命令:用来在指定目录下查找文件。
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 文件类型是 c 的文件,d: 目录,c: 字型装置文件,b: 区块装置文件,p: 具名贮列,f: 一般文件,l: 符号连结,s: socket。

先试试限制文件大小查询,直接就查到了目标文件。

find . -size 1033c

Level 6 → Level 7

提示密码在服务器某个位置,具有以下属性:

  • 属于用户 bandit7
  • 属于用户组 bandit6
  • 大小为 33 个字节

这里依然使用 find 命令:

find / -user bandit7 -group bandit6 -size 33c
/ 在整个系统中
-user 目标用户
-group 目标用户组
-size 大小限制

然后从众多权限不足中,找到唯一一条可以查看的。

Level 7 → Level 8

提示密码存储在文件 data.txt 中,在单词 millionth 旁。

友情提示:千万不要使用命令:cat data.txt

在文件中查找字符串,使用 grep 命令。

grep 'millionth' data.txt
grep 命令用于查找文件里符合条件的字符串,输出所在的那一行。

Level 8 → Level 9

提示密码存储在文件 data.txt 中,仅出现一次的文本字符串。

意思就是需要去除重复的,使用命令 uniq。

uniq 命令,用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
-c 检查文件并删除文件中重复出现的行,并在行首显示该行重复出现的次数。
-u 仅显示出一次的行列。
sort 命令,用于将文本文件内容加以排序。

需要先进行排序,再查出只出现一次的行。

sort data.txt|uniq -u
| 表示管道,上一条命令的输出,作为下一条命令参数。

Level 9 → Level 10

提示密码在某个字符串中,字符串以几个“=”开头。

使用 cat 会出现一堆乱码,所以就别试了。我们需要把我们可读的字符串提取出来。

用 strings 命令,再查找带有“=”的行:

strings data.txt|grep '='
strings 命令,在对象文件或二进制文件中查找可打印的字符串。

最长的那串应该就是密码了。

Level 10 → Level 11

提示密码在 data.txt 中,文件包含 base64 的数据。

有两个办法,第一直接复制出来,base64 解密。

第二种,直接解码。

base64 -d data.txt

Level 11 → Level 12

提示密码在 data.txt 中,所有字母都旋转了 13 个位置。也就是说,a 相当于 n。

使用命令 tr,先 cat 获取文本字符串:

cat data.txt|tr 'a-zA-Z' 'n-za-mN-ZA-M'
tr 命令用于转换或删除文件中的字符。

或者也可以一个字母一个字母人工转换。。。

Level 12 → Level 13

提示密码在 data.txt 中,该文件是已重复压缩的文件的十六进制转储。

我们先将其转换成二进制文件:

xxd -r data.txt > data2.txt
xxd 命令,二进制和十六进制之间转换。

但是二进制我们也看不懂,还是乱码。

使用 file 查看它到底是什么文件吧。

file data2.txt

得知是 gzip 压缩文件,这就好办了,重命名然后解压就好了。

mv data2.txt data2.gz
gzip -d data2.gz

得到 data2 文件,再看看这又是什么?

file data2

一个 bzip2 的压缩文件,重复刚才的操作,重命名解压。

mv data2 data2.bz2
bzip -d data2.bz2

然后,又是一个 data2 文件。(要有耐心。。。)最后得到了密码:

Level 13 → Level 14

提示密码存储在 /etc/bandit_pass/bandit14 中,并且只能由 bandit14 用户读取。(主机名为 localhost)

也就是说,我们刚才得到的是 bandit13 的密码,但是 bandit14 才能查看密码。我们需要登录 bandit14 的帐户。先登录 bandit13,我们得到一个私钥。

直接使用它进行登录。

ssh -i sshkey.private bandit14@localhost
ssh -i 指定私钥 -p 指定端口

成功登录 bandit14,然后查看刚才提示文件,得到密码。

Level 14 → Level 15

提示提交当前密码到 localhost 的 30000 端口获取下一个密码。

使用 telnet 命令:

telnet 命令,用于远端登入。

Level 15 → Level 16

提示使用SSL加密将当前级别的密码提交到 localhost 上的端口 30001来检索下一级别的密码。

根据提示,然后查阅了相关资料,我们这里使用 openssl 进行连接。

资料:feistyduck.com/library/
openssl 可以实现:秘钥证书管理、对称加密和非对称加密 。
openssl s_client -connect localhost:30001

Level 16 → Level 17

提示将当前级别的密码提交到 localhost 主机上 31000 到 32000 范围内的端口上来检索下一级的密码。首先找出这些端口中的哪些服务器正在侦听它们。然后找出其中哪些使用 SSL,哪些不使用 SSL。只有一台服务器将提供密码,其他服务器将简单地将发送字符串。

先扫描端口信息吧,这里提供了 nmap 工具。

nmap localhost -p 31000-32000

这里就扫出来两个,有一个是开着的,尝试用 openssl 连接。

openssl s_client -connect localhost:31790

得到超级长一串字符串,类似于 ssh 私钥。(好吧,末尾都写清楚了,private KEY)

将它保存为一个 .priv 的文件,然后用之前的方式登录即可。

ssh -i /tmp/bandit16/ssh.priv bandit17@localhost

成功登陆,密码在 /etc/bandit_pass/bandit17 中。

好了,Bandit 靶场的 34 级挑战(上)暂完。更多有关内容请前往二向箔安全进行学习,最近推出了“挖洞”班,想了解更多资讯的,可咨询客服微信 twosecurity02

编辑于 2020-01-01

文章被以下专栏收录