Docker Engine API 是 Docker 提供的基于 HTTP 协议的用于 Docker 客户端与 Docker 守护进程交互的 API,Docker daemon 接收来自 Docker Engine API 的请求并处理,Docker daemon 默认监听 2375 端口且未鉴权,我们可以利用 API 来完成 Docker 客户端能做的所有事情。

Docker daemon 支持三种不同类型的 socket: unix, tcp, fd。默认情况下,Docker daemon 监听在 unix:///var/run/docker.sock,开发者可以通过多种方式打开 tcp socket,比如修改 Docker 配置文件如 / usr/lib/systemd/system/docker.service:

图片

之后依次执行 systemctl daemon-reload、systemctl restart docker 便可以使用 docker -H tcp://[HOST]:2375 这种方式控制目标 docker

图片

图片

因此当你有访问到目标 Docker API 的网络能力或主机能力的时候,你就拥有了控制当前服务器的能力。我们可以利用 Docker API 在远程主机上创建一个特权容器,并且挂载主机根目录到容器,对主机进行进一步的渗透,更多利用方法参考容器逃逸章节。

检测目标是否存在 docker api 未授权访问漏洞的方式也很简单,访问 http://[host]:[port]/info 路径是否含有 ContainersRunning、DockerRootDir 等关键字。

最后编辑: kuteng  文档更新时间: 2022-06-01 16:22   作者:kuteng