当前位置: 首页 > news >正文

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 逃逸突破边界

免责声明 本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动&#xff0c;包括但不限于未经授权访问计算机系统、网络或数据。 作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何…...

残差连接,就是当某一偏导等于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 是一家德国的全球性汽车零部件供应商&#xff0c;主要为全球汽车制造商提供机电一体化系统和组件&#xff0c;涵盖车门、座椅调节系统、空调系统以及电动驱动装置等。Brose 以其高质量的创新产品闻名&#xff0c;在全球拥有多个研发和生产基地&#xff0c;是全球第五大家…...

从科举到高考,人才选拔制度的变革与发展

一、引言 在人类历史的长河中&#xff0c;人才选拔机制始终是推动社会进步与文明传承的关键环节。古代科举制度与现代高考制度&#xff0c;分别在各自的时代背景下承担着筛选人才的重任&#xff0c;二者虽皆关乎教育与人才进阶之路&#xff0c;却有着诸多本质性的区别与独特的…...

利用Docker一键发布Nginx-Tomcat-MySQL应用集群

Docker简介&#xff0c;可以看上一篇文章&#xff1a; 为什么互联网公司离不开Docker容器化&#xff0c;它到底解决了什么问题&#xff1f;-CSDN博客 Docker体系结构 docker核心就是镜像和容器&#xff1a; 镜像就是应用程序的安装文件&#xff0c;包含了所有需要的资源&…...

关于数据库数据国际化方案

方案一&#xff1a;每个表设计一个翻译表 数据库国际化的应用场景用到的比较少&#xff0c;主要用于对数据库的具体数据进行翻译&#xff0c;在需要有大量数据翻译的场景下使用&#xff0c;举个例子来说&#xff0c;力扣题目的中英文切换。参考方案可见&#xff1a; https://b…...

【系统架构设计师】高分论文:论信息系统的安全与保密设计

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 摘要正文摘要 本人所在工作单位承担了我市城乡智慧建设工程综合管理平台项目的开发工作。我有幸参与了本项目,并担任架构师一职,全面负责项目的需求分析和系统设计等工作。城乡智慧建设工程综合管理平台项目包括…...

使用Tauri创建桌面应用

当前是在 Windows 环境下 1.准备 系统依赖项 Microsoft C 构建工具WebView2 (Windows10 v1803 以上版本不用下载&#xff0c;已经默认安装了) 下载安装 Rust下载安装 Rust 需要重启终端或者系统 重新打开cmd&#xff0c;键入rustc --version&#xff0c;出现 rust 版本号&…...

【docker】docker compose多容器部署

Docker Compose 的详细讲解与实际应用 什么是 Docker Compose&#xff1f; Docker Compose 是一个工具&#xff0c;用于定义和运行多容器 Docker 应用。 通过一个 docker-compose.yml 文件&#xff0c;可以同时启动多个服务&#xff0c;简化多容器管理。 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&#xff1a;“zhangsan”&#xff0c; age&#xff1a;25 } 如果是这样的话 第一行读到的内容就是 { 显然 一个 { 并不是一个…...

Elasticsearch在liunx 中单机部署

下载配置 1、下载 官网下载地址 2、上传解压 tar -zxvf elasticsearch-XXX.tar.gz 3、新建组和用户 &#xff08;elasticsearch 默认不允许root账户&#xff09; #创建组 es groupadd es #新建用户 useradd ryzhang -g es 4、更改文件夹的用户权限 chown -R ryzhang …...

深入探索 HarmonyOS 的 Navigation 组件:灵活的页面管理与动态导航

在移动应用开发中&#xff0c;页面的跳转和导航一直是核心功能之一。对于 HarmonyOS 开发者来说&#xff0c;Navigation 组件提供了一个强大的工具来实现灵活的页面管理和导航体验。今天&#xff0c;我们将深入探讨如何使用 HarmonyOS 中的 Navigation 组件来管理页面跳转、工具…...

【CUDA】CUDA Hierarchy

【CUDA】CUDA 基本概念和 Hierarchy CUDA 编程基础&#xff1a;Host 和 Device 工作流程 首先简单介绍CUDA 编程的基本概念&#xff1a;讲解 Host&#xff08;CPU&#xff09;与 Device&#xff08;GPU&#xff09;的区别、内存管理以及 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、依赖的兼容问题&#xff1a;Docker允许开发中将应用、依赖、函数库、配置一起打包&#xff0c;形成可移植镜像Docker应用运行在容器中&#xff0c;使用沙箱机制&#xff0c;相互隔离。 2、如何解决开发、测试、生产环境有差异的问题&#xff1a;Docker镜像…...

【C#】书籍信息的添加、修改、查询、删除

文章目录 一、简介二、程序功能2.1 Book类属性&#xff1a;方法&#xff1a; 2.2 Program 类 三、方法&#xff1a;四、用户界面流程&#xff1a;五、程序代码六、运行效果 一、简介 简单的C#控制台应用程序&#xff0c;用于管理书籍信息。这个程序将允许用户添加、编辑、查看…...

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、软件安装 安装下面的软件&#xff1a; 安装Node.js&#xff1a;Node.js官网 下载Node.js安装包。建议选择L…...

Spark常问面试题---项目总结

一、数据清洗&#xff0c;你都清洗什么&#xff1f;或者说 ETL 你是怎么做的&#xff1f; 我在这个项目主要清洗的式日志数据&#xff0c;日志数据传过来的json格式 去除掉无用的字段&#xff0c;过滤掉json格式不正确的脏数据 过滤清洗掉日志中缺少关键字段的数据&#xff…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...