day5

发布时间 2023-07-14 21:56:09作者: CPYQY

一、[闽盾杯 2021]DNS协议分析

1.打开流量,过滤dns类型,发现一些类似于base64的编码,并且有规律的出现

image

2.全部提取,ZmxhZ3tlNjYyYWMxNTRjYTM3NmUxYzAwMWVlOGJiZTgxMzE4Yn0K,base64在线解码

image

二、云

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

image

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⻓期驻留在内存中)

image

3.去网站解密一下,发现这段token就是集成了账户等登录信息。在token中我们可以看到namespace :dolphin-ctf(后续命令中需要使用到)那么使用这个token和kubectl就可以去远程访问,详细用法可以看

https://www.mankier.com/1/kubectl
image

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证书的验证。

image

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

get configmaps 表示获取configmaps资源列表,-o json 表示以json格式输出结果

6.得到配置信息,发现了MYSQL_PASSWORD和MYSQL_DATABASE,得到数据库名和密码,主机地址就是dasctf-4-cloud-hacking.cloud.eson.ninja,使用navicat连,flag就在数据库中

image