首页 > 系统相关 >常见linux提权方式

常见linux提权方式

时间:2023-05-11 12:12:11浏览次数:35  
标签:bin 脚本 常见 提权 usr linux PATH 普通用户 root

一、常见提权方式

1、普通用户有权修改root用户以root权限执行的脚本文件

普通用户可以修改此文件内容,当root用户执行时,便可执行普通用户注入的命令,实现提权。

如:

cron定时任务中执行脚本时,指定了test.sh,test.sh文件如果普通用户有权限进行修改,则存在提权漏洞。

2、系统中以root权限执行的脚本、调用的脚本或者调用脚本的父目录。普通的用户有写权限,则普通用户可以提权到root用户

如:

cron定时任务会定时执行demo目录下的test.sh文件,如果test.sh只有root权限可以修改,但是demo目录普通用户可以修改,则普通用户可以直接删除此目录并且重新创建一个demo目录和test.sh,此时便可以修改test.sh文件,让root来执行任意命令。

3、可执行脚本或者二进制文件属主是root,并且具有suid属性,普通用户可执行 

文件属主是root,文件权限是rwsr-xr-x,普通用户执行时文件时实际上是以root运行。

如:

$ll find
rwsr-xr-x 1 root root 221768 Feb 8  2016 find*

假设find命令的二进制文件权限是rwsr-xr-x,那么普通用户执行find命令实际是以root权限执行的

$find / -name raj.txt -exec whoami \;
root
$find / -name raj.txt -exec cat /etc/passwd \;
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/synd
games:x:5:60:games:/usr/games:/bsr/sbin/nologin
$cat /etc/passwd
cat: /etc/passwda: Permission denied

 4、root的$PATH中设置有普通用户目录,并且该目录优先级高 

用户执行命令时,会根据$PATH的路径搜索命令,搜索顺序是按$PATH中设置的顺序,如果路径中有普通用户可以控制的目录且顺序在系统命令目前之前,则普通用户可以自己在目录中设置恶意命令,等root用户执行该命令时,实现root提权。

如:

先在/test/demo目录下创建一个ls文件,并将目录配置到环境变量中

$echo $PATH
/test/demo:/usr/bin:/usr/sbin:/usr/local/sbin
$cat /test/demo/ls
#/bin/bash
id
$ls
uid=0(root) gid=0(root) groups=0(root) context=system u:system r:kernel t:s0

当我们执行ls命令时实际上执行的是id命令

5、脚本未对外部输入的数据进行合理的校验   

(1)、脚本入参

(2)、读取外部文件内容

(3)、依赖的库文件

(4)、理外部输入等

一旦外部输入可被低权限或者其他用户直接或者间接控制,将会造成纵向或者横向提权,泄露敏感信息等。

(外部输入数据的控制权限与脚本自身运行权限不对等)

6、sudo配置危险的命令 

/etc/sudoers配置文件中配置了危险命令,如可以使用sudo修改文件等,那么普通用户就可以以root权限修改文件进行提权等操作。

二、如何降低提权风险 

禁止在PATH环境变量中使用相对路径

说明:环境变量攻击是用来操控脚本行为的最常见方式,通过修改环境变量攻击者可以改变一个依赖环境变量值的脚本的执行过程或执行结果。其中最常被修改的环境变量是 PATH ,该变量值的路径集决定用户在执行不包含完整路径的单独命令时,查找该命令的路径及路径查找先后顺序。

假设PATH变量内容为/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin,正常情况下命令会顺序在/usr/local/sbin、/usr/local/bin、/usr/sbin、/usr/bin、/sbin、/bin中查找并执行。如果PATH环境变量内容设置不当,存在如“.”的相对路径,攻击者可以在当前目录下创建与系统命令同名的恶意程序或脚本,当用户执行该命令时,就会触发执行该恶意程序,导致恶意攻击。防护措施:在脚本中修改PATH环境变量时必须使用绝对路径。

错误示例:创建名为ls的脚本,内容如下:

#!/bin/bash

echo "I'm not ls command"

建立脚本target.sh,内容如下:

#!/bin/bash

PATH=.:${PATH}

ls -l

执行脚本target.sh,结果为非预期的“ls -l”结果,如下所示:

I'm not ls command

由于该脚本以当前用户权限执行,脚本中调用的命令也会拥有该权限,如果是root用户,安全隐患更大。

推荐做法: 修改PATH环境变量时,使用绝对路径可以防止如上问题,如下所示。

#!/bin/bash

PATH=/bin:${PATH}

ls -l

禁止用户降级直接调用脚本

说明:禁止使用不合法用户调用脚本,否则可能导致权限提升,比如:不能使用root用户调用普通用户的脚本,避免存在权限提升问题。

错误示例:脚本check_pad.sh的执行用户应为“ossuser”,但如下调用脚本中却使用root用户直接调用,可能存在权限提升的隐患。

#!/bin/bash

#......

bash /tmp/check_pad.sh

#......

推荐做法:切换使用正确的用户“ossuser”执行check_pad.sh,可以避免此类问题。

#!/bin/bash

#......

su - ossuser -c "bash /tmp/check_pad.sh"

#......

对于禁止类命令规避方法   

高风险命令

kill、shutdown、init、reboot、halt、Poweroff、mkfs、su、sudo、chmod、chown、chgrp、useradd、userdel、groupadd、groupdel、passwd、rm、vi、cp、mv、zip、gzip、unzip、gunzip、tar、killall、pkill、chkconfig、mount、rpm、umount、fdisk

中风险命令

cat、view、more、less、head、tail、grep、egrep

低风险命令

ls、dir、pwd、id、ps、du、df、who、w、whoami、file、finger、cal、dmidecode、wc、stat、ipcs

1)限制访问范围

约束用户执行命令的范围,如对于su命令,可以只配置为:

tom  ALL=(root)  NOPASSWD: /bin/su - jack,/bin/su - bob

2)采用脚本进行封装

将要执行的命令封装在脚本内,封装时要确保脚本的执行不会引发安全风险(如封装的命令可以任意执行),封装完成后再配置脚本的sudo权限即可。

最小授权   

Sudo配置中仅配置用户可完成其目标操作的最小命令集,禁止使用ALL。

root@kwephicprd28579:~# cat /var/log/sudo.log
Sep 16 11:31:16 : huawei : TTY=pts/2 ; PWD=/home/huawei ; USER=root ;COMMAND=/usr/bin/zip /l.zip /tmp -T --unzip-command=sh -c /bin/sh

 

标签:bin,脚本,常见,提权,usr,linux,PATH,普通用户,root
From: https://www.cnblogs.com/snad/p/17384375.html

相关文章

  • Linux网络编程:socket实现client/server通信
    一、问题引入阅读UNIX网络编程卷1:套接字联网API第3版的前4个章节,觉得有必要对书籍上的源码案例进行复现,并推敲TCP的C/S通信过程。二、解决过程2-1server#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<netinet/in.h>#include<arpa/inet.h......
  • Linux克隆-Rescuezilla
    一、介绍  Rescuezilla与Clonezilla完全兼容,Clonezilla是一种开源的磁盘映像解决方案。两种解决方案之间的主要区别之一是Rescuezilla具有图形用户界面,应该使某些用户更容易使用。二、下载https://github.com/rescuezilla/rescuezilla/releases/download/2.4.2/rescuez......
  • linux 中 正则表达式* 和 ?
     *表示匹配前一个字符0次或者多次;?表示匹配前一个字符0次或者1次,且只在扩展正则表达式中生效。 001、root@DESKTOP-IDT9S0E:/home/test#echo"ik"|grep"ie?k"root@DESKTOP-IDT9S0E:/home/test#echo"ik"|sed-n'/ie*k/p'##*表示匹配0次或者多次ikroot@DESK......
  • Solus Linux 改变发展方向
    Solus是一个独立开发的 Linux 发行版,它的一大特色就是Solus自创的Budgie桌面环境(最新的Fedora也已经新增了这个桌面环境),当然用户也可以选择其他常见的GNOME、MATE或KDEPlasma作为桌面环境。它的软件包管理器eopkg是基于PardusLinux的PiSi软件包管理系统。......
  • Solus Linux 改变发展方向
    Solus是一个独立开发的 Linux 发行版,它的一大特色就是Solus自创的Budgie桌面环境(最新的Fedora也已经新增了这个桌面环境),当然用户也可以选择其他常见的GNOME、MATE或KDEPlasma作为桌面环境。它的软件包管理器eopkg是基于PardusLinux的PiSi软件包管理系统。......
  • Solus Linux 改变发展方向
    Solus是一个独立开发的 Linux 发行版,它的一大特色就是Solus自创的Budgie桌面环境(最新的Fedora也已经新增了这个桌面环境),当然用户也可以选择其他常见的GNOME、MATE或KDEPlasma作为桌面环境。它的软件包管理器eopkg是基于PardusLinux的PiSi软件包管理系统。......
  • linux systemd启动
    1.常用基本命令列出所有正在运行服务systemctllist-units--type=servicesystemctllist-units--type=service--all可以列出已经loaded但已经不活动的服务列出所有targetsystemctllist-units--type=target列出所有socketsystemctllist-units--type=socket列......
  • Linux xfs文件系统stat命令Birth字段为空的原因探究
    在Linux平台找出某个目录下创建时间最早的文件,测试验证脚本结果是否准确的过程中发现一个很有意思的现象,stat命令在一些平台下Birth字段有值,而在一些平台则为空值,如下所示:RHEL8.7下,XFS文件系统[mysql@mysqlu02 ~]$ more /etc/redhat-release Red Hat Enterprise Linux......
  • linux引导过程分析
    1Linux引导过程1.主机加电后,系统首先加载BIOS,这个BIOS是烧录在主板上的ROM芯片上的。2.BIOS启动后,执行了一些例如开机自检,硬件初始化等工作,然后读取硬盘MBR分区的第一个扇区(前512字节),其中前446字节储存了一个小程序叫做bootloader,中间的64字节是磁盘分区表,最后两个字节是......
  • linux 中sed命令实现大小写的转换
     001、大写转换为小写root@DESKTOP-IDT9S0E:/home/test#lsa.txtroot@DESKTOP-IDT9S0E:/home/test#cata.txt##测试数据AWFhhddmehDGEE345efffrrthhkkroot@DESKTOP-IDT9S0E:/home/test#sed's/[a-z]/\U&/g'a.txt##U为大写AWFH......