目录
Linux权限基础
Linux用户权限
Linux文件权限
特殊的Linux文件权限
Linux本机信息收集
利用Linux漏洞进行提权
脏牛漏洞
pkexec
Linux权限基础
Linux用户权限
在Linux中,根据权限的不同,大致可以分为三种:超级用户(root)、普通用户、虚拟用户,从Linux中的/etc/password文件中,我们可以很详细的了解当前系统内每一个用户的不同之处,文件内容如下所示
1.root:x:0:0:root:/root:/usr/bin/zsh
2.user1:x:1000:1000:user1,,,:/home/user1:/usr/bin/zsh
3.www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
每个用户在/etc/passwd文件中的格式通常为account:passwd:UID:GID:GECOS:shell(账号:密码:用户ID:组ID:一般信息:HOME目录:shell类型)
上面的1为超级用户,2为普通用户、3为虚拟用户,1的UID和GID为0,2的UID和GID范围是 500-60000,3的UID和GID的范围为 1-499
注:虚拟用户一般是由各种服务创建的。比如www-data就是Apache服务创建的虚拟用户,专门用来运行Apache服务
Linux文件权限
Linux系统中的文件针对访问者设置了三种权限:
、
每个文件针对每访问者定义了三种主要权限:
r:read=4
w:write=2
x:xexcute=1
特殊的Linux文件权限
u+s:suid(所属用户的禁锢位)
数字标记:4
仅对可执行文本文件(命令文件)设置有意义,将某文件的所属用户进行锁死到root,不可以让其他用户代替自己称为所属用户,运行命令文件进程的所属用户是命令自身的身份;
普通用户使用在passwd执行时打开一个新的终端,在新终端中使用ps -ef 来查询该进程的运行权限:
可以看到进程的权限并非user1 而是文件创建者root。也就是说,带有SUID属性的文件,不管运行这个文件的用户是谁,它的运行者都睡变成文件的创建者,那么在执行的过程中,执行用户将会短期的拥有文件所属组的权限
g+s:sgid(所属组的禁锢位)
数字标记:2
对可执行文本文件和目录文件设置都有意义,对文本文件而言:将某文件的所属组进行锁死,不可以让其他用户代替自己称为所属组;对目录文件设置表示:在目录下所创建的文件所属组都是目录文件的所属组
即,如果一个用户对一个具有SGID属性的目录添加文件,则添加的文件的所属组将会带有SGID属性的目录的创建所属组
o+t:sticky(冒险位)
数字标记:1
对目录文件和设置有意义,作用用户只能删除属于自己的文件不能删除其他用户的文件
注意:如果为文本文件添加特殊权限执行位的x会变成S,为目录文件添加特殊权限执行位为s;
Linux本机信息收集
在Linux中执行 cat /etc/issue可以查看发型版本
执行命令 cat /etc/*release可以查询系统的详细信息
执行uname -r 可以查看系统的内核版本
如果想要查询当前系统进程列表,可以使用ps命令:
通过下面的命令可以查看当前系统中的所有用户:
cut -d: -f1 /etc/passwd
利用Linux漏洞进行提权
脏牛漏洞
脏牛漏洞原理(Dirty COW 代号CVE-2016-5195)在Linux内核中已经存在了长达9年的时间,产生的原因是Linux内核的内存子系统在使用get user_page函数处理写时复制(Copy-on-Write)时存在条件竞争漏洞,导致可以破坏私有只读内存映射
脏牛漏洞影响版本:
CentOS 5.x 32位/64位
CentOS 6.x 32位/64位
CentOS 7.x 32位/64位
CoreOS 717.3.0 64位
Debian 6.x 32位(Debian官方已停止更新,建议使用Debian7、Debian8版本)
Debian 7.x 32位/64位
Debian 8.x 32位/64位
openSUSE 12.3 32位/64位
openSUSE 13.2 64位
SUSE Linux Enterprise Server 11 SP3 64位
SUSE Linux Enterprise Server 12 64位
Ubuntu Server 10.04.1 LTS 32位/64位(Ubuntu官方已停止更新,建议使用Ubuntu 14.04版本)
Ubuntu Server 12.04.1 LTS 32位/64位
Ubuntu Server 14.04.1 LTS 32位/64位
注:脏牛漏洞的利用工具可以通过github获取。
注:对应存在漏洞的主机可以在阿里云下载:centos安装包下载_开源镜像站-阿里云 (aliyun.com)
(1)利用过程
在利用前,可以使用uname查看一下当前操作系统的版本是否存在脏牛漏洞
uname -a
Linux centos111 3.10.0-1160.99.1.el7.x86_64 #1 SMP Wed Sep 13 14:19:20 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
执行ls /root来验证当前用户的权限:
执行下面命令来编译漏洞利用程序。编译完成后会生成名为dirty的漏洞利用程序
gcc -pthread dirty.c -o dirty -lcrypt
执行下面命令会添加一个名为firefart的用户且系那个密码设置为123456,新用户将会具备root权限
./dirty 123456
注:该程序需要运行一段时间
然后执行sufirefart切换用户,切换后执行命令ls /root 验证当前权限:
切换后,使用firefart用户是可以正常查看的,说明提权成功了
注:我这里没有成功的原因是我的主机版本没有该漏洞,如果是包含漏洞的版本就会成功的
(2)脏牛漏洞的修复方式:
该漏洞可以通过升级内核版本的方式来修复。
pkexec
(1)pkexec本身是polkit工具集中的一个程序,pokit工具集,是主要用于在类Unix操作系统中控制系统范围权限的组件,该组件为非特权进程和特权进程之间进行通信提供给了一种有效的方式,而pkexec的作用就是以其他用户身份执行命令,它允许守群用户以其他用户身份执行程序,pkexec(CVE-2021-4034)已经隐藏了12年多,产生漏洞的原因是自身因为无法处理调用参数,最终尝试将环境变量作为命令执行,攻击者可以通过制作环境变量来利用这一点,从而控制要执行的命令
安全版本:
CentOS系列:
CentOS 6:polkit-0.96-11.el6_10.2
CentOS 7:polkit-0.112-26.el7_9.1
CentOS 8.0:polkit-0.115-13.el8_5.1
CentOS 8.2:polkit-0.115-11.el8_2.2
CentOS 8.4:polkit-0.115-11.el8_4.2
SS
Ubuntu系列:
Ubuntu 20.04 LTS:policykit-1 - 0.105-26ubuntu1.2
Ubuntu 18.04 LTS:policykit-1 - 0.105-20ubuntu0.18.04.6
Ubuntu 16.04 ESM:policykit-1 - 0.105-14.1ubuntu0.5+esm1
Ubuntu 14.04 ESM:policykit-1 - 0.105-4ubuntu3.14.04.6+esm1
(2)利用过程
漏洞利用程序下载地址:berdav/CVE-2021-4034: CVE-2021-4034 1day (github.com)
下载完成后将pkexec漏洞利用程序移动到目标主机,然后在makefile所在目录中执行命令make进行编译
可以看到目录中生成名为cve-2021-4034的可执行文件,执行该文件即可以获得root权限
(3)pkexec漏洞修复方式
最新版的pkexec对该漏洞进行了修复:
centos用户可以执行rpm -qa polkit来检查当前pkexec是否为安全版本,如果为非安全版本,则可以执行命令 yum clean all && yum makecacheyum update polkit -y来升级至安全版本,
Ubuntu用户可以执行命令dpkg -l policykit -1来检查当前pkexec是否为安全版本,如果为非安全版本,则可以执行命令sudo apt-get updatesudo apt-get install policykit-1