DASCTF 2024暑期挑战赛 Misc部分WP
C3ngH Lv3

png_master

PNG文件结构-维基百科

  • IDAT块是储存图像数据的块,在这个块中存放在图像真正的数据信息,IDAT 块只有当上一个块充满(正常length最大65524)时,才会继续一个新的块
  • 完整的图像数据由一个单独的zlib datastream表示,它储存在一个IDAT块中
  • 一个png文件中无论有多少个IDAT区块,在IDAT块中只会出现一个zlib
  • 789C在png文件中为zlib的标志位
  • 一个zlib数据块只有一个标志位,即只会出现一次789C

flag第一段藏在png文件末尾,base64解码后获得DASCTF{2fd9e9ff-e27

image

binwalk和zsteg都会提示png后有额外块,也可以使用pngcheck -v检查每个IDAT块是否有错误

image

image

在010中把有问题的IDAT块复制,找一张png图片,取其文件头尾,将IDAT块复制出,作为一张新的图片,但因为宽高不知,用Puzzle Solver进行宽高爆破,得到宽高是500*500,获得flag a19131f86216}

image

StegSlove中可以看到Alpha通道有东西

image

尝试后可以找到中间段flag d-5405-c5f5-

image

EZ_zip

压缩包文件结构

直接解压会报错,010打开模板报错,发现解压文件长度不对,可以看到320.zip长度应该为7(文件长度要加后缀长度),修改为7,要将文件头和目录区长度都修改

image

解压后提示CRC校验错误,参照着DirEntry改动record段,可以发现是解压方法被改成了store,跟压缩方法对不上,修改解压方式

image

image

image

修改后可以正常进行解压得到320.zip,查看压缩文件注释可以得到密码的提示just a byte,密码为一个字节,可以使用python进行爆破。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pyzipper
import os
for i in range(320,0,-1):
zip_filename = str(i) + ".zip"
zf = pyzipper.AESZipFile(zip_filename, 'r', compression=pyzipper.ZIP_LZMA, encryption=pyzipper.WZ_AES)
for j in range(0,0xff+1):
password = j.to_bytes(length=1, byteorder='big')
zf.setpassword(password)
try:
zf.extractall()
zf.close()
os.remove(str(i) + ".zip")
break
except:
pass

解压得到一个txt,提示加密方法为AES-ECB,并提示key可能在前面的过程中就出现了

image

联想到前面解压密码是字节形式,通过打印解压密码发现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pyzipper
import os
key = b''
for i in range(320,0,-1):
zip_filename = str(i) + ".zip"
zf = pyzipper.AESZipFile(zip_filename, 'r', compression=pyzipper.ZIP_LZMA, encryption=pyzipper.WZ_AES)
for j in range(0,0xff+1):
password = j.to_bytes(length=1, byteorder='big')
zf.setpassword(password)
try:
zf.extractall()
key += password
zf.close()
os.remove(str(i) + ".zip")
break
except:
pass
print(key[::-1].hex())

c64e5e2225444a9da66b0f28ad718f798cffa70a48124ec5873a610c5899bb11c64e5e2225444a9da66b0f28ad718f798cffa70a48124ec5873a610c5899bb11c64e5e2225444a9da66b0f28ad718f798cffa70a48124ec5873a610c5899bb11c64e5e2225444a9da66b0f28ad718f798cffa70a48124ec5873a610c5899bb11c64e5e2225444a9da66b0f28ad718f798cffa70a48124ec5873a610c5899bb11c64e5e2225444a9da66b0f28ad718f798cffa70a48124ec5873a610c5899bb11c64e5e2225444a9da66b0f28ad718f798cffa70a48124ec5873a610c5899bb11c64e5e2225444a9da66b0f28ad718f798cffa70a48124ec5873a610c5899bb11c64e5e2225444a9da66b0f28ad718f798cffa70a48124ec5873a610c5899bb11c64e5e2225444a9da66b0f28ad718f798cffa70a48124ec5873a610c5899bb11

是循环的一个64位字符,将其当作key解密AES得到flag

image

ServerMeM

题面信息如下

公司的服务器遭受了黑客的攻击,经过勘察黑客为维持权限留下了后门,我们获取到了服务器的内存文件,请你分析黑客留下的痕迹

下载附件并解压得到:out.lime、System.map

在WSL中用以下命令搜索一下得到Linux内核的版本号,因此很明显就是Linux内存取证了

strings mem | grep -i ‘Linux version’ | uniq

image

本题提供两种解法,第一种是常规的通过制作Linux的符号文件来进行取证,另一种就是直接分析内存中的可疑文件

解法一

Linux内核版本信息如下:

Linux version 5.4.27 (root@localhost.localdomain) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)) #1 SMP Sun May 26 03:37:06 EDT 2024

解法二

直接在strings的结果中搜索 ”.tar.gz” 后缀的文件,发现有一个S3rCr3t.tar.gz

image

知道了文件名后直接在010中搜索,得到了openssl AES加密后的密文(以Salted开头)

还有openssl的具体版本:1.0.2k

image

用CyberChef提取,注意后面的注释不要一起提取出来

image

继续往下查看,可以找到 openssl 加密的密钥:P@ssW0rdddd

image

然后只要安装openssl-1.0.2-k,使用得到的密钥解密即可

具体安装步骤如下,编译完成后openssl可执行文件在apps目录下

wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz

tar -xzvf openssl-1.0.2k.tar.gz

cd openssl-1.0.2k.tar.gz

./config --prefix=/usr/

make

使用以下命令解密即可得到flag:DASCTF{c086cd55-b86a-4ee6-8933-c8bee578148a}

./openssl-1.0.2k/apps/openssl enc -d -aes256 -in download.bin -out flag.tar.gz -k P@ssW0rdddd

ez_wav

image

打开key.grc

image

可知key文件经过如上流程变成look.txt文件。我们需要根据这个流程逆回key文件

信号源——》xor->数据类型转换->相乘一个常数->写入

下面的Vector Source提供的一个脉冲信号

exp如下

image

010打开后得到密码 good_job

打开flag.grc

image

如果我们想要抵消载波的影响,那么就需要给他相乘一个相反的波形,下面是AM解调过程

image

如果我们想要抵消载波的影响,那么就需要给他相乘一个相反的波形,下面是AM解调过程

image

如果我们想要抵消载波的影响,那么就需要给他相乘一个相反的波形,下面是AM解调过程

image

听flag即可

 评论
评论插件加载失败
正在加载评论插件
总字数 80.2k 访客数 访问量