linux练习平台WarGame之bandit通关日志

前言~

Bandit是一个学习linux命令的闯关游戏平台,比较类似于ctf,通过闯关的模式,不断的学习新的命令,对于程序员亦或者安全爱好者来说都是一个不错的学习平台

传送门

目录导航

Level 0 → Level 1 Level 1 → Level 2
Level 2 → Level 3 Level 3 → Level 4
Level 4 → Level 5 Level 5→ Level 6
Level 6 → Level 7 Level 7→ Level 8
Level 8 → Level 9 Level 9 → Level 10
Level 10 → Level 11 Level 11 → Level 12
Level 12 → Level 13 Level 13 → Level 14
Level 14 → Level 15 Level 15 → Level 16
Level 16 → Level 17 Level 17 → Level 18
Level 18 → Level 19 Level 19 → Level 20

根据给出的提示信息,使用xshell登录或者linux直接远程连接ssh登录

SSH信息
主机:bandit.labs.overthewire.org
端口:2220
linux练习平台WarGame之bandit通关日志_第1张图片




开始闯关

Level 0 → Level 1

这里采用的是linux命令行远程ssh,命令行输入: ssh -p 2220 [email protected] 回车后,输入password:bandit0 远程连接测试平台

    ssh命令格式:
    ssh + -p ssh开放端口 + 客户端用户名@服务器ip地址或者域名

连接成功后,直接ls查看当前命令下的文件,然后cat读取下一关密码即可

关于 ls命令的其它参数用法可以参考我的另一篇博客:

传送门

linux练习平台WarGame之bandit通关日志_第2张图片


Level 1 → Level 2

利用上一关得到的密码ssh登陆

这次登陆的用户为bandit1,命令行输入:ssh -p 2220 [email protected]接着利用上一关得到的密码ssh登陆

ls发现文件名是一个-,但是这个在linux中有特殊意义导致直接cat不好用
使用./来注明是当前路径下的,就可以读取到了

通关命令:cat ./-
密码:CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9

linux练习平台WarGame之bandit通关日志_第3张图片


Level 2 → Level 3

ls查看,发现文件名中有空格,可以用双引号把文件名包裹起来,绕过空格

通关命令:cat "spaces in this filename" 
密码:cat "spaces in this filename"

linux练习平台WarGame之bandit通关日志_第4张图片


Level 3 → Level 4

查看提示
linux练习平台WarGame之bandit通关日志_第5张图片

有时候linux命令行登陆ssh会出bug,导致一直链接不上练习平台,这时候新建一个终端重新登陆即可
linux练习平台WarGame之bandit通关日志_第6张图片
查看了说明,通关密码存放于hidden目录下,直接cd到该目录下,然后ls -a查看隐藏文件,cat读取即可

通关命令:cat .hidden
密码:pIwrPrtPN36QITSp3EQaw936yaFoFgAB

linux练习平台WarGame之bandit通关日志_第7张图片
Level 4 → Level 5

老规矩,先看说明
linux练习平台WarGame之bandit通关日志_第8张图片
捕抓到关键字,人类可读,咋感觉有种ctf套路的样子

ls -al 查看所有文件,接着根据关键字,使用命令:file ./* 查看当前目录下的所有文件类型,接着发现txt类型的文件,在回想人类可读,不难想出密码就存放于此

通关密码:koReBOKuIDDepwhWk7jZC0RTdopnAYKh

linux练习平台WarGame之bandit通关日志_第9张图片

Level 5 → Level 6

跟上一关套路差不多只是多了点条件
linux练习平台WarGame之bandit通关日志_第10张图片
根据给出的条件,切换到inhere目录下,使用ls -r 时发现有足足有20个目录,一个一个的找是不存在的,既然题目给出了文件的大小,直接使用find命令查找即可
通关命令:find . -type f -size 1033c

这里我解释一下该命令的具体参数及作用
-type f 指定要搜索的文件为普通文件(人类可读嘛~),-size 1033c指定搜索的文件大小为1033字节,更多的其它参数用法可以参考我另一篇博客文章:

传送门

linux练习平台WarGame之bandit通关日志_第11张图片

通过秘钥:DXjZPULLxYr17uwoI01bNLQbtFemEgo7

19.09.22


Level 6 → Level 7

距离上一次更新过去了一个多月了,因为工作原因,所以一直没更新到,回来,话不多说,下面开始更新

老规矩,先看题目
linux练习平台WarGame之bandit通关日志_第12张图片

使用第5关得到的秘钥远程连接测试平台

linux练习平台WarGame之bandit通关日志_第13张图片

链接上去之后,我们根据提示找文件

通关命令:find / -user bandit7 -group bandit6 -size 33c 2>/dev/null

这里-user指定user组,-group指定group组,-size指定大小,后面的2>/dev/null因为find命令在根目录下查找会经常有很多权限的报错信息,所有在linux中通常用这种方式将错误信息重定向到“黑洞中”,也就是如果你的命令出错的话,错误报告直接就删除了,不会显示在屏幕上

不理解2>/dev/null的含义可以参考以下文章

传送门

linux练习平台WarGame之bandit通关日志_第14张图片

第六关通关秘钥:HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs

Level 7 → Level 8

老规矩,先看题目要求

题目说通关秘钥紧靠单词millionth,那么我们使用管道符在data.txt中搜索这个单词即可
关于管道符的使用可以参考以下文章

传送门

linux练习平台WarGame之bandit通关日志_第15张图片

通关命令:cat data.txt |grep millionth

linux练习平台WarGame之bandit通关日志_第16张图片

通关秘钥:cvX2JJa4CFALtqS87jk27qwqGhBM9plV


Level 8 → Level 9

这关需要用到sort和uniq命令,不懂该命令的可以先参考以下文章

传送门

题目要求:
linux练习平台WarGame之bandit通关日志_第17张图片

这题还是在data.txt文件里面找内容,并且捕抓到关键字唯一一行,第一时间想到了uniq命令了,但是使用之前需要用sort命令对文本进行排序,因为uniq命令是通过判断上下两行是否一样来判断的,所以用sort排序一下然后在uniq就能找到唯一出现的那一行了,uniq -u 选项的意思是仅显示出一次的行列

通过命令:sort -n data.txt |uniq -u

在这里插入图片描述

通过秘钥:UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR


Level 9 → Level 10

这题又出现了人类可读,并且多了个特殊符号" = ",我感觉到了一股浓浓的ctf味道
linux练习平台WarGame之bandit通关日志_第18张图片

直接使用cat命令后出现了一堆乱码,我就知道没那么简单
linux练习平台WarGame之bandit通关日志_第19张图片
本来想直接使用vim 打开然后搜索关键字" = ",但是打开后直接卡死,根本没法进行搜索,这里推荐使用egrep或strings命令,过滤掉乱码,获取可打印的字符。这里解释一下strings命令,它主要用来提取和显示非文本文件中的文本字符串,比如在对象文件或二进制文件中查找可打印的字符串

通关命令:cat data.txt |strings

输入命令后根据提示寻找以几个“ =”字符 相关的字符串
linux练习平台WarGame之bandit通关日志_第20张图片

通关秘钥:truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk

2019.10.25


Level 10 → Level 11

linux练习平台WarGame之bandit通关日志_第21张图片

这题比较简单,直接用base64 -d 命令或者在线工具解码解码即可

关于base64的命令参数详情可以终端下输入:base64 --helplinux练习平台WarGame之bandit通关日志_第22张图片

通关命令:base64 -d ./data.txt

linux练习平台WarGame之bandit通关日志_第23张图片

通关秘钥:IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR

Level 11 → Level 12

先看题目要求
linux练习平台WarGame之bandit通关日志_第24张图片
cat 查看文件内容时发现一串包含着数字和字母的字符串,这时候根据题目所说的,只对该字符串中的字母(无论大小写)的顺序旋转了13个位置,没有对数字产生影响,这也就是说只对位于字符串中的前13个位置和后13个位置的英文字母调换了,这时候我们直接用tr命令进行调换即可

通过命令:cat data.txt | tr 'a-zA-Z' 'n-za-mN-ZA-M'

这里简要说明这条命令的含义,管道符后面的 tr命令 ,其第一个参数表示指定要转换的字符集,也就是对位于data.txt这个文件中的无论是大写的英文字母还是小写的英文字母进行转换操作,参数二就是指定要转换成的目标字符集,也就是把前13个英文字符(这里的排序是按字母表的ABCD-Z去排列的)无论大小写进行前后调换,例如:n-z
linux练习平台WarGame之bandit通关日志_第25张图片

通过秘钥:5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu

Level 12 → Level 13

先看题目要求,这题有点恶心,需要一直重命名并解压 往复8次
linux练习平台WarGame之bandit通关日志_第26张图片
根据提示,我们先在tmp创建一个目录然后把根目录下的文件复制过去,为什么要选择这个目录呢?因为在Linux下一般tmp目录的权限是可写可执行!

bandit12@bandit:~$ mkdir /tmp/hui
bandit12@bandit:~$ cp data.txt /tmp/hui
bandit12@bandit:~$ cd /tmp/hui
bandit12@bandit:/tmp/hui$ ls
data.txt

接着直接cat打开文件时发现是一堆乱七八糟的东西,然后我们用file命令得知该文件时一个16进制文件,接下来我们要对该文件进行进制转换,我们可用xxd命令进行格式转换

xxd -r data.txt > data.bin

该命令的参数说明为:逆向操作,把xxd的十六进制输出内容转换回原文件的二进制内容,不懂命令参数作用的可以xxd --help查看

转换完成之后,我们使用file查看它的文件属性
在这里插入图片描述
发现是一个gzip文件,直接mv改一下后缀名然后进行解压

linux练习平台WarGame之bandit通关日志_第27张图片

解压后发现又是压缩文件,继续重命名并解压,以此类推,接下来都是进行反复的操作,到了第8次接压缩即可拿到秘钥
linux练习平台WarGame之bandit通关日志_第28张图片
linux练习平台WarGame之bandit通关日志_第29张图片

注:每一次解压完后用file看一下文件属性,如果为gzip,则用mv命令改一下后缀,接着解压即可 如此循环8次即可得出下一关秘钥

通过秘钥:8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL

Level 13 → Level 14

在这里插入图片描述

根据题目要求我们可知此题需要用到bandit 14用户来读取下一关秘钥,但是我们此时是处于bandit13用户,这里猜测一下,估计这两个用户但是处于同一主机上,我们可以用以下ssh命令来达到无秘钥进行ssh登录本地其它用户的效果

ssh -i sshkey.private bandit14@localhost

ssh -i 参数为指定私钥进行登陆

linux练习平台WarGame之bandit通关日志_第30张图片

登录后直接根据题目给出的提示用cat读取下一关秘钥即可

在这里插入图片描述

通关秘钥:4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e

Level 14 → Level 15

linux练习平台WarGame之bandit通关日志_第31张图片

看题目要求,第一时间想到了Telnet登录,所谓的密码提交,就是在Telnet登录的时候把秘钥复制进去就行了,都是套路

通关命令:telnet localhost 30000

linux练习平台WarGame之bandit通关日志_第32张图片

通关秘钥:BfMYroe26WYalil77FoDi9qh59eK5xNr

Level 15 → Level 16

这题需要用到OpenSSL命令,关于该命令,我们可以根据官方给出的文档进行参考

https://www.feistyduck.com/library/openssl-cookbook/online/ch-testing-with-openssl.html
linux练习平台WarGame之bandit通关日志_第33张图片
文档中提到了我们怎么用该命令去链接到服务器,我们根据给出的命令进行修改主机和端口号,然后登录后把上一关得到的秘钥复制提交即可
在这里插入图片描述

通关命令:openssl s_client -connect localhost:30001

linux练习平台WarGame之bandit通关日志_第34张图片

通过秘钥 :cluFn7wTiGryunymYOu4RcffSxQluehd

Level 16 → Level 17

linux练习平台WarGame之bandit通关日志_第35张图片
捕抓关键字,既然题目说到了要扫描本地主机的端口,而且还提示了nmap,既然是要对本地主机(localhost)进行端口扫描,那么首先nmap需要在我们进行探测的主机上,不然没法本地扫描,所以果断用ps aux判断nmap是否存在

linux练习平台WarGame之bandit通关日志_第36张图片

既然nmap存在,接下来就好办了,直接扫描题目给出的端口即可然后判断是否使用了ssl协议即可

nmap localhost -p 31000-32000
linux练习平台WarGame之bandit通关日志_第37张图片
扫描后发现有两个端口 且只有一个为开启状态,果断拿OpenSSL链接测试了一下

openssl s_client -connect localhost:31790

linux练习平台WarGame之bandit通关日志_第38张图片
接下来的思路就是创建一个ssh秘钥文件,然后用ssh -i 来指定秘钥登录
首先我们需要cd 到 /tmp/bandit16 经测试,无法在tmp下创建任何目录,我们只能切换到 /tmp/bandit16 目录来进行写入秘钥操作,到该目录,touch出来一个文件,打算用vim把秘钥写进去,当wq保存时发现秘钥无法写入,接着ls 确认后,发现我们根本没有写入权限,但是ls也发现了个有意思的东西,看到了.key后缀的文件,果断用cat瞄了一下,果不出其然,秘钥就在这个文件里面,秘钥出来就好办了,本来还想用其它的方法写进去,看来不需要了,得到秘钥后,直接ssh -i 登录查看下一关通过命令即可

linux练习平台WarGame之bandit通关日志_第39张图片
需要修改私钥文件的权限,否则会有permisions问题,修改权限chmod 700 16.priv,然后SSH连接即可
linux练习平台WarGame之bandit通关日志_第40张图片

通关命令:ssh -i /tmp/bandit16/16.priv bandit17@localhost

在这里插入图片描述

通过秘钥:xLYVMN9WE5zQ5vHacb0sZEVqbrp7nBTn

Level 17 → Level 18

linux练习平台WarGame之bandit通关日志_第41张图片
查看题目,不难看出,这题需要用到diff来比较文件的一致性,此题有两个文件,passwords.new和passwords.old,也就是新文件和旧文件,cat查看两个文件时,发现文件内容极尽相似,这时候我们要一个一个的对比文件的差异性那是不现实的,为此,我们需要用到diff来快速比较此两个文件的差异性

这里简要解释一下diff:
diff以逐行的方式,比较文本文件的异同处 如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录

根据题目给出的提示,真正的秘钥存在于passwords.new中,按照比较的顺序,passwords.new排列在最前面,不难看出秘钥为第一条
linux练习平台WarGame之bandit通关日志_第42张图片

通关命令:diff passwords.new passwords.old
通关秘钥:kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd

Level 18 → Level 19

老规矩,先看题目要求
在这里插入图片描述

一旦连接之后会自动断开,无法正常进行文件读取操作,但我们可以在ssh登陆的时候可以直接后面跟上命令,虽然被断开了,但是只要我们的登录口令正确,命令还是可以被执行的,题目提示下一关秘钥存放于readme,我们在ssh链接后面加上cat readme,秘钥即可被读取,同理我们也可接其它命令进行任意操作,前提是权限足够大!
linux练习平台WarGame之bandit通关日志_第43张图片

在这里插入图片描述

通关命令:ssh -p 2220 [email protected] cat readme
通关秘钥:IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x

Level 19 → Level 20

在这里插入图片描述
发现文件被设置为了setuid权限,第一时间想到了chmod u-s 取消该权限然后进行正常读取,当将想法付诸实践时 果然,没权限,回来在仔细观摩题目,发现到了关键字:要访问下一个级别,您应该在主目录中使用setuid二进制文件 只要在主目录进行cat读取即能读出下一关秘钥
linux练习平台WarGame之bandit通关日志_第44张图片

这里简要介绍一下euid和setuid:
euid:有效用户ID 用于系统决定用户对系统资源的权限

setuid:只有可以执行的二进制程序才能设定SetUID权限,并且命令执行者要对该程序拥有x(执行)权限。对于设定了 SetUID 权限的命令来说,其功能是命令执行者在执行该程序文件时获得该程序文件所有者的身份。SetUID 权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。

设置setuid的方法是使用Linux的chmod指令,我们都习惯给予一个文件类似“0750” “0644” 之类的权限,它们的最高位0就是setuid的位置, 我们可以通过将其设为4来设置setuid位。(tips:设置为2为setgid,同setuid类似,即赋予文件所在组的权限)

设置:
chmod 4750 文件名
or
chmod u+s 文件名

取消:
chmod 750或者0777 文件名
or
chmod u-s 文件名

在这里插入图片描述

在这里插入图片描述

通关命令:./bandit20-do cat /etc/bandit_pass/bandit20
通关秘钥:GbKksEFF4yrVs6il55v6gwY5aVje5f0j

你可能感兴趣的:(通关日志,linux)