docker
主机是一个运行 docker
服务和容器runtime
的系统。在之前的突破部分,已经讨论了如何突破本地或远程系统上正在运行的容器。但是,如果有一个在公共 IP 上运行的远程 docker
主机,或者可以访问一个低级容器 OCI
引擎怎么办?
通常,docker
服务会在/run/docker.sock
中创建一个socket
文件。但在此,不会有这样的文件。/run/
目录中有一个名为docker
的文件夹,遗憾的是无法访问。
在之前文章中, docker
也可以在默认端口 2375
上运行 TCP
socket
。在本实验中,实际上,TCP
socket
在同一端口上打开。
默认情况下,Docker CLI
尝试通过 Unix
socket
进行通信。由于在这种情况下,socket
文件不可用,需要更改 docker
主机以告诉 docker CLI
使用 TCP socket
。需要导出环境变量才能在主机之间切换。
export DOCKER_HOST=tcp://127.0.0.1:2375
完成后,可以通过简单地执行docker images
命令来测试它。这实际上会列出所有可用的镜像
简单地使用以下命令。它创建和启动容器。
本实验将打开一个 Web
应用程序“Portainer
”。在之前的实验中介绍过它,它会自动登录到仪表板。但通常,它有一个认证页面。幸运的是,在实验室描述中有登录凭据admin:cassandra
登录后,创建一个镜像为modified-ubuntu:latest
的容器,并在容器的/host
目录下绑定宿主机的/
。记得选择“bind
”模式和“writable
”权限。完成所有这些后,只需部署容器,它就会进入容器页面。
如果不记得镜像的名称,可以在侧面导航栏的镜像部分找到它。
从表中找到容器的适当名称,以使用默认的 bash shell
选项启动执行会话。
chroot
进入/host
并检索flag
文件或稍后根据要求侵入系统 😉
在这个实验中,有一个 旧的kali
界面,有一个主机在 kali 系统之后的下一个 IP 上运行。实验室说明中提供了查找 IP 的说明。在例子中,IP 是192.158.29.3
对其执行 nmap
扫描并列出允许它扫描从 1 到 65535 的所有端口。可以通过执行以下命令来执行此操作,只需更改 IP 地址即可。
nmap -sV 192.158.29.3 --min-rate 1000 --top-ports 65535
会发现 9000 端口已打开,这是“Portaine
r”的默认端口。在之前的帖子中已经看到了这一点。尝试在浏览器中打开网址http://192.158.29.3:9000
发现它确实是portainer
服务,这次没有用于身份验证的密码,但有一个用户名和一个字典文件。所以需要对 portainer
登录 API
执行暴力攻击
从 kali Linux
提供的 burp
套件中启动 snipper
暴力攻击,并加载/root/Desktop/wordlists/100-common-passwords.txt文件作为 wordlist
。
一旦找到登录凭据并使用它登录到 portainer
。
启动一个容器并启动 exec
会话,如上一个实验所示,然后 chroot
到/host
文件系统以接管系统并检索flag
文件
此实验室使用kali
,可以按照说明找到目标机器的 IP。找到 IP 后,对其启动 nmap
端口扫描,会发现 docker
服务正在运行并暴露在公共 URL
上。
docker CLI
已经安装在 kali
中。只需要将 docker
主机环境变量更改为远程系统即可。为此,需要设置一个环境变量 DOCKER_HOST
,如下所示
export DOCKER_HOST=tcp://your_ip_here:2375
通过列出镜像来测试连接。如果失败,则需要修复环境变量
使用以下配置运行 docker 容器,将远程系统上主机文件系统的根目录挂载到容器的/host
路径。稍后 chroot
进入它并接管整个文件系统。此外,可以添加用户并提供 sudo
权限并将其用作后门或配置 cron
作业以连接到攻击者机器并以 root
身份提供反向 TCP shell