春秋杯2023冬季赛MISC

谁偷吃了我的外卖

下载附件是一个图片,发现最后有一个压缩包提取出来,解压压缩包需要密码,先打开压缩包观察一下

img

得到了注释

img

可能是用户后面的字母依此拼接起来,将-换成/接着base64解密

写一个脚本提取最后四个字母

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
import zipfile
import re
import os

def read_characters_between_underscore_and_chinese(zip_file_path):
result = ""
with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
# 获取压缩包内的文件列表
file_list = zip_ref.namelist()
file_list = [file_name for file_name in file_list if not "flag" in file_name]

file_list.sort(key=lambda x: int(re.search(r'(\d+)', x).group(0)) if re.search(r'(\d+)', x) else float('inf'))
# 使用正则表达式匹配下划线和中文字符之间的四个字符
pattern = re.compile(r'_([^_\u4e00-\u9fa5]{4})')
for file_name in file_list:
match = pattern.search(file_name)
if match:
characters_between_underscore_and_chinese = match.group(1)
print(f"File: {file_name}, Characters: {characters_between_underscore_and_chinese}")
result=result+str(characters_between_underscore_and_chinese)
return result
# 替换 'your_zip_file.zip' 为实际的压缩包文件路径
zip_file_path = "F:\\CTF\\2024COMPLETE\\1\\春秋杯\\misc\\谁偷吃了我的外卖\\out\\外卖箱.zip"
result=read_characters_between_underscore_and_chinese(zip_file_path)
with open("combinations.txt","w") as file:
file.write(result)

将-替换成/

1
2
3
4
5
with open("combinations.txt","r") as file:
result=file.read()
result=result.replace("-","/")
with open("combinations.txt", "w") as file1:
file1.write(result)

最后先去把得到的解密一下,发现可能是压缩包,然后去看一下压缩包的前面的16进制base64加密,得到了前四个字符,解密之后下载得到的压缩包。

解压之后得到了前半段flag

flag{W1sh_y0u_AaaAaaaa

还有一张叫钥匙的图片

img

按照图片的操作去压缩相应的文件,再去明文攻击外卖箱,可以破解出外卖箱

得到

img

将字符串逆序

1
2
3
4
with open("F:\\CTF\\2024COMPLETE\\1\\春秋杯\\misc\\谁偷吃了我的外卖\\out\\外卖箱_decrypted\\外卖箱\\flag\\txt.galf","r") as file:
result=file.read()
result=result[::-1]
print(result)

得到后半段flag

aaaaaaa_w0nderfu1_CTF_journe9}

最后的flag:flag{W1sh_y0u_AaaAaaaaaaaaaaa_w0nderfu1_CTF_journe9}

modules

CVE-2023-51385

找到一篇文章https://blog.csdn.net/weixin_46944519/article/details/135249657

大致思路是在git仓库建一个子模块

然后修改.gitmodules文件

img

去调用仓库下的shell脚本并运行,目录结构如下

img

img

之后用服务器监听就行

img

1
flag{11e04278-5e1a-474f-8455-834a6889c6e0}

明文混淆

根据题目明文混淆,猜测是明文攻击和webshell混淆

先去网上找LICENSE.txt文件的明文

img

找到第一行作为明文

1
GNU GENERAL PUBLIC LICENSE

进行明文攻击

img

得到密钥解密shell2.php

img

解密脚本

1
2
3
4
5
6
7
8
9
10
<?php
$O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");
$O00O0O=$O00OO0[3].$O00OO0[6].$O00OO0[33].$O00OO0[30];
$O0OO00=$O00OO0[33].$O00OO0[10].$O00OO0[24].$O00OO0[10].$O00OO0[24];
$OO0O00=$O0OO00[0].$O00OO0[18].$O00OO0[3].$O0OO00[0].$O0OO00[1].$O00OO0[24];
$OO0000=$O00OO0[7].$O00OO0[13];$O00O0O.=$O00OO0[22].$O00OO0[36].$O00OO0[29].$O00OO0[26].$O00OO0[30]. $O00OO0[32].$O00OO0[35].$O00OO0[26].$O00OO0[30];
$O0O000="uSqLyCjwWpZHhiKmfFGVTBaNrYoIzlegxJMbRDUEAkQctnvsdOPXiZvuTagfcHbXYheWMyKNlLwSjoCnrtABxOQDsJpdkPmIzGEVRUFqFJ9fwXkebqbYDaYGAWtibWxYRKpCoWyrblo0q2sto29PbZBGNlLGRyQ4AtOgsPSesa9LpdsEDyRpUXseNdV4Rp5rR3m4sdRFIGHOI2tnbPtlSKz2lGHbAGHNwgy5NPbNNPz4NWC5NrL0IWSdmpd9FZIHeZP7nkC/FB==";
print '?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000)));
print gzinflate(base64_decode('U0gtS8zRcFCJD/APDolWT8tJTK8uNswt8DGOrzIsiHfIS4kvNzYzzUj1yVFUVKxVj9W0trcDAA=='))
?>

img

flag{s1mpL3_z1p_@nd_w365heLl!!!}


春秋杯2023冬季赛MISC
http://www.qetx.top/posts/51360/
作者
Qetx.Jul.27
发布于
2024年1月25日
许可协议