【Pwnedlabs】Exploit Kubernetes Overly Permissive RBAC
Exploit Kubernetes Overly Permissive RBAC
背景
贵公司受聘对新客户的数字基础设施进行渗透测试。经过初步侦察后,您发现可以访问一个凭证已被盗用的 EC2 实例。该实例可能充当了客户 Kubernetes 环境的网关。您的任务是利用这些凭证,探索潜在漏洞,并利用其 Kubernetes 设置中的弱点,最终获得其服务器的 root 级访问权限。
目标:10.1.20.179
目标与环境识别
一个演唱会购票页面
随意买一场门票并输入信息之后 会自动生成并下载一个pdf文件。pdf中包含输入的昵称信息
触发了一个报错, 我只在flask里面见过这样子的Method Not Allowed
也可能是我见得少🤣
所以我认为后端是由python flask框架起的一个http服务
由于它做了一个nginx反向代理。 我并没有在数据包或者页面返回头中找到更有效的证据来指明他是python flask应用
SSTI漏洞利用与初始立足
然后我在昵称信息表单中输入一个经典的SSTIpayload{{ 7 * 7 }}
, 然后我就如愿以偿的得到了一个经典的回显49
现在已经确定存在SSTI漏洞,利用{{lipsum.__globals__['os'].popen('id').read()}}
执行命令
建立反向Shell
目前我们处在一个pod-a
的docker容器中
容器内信息收集与横向移动
从环境变量中可以看出 该pod处于在一个k8s集群中
容器中没有kubectl
用curl下载一个kubectl的二进制文件到容器中
然后执行kubectl auth can-i --list
来看一下我们有什么权限
发现可以get/list secrets
在secrets中找到了一组用户名与密码
1 | ┌──(kali㉿kali)-[~/Desktop] |
用netstat看开放的端口貌似就只开放了一个5000端口
用curl下载一个nmap进行同网段主机发现
没有ip
命令 用ifconfig
可以看到网卡信息
namp进行主机发现发现四台存活靶机
地址 | 服务 |
---|---|
10.244.0.1 | 可能是网关 |
10.244.0.10 | 可能是节点/服务 |
10.244.0.11 | CoreDNS Pod |
10.244.0.12 | 发起扫描的pod |
代理搭建与内网渗透
用Venom将流量代理出来
建立一个socks代理
挂上代理访问http://10.244.0.10:5000
页面重定向到了登录页面
这时候试着用刚才在pod-a
中获取的账户与密码进行登录
登录进去之后有一个ping tool
一眼顶真。老套路/bin/sh ping <your input>
权限提升与集群控制
建立反向Shell,之后再拿一个kubectl到pod-b
然后执行kubectl auth can-i --list
来看一下我们有什么权限
有这么一条记录*.* [] [] [*]
这意味着你几乎拥有 集群管理员权限
因此。我们就可以创建一个恶意pod。然后从pod中逃逸出去
创建一个badpod.yaml
文件
1 |
|
创建容器之后进入容器将设备 /dev/root
挂载到 Pod 内的 /tmp/root
总结