SUID提权
1.SUID原理理解
什么是suid?suid全称是Set owner User ID up on execution。这是Linux给可执行文件的一个属性。
这个属性使得其他用户执行这个程序的时候可以以该程序所有者/组的权限与身份来运行。
当为可执行文件设置SUID并产生进程后,该进程的属主为原程序文件的属主,以其属主的身份进行操作。
普通用户之所以也可以使用ping命令,原因就在我们给ping这个可执行文件设置了suid权限。
设置了s位的程序在运行时,其Effective UID将会设置为这个程序的所有者。
比如,/bin/ping
这个程序的所有者是0(root),它设置了s位,那么普通用户在运行ping时其Effective UID就是0等同于拥有了root权限。
1 |
|
通常情况下Effective UID和Real UID相等,所以普通用户不能写入只有UID=0号才可写的/etc/passwd
;
有suid的程序启动时,eUID就等于二进制文件的所有者,此时Real UID就可能和eUID不相等了。
(这里划重点,后面会利用)
1.1 利用SUID提权的条件
- 程序存在suid权限
- 程序的属主是0号或者其他super user
- 程序运行的进程存在命令注入漏洞or本身可执行命令
关于linux不同发行版本存在的限制及linux安全配置问题可参考文章:Linux与suid提权
2.SUID提权
已知的可用来提权的linux可执行文件列表如下:
1 |
|
以下命令用于发现系统上运行的SUID可执行文件。命令将尝试查找具有root权限的SUID的文件。
1 |
|
如下ping等命令查看权限,带有s标志位。
2.1 Nmap
2.1.1 interactive交互
较旧版本的Nmap(2.02至5.21)具有交互模式interactive,允许用户执行shell命令。
由于Nmap在使用root权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的shell。
1 |
|
也可以通过msf的模块对nmap进行权限提升exploit/unix/local/setuid_nmap
使用命令chmod u+s nmap
给nmap赋予suid
2.1.2 –script参数
因为nmap script中使用的是lua语言,而lua库中似乎没有直接启动进程的方式,都会依赖系统shell,所以我们可能并不能直接通过执行shell的方式来提权。但是因为此时nmap已经是root权限,我们可以通过修改/etc/passwd
的方式来添加一个新的super user:
来看一眼/etc/passwd
,只有root权限可以写入的。
nmap –script 加载lua脚本:
1 |
|
2.2 VIM
如果vim是以suid运行的话,其权限会继承自root用户,因此可以读取系统上的所有文件。
如下将vim设置为suid,cat权限不够,而用vim就可以查看。
1 |
|
2.3 Find
如果Find命令也是以suid权限运行的话,则将通过find执行的所有命令都会以root权限执行。
1 |
|
当然,大部分Linux操作系统都安装了netcat,因此可以直接反弹shell来提升root权限。
反弹shell
1 |
|
2.4 Less More
Less和More都执行以用来提权。
1 |
|
2.5 python
1 |
|
2.6 php
1 |
|
2.7 SUID利用汇总
如下链接 汇总了44种 suid 提权的文件/应用的提权方式:CentOS7_suid提权