首页 > 其他分享 >Docker 逃逸突破边界

Docker 逃逸突破边界

时间:2024-12-08 14:31:57浏览次数:6  
标签:容器 边界 宿主机 漏洞 逃逸 马子 服务器 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,那么下面就试一试

尝试利用漏洞

七、持久化和恢复阶段

未完……

标签:容器,边界,宿主机,漏洞,逃逸,马子,服务器,Docker
From: https://blog.csdn.net/m0_74285177/article/details/144151331

相关文章

  • 【Docker】创建Docker并部署Web站点
    要在服务器上创建Docker容器,并在其中部署站点,你可以按照以下步骤操作。我们将以Flask应用为例来说明如何完成这一过程。1.准备工作确保你的服务器已经安装了Docker。如果没有,请根据官方文档安装:Docker安装指南2.创建Flask应用的Dockerfile假设你已经有了一个Fla......
  • 【mac】docker安装单节点elasticsearch
    【mac】docker安装单节点elastcsearch前言本文通过实操记录macbookM1pro上安装elasticsearch和kibana7.9.0的详细过程安装elasticsearch1、拉取dicker镜像dockerpullelasticsearch:7.9.1镜像拉取完成2、创建网络构建elasticsearch和kinbana的局域网,方便......
  • CentOS Docker 及 Docker Engine-Community 安装
    CentOSDocker安装Docker支持以下的64位CentOS版本:CentOS7CentOS8更高版本…使用官方安装脚本自动安装安装命令如下:curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun手动安装卸载旧版本较旧的Docker版本称为docker或docker-eng......
  • 【用于医学图像分割的轻量级边界感知Transformer】
    代码:BATFormer发表时间:2023发表期刊:IEEETMI这篇论文介绍了一种新的Transformer架构,称为BATFormer(Boundary-AwareLightweightTransformer),旨在改进医学图像分割的效率和效果。目标解决现有问题:传统的卷积神经网络(CNNs)由于感受野有限,在处理需要长距离依赖关系的任务时......
  • Docker图形化页面,DockerUI安装+使用
    公众号:泷羽Sec-尘宇安全前言DockerUI是一个易于使用且轻量级的docker管理工具。通过Web界面的操作,它方便不熟悉Docker指令的用户更快地使用Docker。方便后期的构建、管理并维护同时,它是完全开源和免费的。DockerUI具有易于使用的界面。它可以是用户不需要记住d......
  • 内网加载 Docker 镜像以及使用 Flask 封装接口
    Author:ACatSmilingSince:2024-11-23内网机加载Docker镜像,并使用Flask封装接口。此步骤针对内网机,首先,上传打包好的基础镜像文件到服务器,然后加载。[root@zeloud~]#dockerload-isimilar.tar9853575bc4f9:Loadinglayer[==================================......
  • ubuntu docker镜像制作swram集群部署java项目
    1,window安装docker工具,安装git工具docker下载地址:docker.com安装完成后启动docker,设置镜像源{ "builder":{  "gc":{   "defaultKeepStorage":"20GB",   "enabled":true  } }, "experimental":true, &......
  • RabbirMQ 使用Docker部署,SpingBoot整合!!!
    一、Docker部署RabbitMQ并挂载相关数据卷拉取镜像#拉取RabbitMQ镜像(该镜像包括了RabbitMQ以及用于管理的管理插件(RabbitMQManagementPlugin))dockerpullrabbitmq:management创建文件夹mkdir-p/dockerVolume/rabbitmq/{config,logs,data}启动RabbitMQ容......
  • docker部署常用服务
    Docker部署常用服务1、docker部署mysql1.1查找mysql镜像dockerserachmysql1.2拉取镜像dockerpullmysql:5.71.3创建用于挂载的数据卷mkdir-p/data/mysql/{conf,data,logs}1.4准备配置文件vi/data/mysql/conf/my.cnf[mysql]default-character-set=utf8mb4[m......
  • jenkins+gitea+docker实现cicd
    dockercompose启动使用docker快速启动一个jenkins+gitea实现cicd,方便又快捷启动后访问8081初始化gitea,访问jenkins初始化jenkins即可只给出了基本的启动配置,具体的gitea对接到jenkins没空写,感兴趣的可以留言,人多的话可以更新一期完整的配置jenkins和gitea的compose.yam......