閒暇之餘,終於又有時間可以打打 VulnHub 了,工作上剛好有案子結案,在這空檔之下就找點事情做,於是就把 Matrix: 3 解一解,也是該系列的最後一題(目前來說是),想說下班以前可以解完,沒想到大部分的時間都卡在建置 hydra 上,雖然有解決,但對於該題根本沒幫助,總之就是解題寫寫紀錄,有興趣就看看嘍。
目錄
環境設定
靶機下載: https://www.vulnhub.com/entry/matrix-3,326/
解壓縮之後是一個 ova 檔案,同樣直接餵給 VMWare 吃,就可以完成佈署了,且網路環境採用 NAT,感覺這一段字都變成起手式了,都是複製貼上,幾乎不用改寫。
尋找靶機
透過 nmap -p- 192.168.232.1/24
把靶機找出來,抓到靶機 IP 為 192.168.232.129
,並且服務上面有 80、6464、7331 Ports。
- 這邊使用參數 -p- 是掃描並列出 TCP 的所有執行中的 Ports。
服務探勘
80 Port
查看 80 Port 又是一個熟悉的畫面,還一度以為是不是下載錯檔案,並且確認了一下掃到的 Ports,確認與 Matrix: 2 不相同,才放心繼續解題下去。
那就接著跟著 Rabbit
走一回,發現 Rabbit
的圖片名稱為 Matrix_can-show-you-the-door.png
。
找不到其他隱藏提示,於是就把 Matrix 貼到網址列上,於是發現以下路徑。
但幾乎每條路都是死路,直接使用 wget
將每個路徑下的檔案都下載下來。
wget -c -r -np -k -L -p http://192.168.232.129/Matrix/
tree
find . -name "index.html" -depth -exec cat {} \;|less
最後在 /Matrix/n/e/o/6/4/
發現 secret.gz
檔案,使用以下指令將檔案下載下來。
wget http://192.168.232.129/Matrix/n/e/o/6/4/secret.gz
由於副檔名是 gz,嘗試解壓縮,但卻失敗,透過 file
指令確認檔案類型,發現只是純文字檔,用 cat 觀察得到一組帳密。
透過線上的 Md5 Decrypt 工具解出明文為 passwd 顯然是弱密碼。
7331 Port
接著戰場轉移到 7331 Port。
登入之後得到一個與 80 Port 長得差不多的頁面,整個套路跟 Matrix: 2 差不多,接著就看有沒有地方可以拿到 SHELL。
接著在 robots.txt
中獲得 /data/
路徑,並且存在一個 data
檔案,使用 wget 將其下載下來。
wget http://admin:[email protected]:7331/data/data
透過 file
指令可以看出這是個 PE 檔,要使用 Windows 才可以打開,但由於操作都是在 WLS 底下,所以使用 strings
先查看該檔案中的字串集,簡單滑過,並沒有發現什麼線索,也沒有發現變數之類的東西,於是靈光一閃,Windows 通常會以 Unicode 寬字節的方式儲存,所以需要加參數 --encoding={b,l}
。
strings data --encoding={b,l}
在這邊可以看到裡面包含一組帳密,guest:7R1n17yN30
,但現在不知道可以使用在哪,也無法使用該組帳密登入 7331 Port,看來是要轉戰 6464 Port 了。
6464 Port
首先嘗試使用 Curl 對 6464 Port 做請求,得到回應 SSH-2.0-OpenSSH_7.7
,看來那組 guest
帳密有地方使用了。
經歷了一番努力,終於拿到 SHELL 了。
但被限制使用 rbash
,並且無法使用 /
,可以透過 SSH 來 Bypass 這個問題,使用以下指令連接就可以取得一個完整的 bash。
ssh [email protected] -p 6464 -t "bash"
連進去之後 kernal 有點新、sudo su
不給用,透過 sudo -i
查看限制規則如下。
看起來很像是要寫檔案到 trinity 使用者,並且讓他可以讀取,只有寫入的權限下,大概可以嘗試使用 SSH,並且將公鑰丟進去,可以參考文章「SSH 免密碼登入」一文。
ssh-keygen
cp .ssh/id_rsa.pub .
sudo -u trinity cp id_rsa.pub /home/trinity/.ssh/authorized_keys
ssh [email protected] -p 6464
成功登入 trinity 使用者,並且再次查看 sudo -l
。
發現可以使用 root 權限操作名為 oracle 的檔案,所以寫個 shell scrypt 即可。
成功讀取到 Flag。
Get Root
雖然成功得到 Flag,但卻沒有直接得到 root 權限,這也怪自己後知後覺,沒有想到可以直接執行 /bin/bash
。
touch oracle
chmod +x oracle
echo "/bin/bash" > oracle
sudo ./oracle
檢討
在取得 trinity 權限以前,還沒有想法之前還嘗試想用 hydra + rockyou 破密,跑了大概十分鐘直接放棄,其實更累的不是等這十分鐘,是花更多時間在處理 hydra 建置,WLS 環境下編譯一直有問題,接著 Kali 死在 VM 裡,完全叫不醒,更崩潰的是花費這麼多時間處理,下載 Windows 版本的 hydra 直接可以使用…,所以我到底前面在心酸什麼???
然後還是有很多狀態沒辦法直接透過指令、工具來降低時間成本,還是仰賴用肉眼、手動操作,若是將操作工具的熟練度提升上來,就不用擔心撰寫、操作工具的時間比手動久了,但也相較需要一定的時間去累積經驗才行。
學習重點
- hexdump Unicode 使用方法
- 查看
sudo -i
規則 - SSH 免密碼登入設置
- Shell scrypt 效益最大化