CVE-2016-5195
Dirty Cow 提权漏洞复现。
前言
比较有名的漏洞,刚好系统安全的作业就是要复现这个漏洞,正好写了。
复现
中大镜像站内网镜像下载地址:https://mirrors.matrix.moe/ubuntu-releases/16.04/ubuntu-16.04.7-desktop-amd64.iso
下一个 Ubuntu 16.04 的镜像(这个是因为作业让我用这个版本,选其他的应该也行),看一下内核版本
1 | $ uname -a |
太新了,换个老点的 kernel,可以大概参考官方的 Patched Kernel Versions(但是好像不完全准确?),我选了 4.4.0
1 | sudo apt-get install linux-image-4.4.0-21-generic \ |
再改一下 GRUB 配置
1 | sudo nano /etc/default/grub |
改成如下配置,没有的就加上
1 | GRUB_TIMEOUT=10 |
然后更新一下 GRUB(别忘了)
1 | sudo update-grub |
重启一下,在 GRUB 菜单选择 Advanced options for Ubuntu
,然后选择 4.4.0-21-generic
版本的内核,回车进入系统。
1 | uname -a |
看到内核已经是老的了,可以开搞了。
去 GitHub 偷一个 PoC
1 | git clone https://github.com/gbonacini/CVE-2016-5195.git |
然后执行一下,root 就到手了
1 | $ ./dcow -s |
拓展之 GRUB
GRUB,全称 GRand Unified Bootloader,就是一个引导程序,是计算机启动时第一个加载的软件,负责加载操作系统的内核,然后由内核初始化操作系统的其他部分(如 shell、显示管理、桌面环境等)。
但是还有一个有意思的点 —— GRUB 既是引导程序,也是一个引导管理器。
那么引导管理器又是个什么东东呢?
也不复杂,它的作用就是让你能选择不同的操作系统(当然你得有两个以上的操作系统才有得选是吧)
原理
极致省流版原理:条件竞争导致只读文件被写入
可以先说说这个命令的由来,相信熟悉 Docker 的同学对写时复制(Copy-On-Write)这个概念并不陌生,这个机制的意思就是一个资源被复制成两份时,如果双方都不存在修改,那么实际上就只会存在一份资源。熟悉 Python 的同学也可以尝试一下如下代码:
1 | a = 1 |
// To be continued…
总结
有种把最近学的都串起来的爽感,包括 COW、条件竞争这些。
参考
CVE-2016-5195
经典内核漏洞复现之 dirtycow
Linux Jargon Buster: What is Grub in Linux? What is it Used for?
CVE-2016-5195