DASCTF Apr.2023 X SU战队2023开局之战

CPYQY / 2023-05-13 / 原文

一、7里香

1.得到三个文件,首先看210.zip,真加密,爆破得到210的密码为J4y,209的密码为Jay,再接下来208的密码为J4y,直接猜测是zip套娃,偶数包密码为J4y,奇数包密码为Jay,写个脚本直接爆破

点击查看代码
import io
import zipfile


with open("210.zip", "rb") as f:
    data = f.read()

all_files_processed = False


count = 0
pwds = ["J4y", "Jay"]
while True:
    with zipfile.ZipFile(io.BytesIO(data), "r") as zf:
        for i in zf.filelist:
            print(i.filename)
            data = io.BytesIO(zf.read(i.filename, pwd=pwds[count % 2].encode()))
            if zipfile.is_zipfile(data):
                data = zf.read(i.filename, pwd=pwds[count % 2].encode())
            else:
                all_files_processed = True
                with open(i.filename, "wb") as f:
                    f.write(zf.read(i.filename, pwd=pwds[count % 2].encode()))
        count += 1

        if all_files_processed:
            break

image

2.得到qlx.txt,都是英文,看了下位数没有问题,翻译一下意思就是说“Ge9ian最喜欢的歌的名字的拼音小写字母会作为加密容器的密码”,然后就开始找密码。回去看hint.txt和mp3,txt的内容发现是周杰伦《暗号》的歌词,在开头提示mp3的2分10秒有解密提示,然后暗号是tpyrcarev。txt放入kali中看一眼,发现存在零宽度隐写,mp3无法正常打开。

image

3.网站去解一下,得到隐藏内容,说This is not only a hint, but also a keyfile.,那就根据前面的猜测,mp3中还藏有另外一个文件(因为无法正常播放),猜测之前的tpyrcarev是一个共军或者密钥,很容易就想到了veracrypt(倒过来)

image

4.使用veracrypt挂载,发现需要密码,就想到了zip的qlx.txt中提示的,需要最喜欢的歌名的小写,百度一下,专辑一共十首,根据Ge9ian,猜测密码就是搁浅,但是直接挂载,输入密码是无法解开的,要使用hint.txt作为密钥文件。

image
image

5.在挂载磁盘中发现了一个像素明显有问题的bmp,010打开,可以清晰的看到在bmp的文件头后的字节数据有明显的特点,每隔两个字节就是两个FF,并且49 44 33 04明显是mp3的文件头,删掉头直接写脚本提取

image

点击查看代码
with open("40.bmp","rb") as f:
    data = f.read()
data1 = bytearray()
for i in range(0,len(data), 4):
    data1.extend(data[i: i + 2])
with open("./1.mp3","wb") as f1:
    f1.write(data1)

6.得到1.mp3,可以正常播放,010打开在AA和FF两字节的交界处发现一段规律编码

image

7.base64在线解密,得到flag

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