利用SUID二进制文件进行提权
SUID权限
SUID(Set UID)权限只允许设置二进制可执行文件。可以让调用者以文件拥有者身份运行该文件,且该权限只在进程运行过程中有效。
假设有一个可执行文件ls,属主为root,并且设置了SUID权限,普通用户执行ls的过程中,就是root权限。
cd
这里以cd为例,给cd赋予SUID权限,cd原先权限为rwx读写执行,赋予SUID权限后为rws,s就是SUID权限。
可以通过以下命令来查找拥有SUID权限的程序。
find / -perm -u=s -type f 2>/dev/null
perm指定权限,-u=s代表SUID权限,type指定文件类型,f表示常规文件。
普通用户在执行cp命令时,cp命令的权限就是root,可以复制/etc/passwd到桌面进行修改,添加root权限账户。
vim修改passwd,因为是添加root权限账户,所以需要先复制root账户到最后一行,在root账户基础上进行修改。第一项为用户名,第二项为密码,每一项之间用“ : ”隔开。详细请参考/etc/passwd文件格式说明。
这里把用户名root改为aaa。密码则用openssl生成。passwd参数代表生成一个密码,-1为md5,-salt指定盐(随意指定),最后跟要加密的值,也就是密码123。
openssl passwd -1 -salt 1×2×3 123
修改成功后,需要把桌面的passwd文件复制回去,替换掉/etc/passwd。
tail查看/etc/passwd,这时就添加了一个aaa用户,权限为root。
切换到aaa用户。
成功!
find
find命令在拥有SUID权限的情况下,也可以用来进行提权。
只需要使用exec参数即可。
find的exec参数用来指定其它命令,便于处理搜到的结果。结果的输出,需要以分号来结束,在bash环境中分号代表代码块结束,有特殊意义,所以这里需要进行转义。
vim
vim在拥有SUID权限的情况下,也可用来进行提权操作。
当vim拥有SUID权限后,意味着任何用户都可以通过vim来编辑只有root才能编辑的文件,例如编辑/etc/sudoers文件(普通用户会被直接拒绝访问),通过修改/etc/sudoers文件可以让别的用户也能执行sudo命令。在sudoers文件中配置普通用户的权限,与root一样,以test为例,添加内容如下:
test ALL=(ALL) ALL
vim编辑后保存时用wq!强制保存,vim运行时虽然是root权限,但wq依然会提示只读。
随后sudo bash就会获取一个root的shell。
脚本
除了系统的一些可执行命令,自己写的可执行文件也可添加SUID权限。不论c或者go或者其他语言都可以,这里以c为例。
示例代码如下:
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
setuid(geteuid());
system("/bin/bash");
return 0;
}
使用gcc进行编译。
先vim编辑shell.c文件,写入代码。
gcc编译shell.c文件输出为shell。
编译后传入目标机,这里放到/bin/aaa目录下,然后添加SUID权限测试。
普通用户执行该文件后,会返回一个root权限的shell。
有很多命令在被添加SUID权限的情况下,都可用来进行提权。
更多相关命令和用法可以参考:https://gtfobins.github.io/
总结
愿大家健康开心。
原文始发于微信公众号(AlertSec):利用SUID二进制文件进行提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论