权限提升:利用Linux漏洞提权

目录

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系统中的文件针对访问者设置了三种权限:

img

每个文件针对每访问者定义了三种主要权限:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/466779.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Netty应用——心跳检测机制案例(十七)

编写一个Netty心跳检测机制案例,当服务器超过3秒没有读时,就提示读空闲当服务器超过5秒没有写操作时,就提示写空闲实现当服务器超过 7秒没有读或者写操作时,就提示读写空闲 代码 IdleStateHandler说明 IdleStateHandler是netty提供…

Git分支和迭代流程

Git分支 feature分支:功能分支 dev分支:开发分支 test分支:测试分支 master分支:生产环境分支 hotfix分支:bug修复分支。从master拉取,修复并测试完成merge回master和dev。 某些团队可能还会有 reale…

单例模式:懒汉饿汉线程安全问题

在我们前几篇文章中都了解了一些关于线程的知识,那么在多线程的情况下如何创建单例模式,其中的线程安全问题如何解决? 目录 1.什么是单例模式? (饿汉模式) 2.单例模式(懒汉模式) *懒汉模式与懒汉模式的对比 *如何解决懒汉模式…

CVE-2022-25578 漏洞复现

CVE-2022-25578 路由/admin/admin.php是后台,登录账号和密码默认是admin、tao,选择文件管理。 是否还记得文件上传中的.htaccess配置文件绕过发,在这个文件中加入一句AddType application/x-httpd-php .jpg,将所有jpg文件当作php…

《SQLi-Labs》05. Less 29~37

title: 《SQLi-Labs》05. Less 29~37 date: 2024-01-17 22:49:10 updated: 2024-02-12 18:09:10 categories: WriteUp:Security-Lab excerpt: HTTP 参数污染,联合注入、宽字节注入。 comments: false tags: top_image: /images/backimg/SunsetClimbing.p…

2024年教师资格证认定报名完整流程

💚网上报名流程概览 一、进入教资认定网报入口; 二、进行实名核验; 三、申请网报时间查询; 四、个人信息维护; 五、认定申请报名; 💚认定所需材料 1、 身份证; 2 、户口本/居住证…

LayoutInflater源码解析及常见相关报错分析

在日常Android开发中,最经常使用的RecyclerView控件是大家都绕不开的,而编写其Adapter时更离不开LayoutInflater的调用。当然,如果你做这一行有些时日了,相信你对其使用一定是炉火纯青了。即使如此,我觉得LayoutInflat…

【COMP337 LEC2】

Association Pattern Mining 关联模式挖掘 Special case: Frequent Pattern Mining (binary data sets) 频繁模式挖掘 Given data matrix, identify all subsets of columns ( features ) such that at least a fraction of rows (objects ) in the matrix have all the featur…

雨云裸金属服务器

雨云服务器与裸金属服务器:云端与实体的完美交融 随着信息技术的迅猛发展,云服务已经成为企业和个人数据处理与存储的重要选择。其中,雨云服务器和裸金属服务器作为两种截然不同的服务形式,各自拥有独特的优势和应用场景。本文将深…

Solidworks:从2D走向3D

Sokidworks 的强大之处在于三维实体建模,这个形状看似复杂,实际上只需要拉伸一次,再做一次减法拉伸就行了。第一次做三维模型,费了不少时间才搞明白。 接下来做一个稍微复杂一点的模型,和上面这个操作差不多&#xff0…

Hive SQL编译成MapReduce任务的过程

一、 Hive 底层执行架构 Hive是Facebook实现的一个开源的数据仓库工具。 Hive基于Hadoop实现,底层数据存放HDFS,计算(查询)使用MapReduce任务实现将结构化的数据文件映射为数据库表,并提供HQL查询功能,将HQ…

Netty应用(九) 之 编解码器概念 Netty常见的编解码器

目录 22.编解码器 22.1 编解码的概念 22.2 netty中的编解码 22.3 序列化 23.编解码器在使用过程中的两部分核心内容 23.1 序列化协议(编码格式)(传输数据的格式) 23.1.1 Java默认的序列化与反序列化 23.1.2 XML的序列化与反…