漏洞复现-docker容器逃逸与研究

      最后更新:2022-06-25 05:12:41 手机定位技术交流文章

      多克容器逃离

      • 前言
        • 三种方法
          • 使用脏牛逃脱斗篷
            • 利用前提
            • 前置知识
            • 使用脏牛和VDSO进行多克脱机的过程
              • 确定是否是一个多克环境
              • 查看系统过程的cgroup信息
            • 下载脚本
            • 利用脚本
            • 利用结果
          • cve-2019-5736
            • 利用原理与条件
            • 漏洞触发过程
            • 下载利用脚本并修改
            • 编译脚本
            • 将编译的主要文件上传到多克机上
            • 运行脚本并等待这个多克再执行
          • 错误的docker配置
            • 不授权访问端口远程 api 导致逃离
              • 确定是否可访问端口远程 api
            • 漏洞利用
              • 创建一个带返回exec_id参数的包。包内容如下:
              • 第二份 execute_start 包在获得 execute_id 参数后构建,如下:
              • 在端子容器中安装端子作为客户端
              • 查看主机多cker图像信息
              • 启动容器并将主机的根目录抓到容器的特定目录中
              • 写一个计划的任务报复壳或写它。 所有ssh公共键OK)
              • 在vps上使用nc命令等待shell返回
        • 利用特权模式逃逸
          • 漏洞原理
          • 漏洞利用
            • 查看磁盘文件
            • 将/dev/vda1(即磁盘)连接到任何本地文件
            • 写入计划任务
            • 等待shell在vps上重新连接
      • 如何防止船员逃离

      前言

      获取系统壳并发现它是多克
      在这一点上,我们需要让一个多克逃跑,才能找到真正的主人。

      三种方法

      使用脏牛逃脱斗篷

      利用前提

      成功的先决条件是,主机的内核有脏牛脆弱性

      前置知识

      VDSO(virtual dvnamic shared object)Linux中的共享小库
      将 kernel.so文件映射到所有用户程序的内存地址空间中,
      .So是一个基于Linux的动态链接,它的功能和功能类似于 windows.DLL文件,可以被理解为在内核中的映射功能进入内存以方便访问。

      使用脏牛和VDSO进行多克脱机的过程

      在这里插入图片描述

      确定是否是一个多克环境

      该文件存在于多克环境的根目录中

      在这里插入图片描述

      查看系统过程的cgroup信息

      在Linux内核中,“容器”这个词有多种含义,为了避免混淆,它被重新命名为cgroup
      程序子组,如会议组、程序组等。
      为了跟踪进程群的内存和IO使用,创建了一个cgroup,以统一进程群化,并根据进程群化监测和分配资源。

      对于容器技术,它实现了资源层次的约束和隔离,
      根据Linux内核提供的cgroup和命名空间技术

      在这里插入图片描述

      下载脚本

      没有吉特和柯尔
      然后进入壳牌文件管理,解开zip和解压缩 tar
      在这里插入图片描述

      如果多克不做

      在这里插入图片描述

      利用脚本

      在这里插入图片描述

      利用结果

      直接反弹道主体的壳体在图中显示
      在这里插入图片描述
      在根目录中创建任意文件.
      检查是否已成功地使用漏洞。

      cve-2019-5736

      利用原理与条件

      在主机系统中运行二进制文件,通过重写和运行它们在多克容器中逃脱。
      利用条件为:

      runc版本<=1.0-rc6
      Docker Version < 18.09.2

      漏洞触发过程

      修改脚本中的shell命令,
      使用go build编译脚本,
      将脚本上传到多克上,
      等待主机将exec执行到当前的docker容器中
      主机将对我们的vpsroot特权壳进行报复.

      下载利用脚本并修改

      在下一个图中修改所选的部分后面的命令可以称为反弹壳命令。
      在这里插入图片描述

      编译脚本

      在这里插入图片描述

      将编译的主要文件上传到多克机上

      你可以先上传到Github,然后使用Git克隆命令

      运行脚本并等待这个多克再执行

      当主机执行anexec命令进入我们运行脚本的容器时,
      主机将返回根特权壳到我们的vps监视端口,并使用它完成。

      错误的docker配置

      不授权访问端口远程 api 导致逃离

      多克群是一个管理多克群的工具.
      使用2375个端口进行默认维护。
      绑定一个Docker远程API服务,
      Docker可以通过HTTP、Python和调用API操作。

      确定是否可访问端口远程 api

      http://ip:2375/version

      在这里插入图片描述

      漏洞利用

      请浏览http://ip:2375/containers/json,查看下列屏幕是否出现:
      在这里插入图片描述

      创建一个带返回exec_id参数的包。包内容如下:

      在这里插入图片描述
      注意在里面的cmd字段, 这是执行的命令.

      第二份 execute_start 包在获得 execute_id 参数后构建,如下:

      在这里插入图片描述
      在多克主机上成功获取命令执行权限,但无法逃到主机。

      在端子容器中安装端子作为客户端
      查看主机多cker图像信息
      启动容器并将主机的根目录抓到容器的特定目录中

      上面的命令意味着将主机的根目录挂在容器dafef2e596e的/test目录下

      写一个计划的任务报复壳或写它。 所有ssh公共键OK)
      在vps上使用nc命令等待shell返回

      利用特权模式逃逸

      漏洞原理

      使用特权模式启动容器,您可以获得大量设备文件的访问。
      因为当管理员执行多克运行-特权时,
      多克容器将被允许访问所有设备在主机上,并可以执行装载安装命令。

      漏洞利用

      查看磁盘文件

      在这里插入图片描述

      将/dev/vda1(即磁盘)连接到任何本地文件

      在这里插入图片描述
      在此点, thenuoyan文件夹与其他主机的根目录相符,可以用于编写文件。

      写入计划任务

      等待shell在vps上重新连接

      如何防止船员逃离

      1,更新多克版本至19.3.版本1以上 - CVE-2019-14271,覆盖CVE-2019-5736
      2、runc版本 >1.0-rc6
      3、k8s 集群版本>1.12
      4、Linux内核版本>=2.6.22——CVE-2016-5195(脏牛)
      5、Linux内核版本>=4.14——CVE-2017–1000405(大脏牛),未找到docker逃逸利用过程,但存在逃逸风险
      不建议使用根权限运行多克服务
      不建议用特权模式启动多克
      不建议将主机目录上传到容器目录
      不建议用-cap-add=SYSADMIN启动容器。SYSADMIN意味着容器过程允许执行一系列系统管理操作,如安装和安装,并存在容器逃离的风险

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/28411.html

          热门文章

          文章分类