Docker 逃逸突破边界
免责声明
本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动,包括但不限于未经授权访问计算机系统、网络或数据。
作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何责任。包括但不限于因使用本文所述技术而可能导致的法律诉讼、财产损失、隐私泄露或其他任何形式的责任。
在进行任何渗透测试或安全研究之前,请确保您已获得所有必要的授权,并遵守适用的法律和道德准则。未经授权的安全测试可能违反法律,并可能导致严重的法律后果。
本文中的内容仅供参考,不应被视为专业建议。在进行任何安全相关活动之前,建议咨询具有相应资质的专业人士。
作者保留对本博客文章的所有权利,并有权在未经通知的情况下进行修改或删除。
正文部分
一、前期准备
目标:实现 Docker 逃逸突破边界
环境搭建:
攻击机:Windows 10
Kali-2022(192.168.162.27)
靶机:Ubuntu 14.04 LTS ==> NAT:192.168.162.34、仅主机:192.168.183.128
Windows Server 2012 R2 ==> 仅主机:192.168.183.130
Windows 7 ==> 仅主机:192.168.183.129
机器说明:
WEB:Ubuntu 14.04 LTS
DC:Windows Server 2012 R2
PC:Windows 7
测试工具:
Burp Suite、Behinder、Railgun、Struts2漏洞检测工具、
二、探索发现阶段
2.1 主机发现

2.2 端口扫描

2.3 服务探测

根据 Nmap 扫描结果可以发现,Web 服务器开放了 22、2001、2002、2003 四个端口,其中 2001、2002、2003 端口都对应 HTTP 服务
2.3.1 识别 2001 端口的 Web 应用框架及版本

看情况这里是一个文件上传的地方,从标题可以看出应用框架是 Struts 2
2.3.2 识别 2002 端口的 Web 应用框架及版本

主页是一个 Tomcat 页面,使用工具扫描一下目录

没有发现什么过于敏感的目录
2.3.3 识别 2003 端口的 Web 应用框架及版本

一个 Web 端 MySQL 数据库管理页面,得到 MySQL 版本为 5.5.62,phpMyAdmin 版本为 4.8.1
三、入侵和感染阶段
3.1 检测 Struts 2 的 Web 应用漏洞并尝试利用
使用工具对服务地址进行检测,先进行目标信息配置,接着就验证漏洞

发现该服务存在远程代码执行漏洞,下面就对该漏洞进行利用

选择漏洞编号,搞好马子内容

上传马子

马子上传 OK,访问一下马子,没问题就用冰蝎进行连接

冰蝎连接马子

马子连接正常,不过这个 IPv4 看着怎么有点怪!?猜测是使用了云计算技术
3.2 检测 Tomcat 的 Web 应用漏洞并尝试利用
信息收集时发现这个 Tomcat 版本为 8.5.19,这个版本存在一个任意文件上传漏洞,下面进行任意文件上传漏洞测试
使用 bp 抓取任意数据包,修改数据包中的内容。改提交方式,添内容类型和马子内容。然后发包

状态码为 201,说明马子已经写入到 Web 服务器,下面验证一下马子

召唤冰蝎,连接马子

3.3 检测 phpMyAdmin 漏洞并尝试利用
服务探测时发现 phpMyAdmin 的版本为 4.8.1,经过查询,该版本的应用存在 CVE-2018-12613
目录扫描

发现有 db_datadict.php 这个文件,就用它进行包含,查看一下 /etc/passwd 中的内容

目前已经确定了该应用存在文件包含漏洞,接下来就利用 phpMyAdmin 执行 SQL 语句,将马子写入服务器。再写入马子之前,需要先了解执行的 SQL 语句会被记录在哪里——在 phpMyAdmin 中,执行的 SQL 语句会被保存在临时的 session 中,文件名就是 sess_ 拼接 session 值,并且临时文件一般情况下都在 /tmp 中。接下来就开始操作验证前面的想法,先执行一段查看当前目录路径的 SQL 语句

接下来获取 session 值

使用抓包的方式也可以获取到 Cookie,这里就不演示了,接下来使用文件包含漏洞包含这个临时文件

接下来就给服务器中写 webshell
select '<?php echo `echo "<?php eval(base64_decode(马子的base64内容));?>" > /var/www/html/shell.php`;?>';

访问马子

没报 404 就是成功,召唤冰蝎连马子

四、攻击和利用阶段
在冰蝎的网站列表中可以看到三个服务对应的操作系统都是 Linux 操作系统,然而,在接下来的操作过程中,还需要判断当前用户的权限以及 Web 服务是否运行在 Docker 容器内,因为在前面发现端口为 2001 的服务 IPv4 有点奇怪,所以不得不考虑服务是否部署并运行在 Docker 容器中

4.1 逃逸 Struts 2 容器
4.1.1 Struts 2 应用服务环境识别
查看当前用户权限

查找 .dockerenv 文件

.dockerenv 文件是 Docker 容器特有的文件,通常位于容器的根目录下,用于指示当前进程正在 Docker 容器中运行。那么就可以猜测该服务在容器中运行
4.1.2 Struts 2 应用 Docker 服务器逃逸
下面使用 cdk 对目标进行操作,cdk 是一个开源的 Docker 容器渗透工具包。上传 cdk 至目标服务器

由于获取到的是 root 权限,给文件加上执行权限,然后运行文件,对容器进行检测

检测之后发现当前容器使用 root 启动,尝试挂载根目录

挂载失败,换下一个服务接着测试
4.2 逃逸 Tomcat 容器
4.2.1 Tomcat 应用服务环境识别
查看当前用户权限

查找 .dockerenv

4.2.2 Tomcat 应用 Docker 服务器逃逸
上传 cdk,检测容器是否存在不安全配置和漏洞

发现当前容器也是以特权模式启动的,尝试将宿主机根目录挂载至 Docker 容器的某个目录中

发现挂载成功,挂载目录为 /tmp/cdk_BpmX2 目录,进去看看

拥有了宿主机的根目录,那么接下来就需要想着连接宿主机,在服务探测时发现宿主机开启了 22 端口的 SSH 服务,考虑写入 SSH 密钥来获取宿主机权限。使用 kali 生成一个 RSA 密钥对,将公钥写入目标,也就是宿主机的 /root/.ssh 目录下,然后使用私钥进行连接
生成密钥

查看公钥

将公钥写入目标

将私钥拷贝到装有 SSH 连接工具的服务器上,使用 SSH 连接工具进行连接,我这里使用的是MobaXterm

这样就算拿下了宿主机的控制权限,正常情况下到这里就可以了,不过为了完美一点,再把另一台服务器也拿下
4.3 逃逸 phpMyAdmin 容器
4.3.1 phpMyAdmin 应用服务环境识别
查看当前用户权限

这个权限有点尴尬,需要提权
查找 .dockerenv

4.3.2 phpMyAdmin 应用 Docker 服务提权
脏牛提权
上传文件

执行程序

查看 /etc/passwd 文件中是否存在 firefart 账号

很显然没有 firefart 账号,脏牛提权失败
4.4 配置内网代理
4.4.1 网络探测
现在已经获取到了宿主机的权限,接下来对宿主机的网络环境进行探查

宿主机存在两张网卡,与外部网络对接的是 eth0 网卡,那么 eth1 网卡对接的应该就是内网了
4.4.2 MSF 生成木马

上传木马至目标

配置监听器

添加路由

配置 SOCKS 5 代理

五、探索感知阶段
探测内网机器端口

导出为 Excel 表格

可以发现,内网有两台机器,192.168.183.129 和 192.168.183.130,其中 192.168.183.130 开放了 389 端口,猜测是域控服务器,因为一般情况下只有域控服务器才会开放 389 端口
六、传播阶段
七、持久化和恢复阶段
未完……
相关文章:
Docker 逃逸突破边界
免责声明 本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动,包括但不限于未经授权访问计算机系统、网络或数据。 作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何…...
残差连接,就是当某一偏导等于0时,加上x偏导就是1,这样乘以1保证不失效
目录 残差连接,就是当某一偏导等于0时,加上x偏导就是1,这样乘以1保证不失效 残差连接中F(x)一般代表什么,将F(x)变为F(x) +x,这样不是改变了函数 本身的性质 F(x)=F(x) +x F(x)偏导若==0;偏导连乘就是0,这样就梯度消失了 F(x) +x;求偏导时x导数是1,保证不丢失F(x)…...
博泽Brose EDI项目案例
Brose 是一家德国的全球性汽车零部件供应商,主要为全球汽车制造商提供机电一体化系统和组件,涵盖车门、座椅调节系统、空调系统以及电动驱动装置等。Brose 以其高质量的创新产品闻名,在全球拥有多个研发和生产基地,是全球第五大家…...
从科举到高考,人才选拔制度的变革与发展
一、引言 在人类历史的长河中,人才选拔机制始终是推动社会进步与文明传承的关键环节。古代科举制度与现代高考制度,分别在各自的时代背景下承担着筛选人才的重任,二者虽皆关乎教育与人才进阶之路,却有着诸多本质性的区别与独特的…...
利用Docker一键发布Nginx-Tomcat-MySQL应用集群
Docker简介,可以看上一篇文章: 为什么互联网公司离不开Docker容器化,它到底解决了什么问题?-CSDN博客 Docker体系结构 docker核心就是镜像和容器: 镜像就是应用程序的安装文件,包含了所有需要的资源&…...
关于数据库数据国际化方案
方案一:每个表设计一个翻译表 数据库国际化的应用场景用到的比较少,主要用于对数据库的具体数据进行翻译,在需要有大量数据翻译的场景下使用,举个例子来说,力扣题目的中英文切换。参考方案可见: https://b…...
【系统架构设计师】高分论文:论信息系统的安全与保密设计
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 摘要正文摘要 本人所在工作单位承担了我市城乡智慧建设工程综合管理平台项目的开发工作。我有幸参与了本项目,并担任架构师一职,全面负责项目的需求分析和系统设计等工作。城乡智慧建设工程综合管理平台项目包括…...
使用Tauri创建桌面应用
当前是在 Windows 环境下 1.准备 系统依赖项 Microsoft C 构建工具WebView2 (Windows10 v1803 以上版本不用下载,已经默认安装了) 下载安装 Rust下载安装 Rust 需要重启终端或者系统 重新打开cmd,键入rustc --version,出现 rust 版本号&…...
【docker】docker compose多容器部署
Docker Compose 的详细讲解与实际应用 什么是 Docker Compose? Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用。 通过一个 docker-compose.yml 文件,可以同时启动多个服务,简化多容器管理。 Docker Compose 的核心…...
JS +CSS @keyframes fadeInUp 来定义载入动画
JSCSS 更完美展现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>跳动加载指示器</title>&l…...
Seatunnel解决ftp读取json文件无法读取数组以及格式化之后的json无法解析的问题
问题原因 在JsonRead这个方法里面 在源码中使用的逻辑是读取一行 然后把这个json进行解析 但是这样存在一个问题 比如如果json的格式是这样的 { name:“zhangsan”, age:25 } 如果是这样的话 第一行读到的内容就是 { 显然 一个 { 并不是一个…...
Elasticsearch在liunx 中单机部署
下载配置 1、下载 官网下载地址 2、上传解压 tar -zxvf elasticsearch-XXX.tar.gz 3、新建组和用户 (elasticsearch 默认不允许root账户) #创建组 es groupadd es #新建用户 useradd ryzhang -g es 4、更改文件夹的用户权限 chown -R ryzhang …...
深入探索 HarmonyOS 的 Navigation 组件:灵活的页面管理与动态导航
在移动应用开发中,页面的跳转和导航一直是核心功能之一。对于 HarmonyOS 开发者来说,Navigation 组件提供了一个强大的工具来实现灵活的页面管理和导航体验。今天,我们将深入探讨如何使用 HarmonyOS 中的 Navigation 组件来管理页面跳转、工具…...
【CUDA】CUDA Hierarchy
【CUDA】CUDA 基本概念和 Hierarchy CUDA 编程基础:Host 和 Device 工作流程 首先简单介绍CUDA 编程的基本概念:讲解 Host(CPU)与 Device(GPU)的区别、内存管理以及 CUDA 运行时的工作机制。 Host&#x…...
28.100ASK_T113-PRO Linux+QT 显示一张照片
1.添加资源文件 2. 主要代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QImage> #include <QPixmap>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);QIm…...
GitLab使用中遇到的一些问题-记录
错误内容一 Warning: Permanently added gitlab.com (ED25519) to the list of known hosts. gitgitlab.com: Permission denied (publickey). Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. …...
【微服务】Docker
一、Docker基础 1、依赖的兼容问题:Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像Docker应用运行在容器中,使用沙箱机制,相互隔离。 2、如何解决开发、测试、生产环境有差异的问题:Docker镜像…...
【C#】书籍信息的添加、修改、查询、删除
文章目录 一、简介二、程序功能2.1 Book类属性:方法: 2.2 Program 类 三、方法:四、用户界面流程:五、程序代码六、运行效果 一、简介 简单的C#控制台应用程序,用于管理书籍信息。这个程序将允许用户添加、编辑、查看…...
Python 入门教程(2)搭建环境 | 2.4、VSCode配置Node.js运行环境
文章目录 一、VSCode配置Node.js运行环境1、软件安装2、安装Node.js插件3、配置VSCode4、创建并运行Node.js文件5、调试Node.js代码 一、VSCode配置Node.js运行环境 1、软件安装 安装下面的软件: 安装Node.js:Node.js官网 下载Node.js安装包。建议选择L…...
Spark常问面试题---项目总结
一、数据清洗,你都清洗什么?或者说 ETL 你是怎么做的? 我在这个项目主要清洗的式日志数据,日志数据传过来的json格式 去除掉无用的字段,过滤掉json格式不正确的脏数据 过滤清洗掉日志中缺少关键字段的数据ÿ…...
RMSNorm:LLM 里的归一化为什么换成了这个
本文基于昇腾CANN和昇腾NPU,围绕 ops-transformer 仓库的相关技术展开。 LayerNorm 在大模型里被 RMSNorm 替换了。LayerNorm 做了减均值再除方差,RMSNorm 只除均方根——去掉了减均值那一步。少一次 Reduce 操作,在量产推理里省掉 15-20% 的…...
瑞芯微RK3568与RK3566芯片选型指南:从接口差异到应用场景深度解析
1. 项目概述:为何要深挖这两颗“芯”?在嵌入式开发和智能硬件选型的圈子里,瑞芯微(Rockchip)的RK3568和RK3566是近两年曝光率极高的两颗“明星”芯片。很多刚接触的朋友第一眼看去,会觉得它们很像ÿ…...
为开源 AI 工具 OpenClaw 配置 Taotoken 作为其模型供应商的步骤
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为开源 AI 工具 OpenClaw 配置 Taotoken 作为其模型供应商的步骤 对于使用 OpenClaw 这类开源 AI 工具链的开发者而言,…...
Forza Painter终极指南:3分钟将任何图片变成专业车辆涂装
Forza Painter终极指南:3分钟将任何图片变成专业车辆涂装 【免费下载链接】forza-painter Import images into Forza 项目地址: https://gitcode.com/gh_mirrors/fo/forza-painter 还在为《极限竞速:地平线》系列游戏中复杂的车辆涂装设计而烦恼吗…...
还在用--v 6硬套?揭秘Midjourney水效渲染的3层隐式建模逻辑:表面张力→次表面散射→环境光遮蔽耦合
更多请点击: https://kaifayun.com 第一章:Midjourney水效果渲染的认知跃迁 传统图像生成中对液体物理特性的模拟长期依赖预设材质贴图与后期合成,而 Midjourney v6 及后续版本通过隐式神经场(Implicit Neural Field)…...
农业Agent不是“加个模型”,而是重写作业流程:3张架构图讲透农机调度、病虫害预警、供应链匹配的Agent协同范式
更多请点击: https://intelliparadigm.com 第一章:农业Agent不是“加个模型”,而是重写作业流程:3张架构图讲透农机调度、病虫害预警、供应链匹配的Agent协同范式 农业智能化的真正瓶颈,从来不在单点AI能力的强弱&…...
告别抢票焦虑:大麦网双端自动抢票系统深度解析与实战指南
告别抢票焦虑:大麦网双端自动抢票系统深度解析与实战指南 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 你是否曾在心仪演出的开票瞬间…...
精密峰值检测电路:双运放架构原理、设计与工程实践
1. 项目概述:从“是什么”到“为什么用它”在电子设计和信号处理领域,我们常常需要知道一个信号在特定时间段内的“最高点”或“最低点”。比如,你想知道麦克风采集到的声音信号最大有多响,或者一个振动传感器感受到的冲击力峰值是…...
如何用Easy Voice Toolkit轻松实现语音AI全流程:从识别到合成的完整指南
如何用Easy Voice Toolkit轻松实现语音AI全流程:从识别到合成的完整指南 【免费下载链接】Easy-Voice-Toolkit A user-friendly toolkit for voice recgonition/transcription/conversion etc. | 简单易用的语音工具箱 项目地址: https://gitcode.com/gh_mirrors/…...
微信小程序161~200
收货地址实现删除收货地址删除滑块SwipeCell自动收起调用之前的swipeCell商品管理配置商品管理分包-封装商品模块接口import http from "../utils/http"/*** description 获取商品列表数据* param {Object} param {page,limit,categoryId,category2Id}* returns Prom…...
