【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

总结








