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 端口

六、传播阶段

根据内网探测的信息,192.168.183.130 开放了 445 端口,这大概是一个 Windows Server 服务器,先来看看存不存在 ms17-010 漏洞

发现目标机器存在 ms17-010 漏洞,并且发现目标主机的操作系统是 Windows Server 2008,那么下面就试一试

尝试利用漏洞

七、持久化和恢复阶段

未完……

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kafka知识体系

一、认识Kafka 1. kafka适用场景 消息系统&#xff1a;kafka不仅具备传统的系统解耦、流量削峰、缓冲、异步通信、可扩展性、可恢复性等功能&#xff0c;还有其他消息系统难以实现的消息顺序消费及消息回溯功能。 存储系统&#xff1a;kafka把消息持久化到磁盘上&#xff0c…

vue-cli创建项目报错:command failed: npm install --loglevel error

网上解决方法有很多&#xff0c;对于我都没用。 最后用这个方法起了作用&#xff1a; 尝试将npm源设置为HTTP&#xff0c;慎用&#xff0c;可能不安全 npm config set registry http://registry.npm.taobao.org/ 改为http就顺利创建项目了。

STL算法之sort

STL所提供的各式各样算法中&#xff0c;sort()是最复杂最庞大的一个。这个算法接受两个RandomAccessIterators(随机存取迭代器)&#xff0c;然后将区间内的所有元素以渐增方式由小到大重新排列。还有一个版本则是允许用户指定一个仿函数代替operator<作为排序标准。STL的所有…

Spring Shell如何与SpringBoot集成并快速创建命令行界面 (CLI) 应用程序

Spring Shell 介绍 Spring Shell 是一个强大的工具&#xff0c;可用于构建命令行应用程序&#xff0c;提供了简单的方式来创建和管理交互式 CLI。它适合那些希望通过命令行与 Java 应用程序进行交互的开发者&#xff0c;尤其是在需要自动化、交互式输入或与 Spring 生态系统集…

圣桥ERP queryForString.dwr SQL注入漏洞复现

0x01 产品描述: 杭州圣乔科技有限公司主要研发全套工业企业ERP系列软件产品,现在公司已经形成ERP 软件、OA办公管理、等四大系列二十小类软件产品。致力于为政府、教育、医疗卫生、文化事业、公共事业(电、水、气等)、交通、住建、应急、金融、电信运营商、企业等用户提供专…

SystemUI修改状态栏电池图标样式为横屏显示(以Android V为例)

SystemUI修改状态栏电池图标样式为横屏显示(以Android V为例) 1、概述 在15.0的系统rom产品定制化开发中&#xff0c;对于原生系统中SystemUId 状态栏的电池图标是竖着显示的&#xff0c;一般手机的电池图标都是横屏显示的 可以觉得样式挺不错的&#xff0c;所以由于产品开发…

【设计模式系列】备忘录模式(十九)

目录 一、什么是备忘录模式 二、备忘录模式的角色 三、备忘录模式的典型应用场景 四、备忘录模式在Calendar中的应用 一、什么是备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许在不暴露对象内部状态的情况下保存和恢…

简单的动态带特殊符号敏感词校验

简单的动态带特殊符号敏感词校验 敏感词之前进行了简单了解&#xff0c;使用结巴分词自带词库可以实现&#xff0c;具体参考我的如下博文 敏感词校验 此次在此基础进行了部分优化&#xff0c;优化过程本人简单记录一下&#xff0c;具体优化改造步骤如下所示 1.需求 我们公司…

AJAX三、XHR,基本使用,查询参数,数据提交,promise的三种状态,封装-简易axios-获取省份列表 / 获取地区列表 / 注册用户,天气预报

一、XMLHttpRequest基本使用 XMLHttpRequest&#xff08;XHR&#xff09;对象用于与服务器交互。 二、XMLHttpRequest-查询参数 语法: 用 & 符号分隔的键/值对列表 三、XMLHttpRequest-数据提交 核心步骤 : 1. 请求头 设置 Content-Type 2. 请求体 携带 符合要求 的数…

S4 UPA of AA :新资产会计概览

通用并行会计&#xff08;Universal Parallel Accounting&#xff09;可以支持每个独立的分类账与其他模块集成&#xff0c;UPA主要是为了支持平行评估、多货币类型、财务合并、多准则财务报告的复杂业务需求 在ML层面UPA允许根据不同的分类账规则对物料进行评估&#xff0c;并…

CMD 介绍

CMD 介绍 CMD 是 Windows 操作系统中的命令提示符&#xff08;Command Prompt&#xff09;程序&#xff0c;它是一种命令行工具&#xff0c;可以让用户通过键入命令来与计算机进行交互。 DOS: disk operating system, 磁盘操作系统. 是利用命令行来操作计算机. DOS 不是 CMD…

Hadoop生态圈框架部署 伪集群版(六)- MySQL安装配置

文章目录 前言一、MySQL安装与配置1. 安装MySQL2. 安装MySQL服务器3. 启动MySQL服务并设置开机自启动4. 修改MySQL初始密码登录5. 设置允许MySQL远程登录6. 登录MySQL 卸载1. 停止MySQL服务2. 卸载MySQL软件包3. 删除MySQL配置文件及数据目录 前言 在本文中&#xff0c;我们将…

java基础语法光速入门

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理Java的基础语法部分 适合有编程基础的人快点掌握语法使用 没学过一两门语言的话。。还是不建议看了 极致的浓缩没有一点解释 注释 单行注释 // 多行注释 /**/ 数据类型 布尔型:true false 整型:int,lon…

「Mac玩转仓颉内测版41」小学奥数篇4 - 分数加减法

本篇将通过 Python 和 Cangjie 双语解决简单的分数加减法问题&#xff0c;帮助学生理解分数的运算规则&#xff0c;并学会用编程解决数学计算问题。 关键词 小学奥数Python Cangjie分数运算 一、题目描述 编写一个程序&#xff0c;接收两个分数并计算它们的和与差。输入的分…

基于频谱处理的音频分离方法

基于频谱处理的音频分离方法 在音频处理领域&#xff0c;音频分离是一个重要的任务&#xff0c;尤其是在语音识别、音乐制作和通信等应用中。音频分离的目标是从混合信号中提取出单独的音频源。通过频谱处理进行音频分离是一种有效的方法&#xff0c;本文将介绍其基本原理、公…

力扣-图论-1【算法学习day.51】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…

工业—使用Flink处理Kafka中的数据_ChangeRecord2

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,每隔 1 分钟输出最近 3 分钟的预警次数最多的 设备,将结果存入Redis 中, key 值为

PortSwigger 原型污染

一、什么是原型污染 原型污染是一种 JavaScript 漏洞&#xff0c;它使攻击者能够向全局对象原型添加任意属性&#xff0c;然后这些属性可能被用户定义的对象继承。 二、JavaScript 原型和继承基础 1、原型 JavaScript 中的每个对象都链接到某种类型的另一个对象&#xff0c;称…

AMEYA360:上海永铭电子全新高压牛角型铝电解电容IDC3系列,助力AI服务器电源高效运转

随着数据中心和云计算的高速发展&#xff0c;AI服务器的能效要求日益提高。如何在有限空间内实现更高的功率密度和稳定的电源管理&#xff0c;成为AI服务器电源设计的一大挑战。永铭推出全新高压牛角型铝电解电容IDC3系列&#xff0c;以大容量、小尺寸的创新特性&#xff0c;为…

jmeter基础_打开1个jmeter脚本(.jmx文件)

课程大纲 方法1.菜单栏“打开” 菜单栏“文件” - “打开” &#xff08;或快捷键&#xff0c;mac为“⌘ O”&#xff09;&#xff0c;打开文件选择窗口 - 选择脚本文件&#xff0c;点击“open”&#xff0c;即可打开脚本。 方法2.工具栏“打开”图标 工具栏点击“打开”图标&…