TSCTF-J 2025 Misc部分 WP

卢森堡的秘密

考点:LSB隐写

预期难度:1/10

赛后难度:1/10

  • 使用zsteg直接出
  • 或者是使用StegSolveR0,B0,G0通道勾选上就能看到FLAG

TSCTF-J{Th3_sEcre7_0f_L$B!}

Meow

考点:docx文件结构+变表base64+开源项目的理解

预期难度:2/10

赛后难度:4/10

这题真的不是在考眼力。。。或许错的真是我吧,我不该把fake flag设得这么真。。。

知识点补充

DOCX文档是Microsoft Word使用的一种文件扩展名,其基于Office Open XML标准的压缩文件格式

你可以理解为,所有docx文档都能作为压缩包打开。你可以将docx的后缀名直接改成zip后,就可以打开看到它的文件结构。这就是第一个提示:猫猫在docx内部好像放了些什么的含义

作为压缩包打开后,在[Content_Types].xml中我们能找到被更换的base64表:a-zA-z0-9+/=

后面的所有提示,都在指向一个开源项目:https://github.com/Glavo/MeowLang,其作者的视频在BiliBili平台上有6.4w的播放量,我并不觉得找到这个项目是一个很困难的事情。而且也不需要任何的逆向,我们只需要理解几个关键点就好了;或者直接把GitHub上的代码clone下来运行一下。

可以得到如下输出:vfndveyTsNSk mv9bBq== xZrFq2fu x01LB3Dnztb3 iseHFq==

CyberChef里解一下变表base64就可以得到flag

TSCTF-J{1_Am_4_CaT_MeowMe0w!!!}

BadFile

考点:恶意文件审计

预期难度:5/10

赛后难度:3/10

本题改编自DCIC2025。

原题中txt给了4000份,pdf给了300份,wav(原题应为几乎无声的mp3)给了200份,png给了300分,且并没有提供恶意文件的数量。

我真的已经把题改得很友好了。

非预期

一份一份看,一份一份听。

预期解

可以预知的是,txt与wav中很难存在恶意代码,所以为隐私泄露的问题。手动开出第一份txt后发现差不多是手机号,身份证,住址这类的信息。

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

def find_txt_with_digits(folder_path):
    matched_files = []
    for filename in os.listdir(folder_path):
        if filename.endswith('.txt'):
            file_path = os.path.join(folder_path, filename)
            
            try:
                with open(file_path, 'r', encoding='utf-8') as file:
                    for line in file:
                        if re.search(r'\d', line):  # 使用正则表达式查找数字
                            matched_files.append(file_path)
                            break
            except Exception as e:
                print(f"处理文件 {filename} 时出错: {str(e)}")
    
    return matched_files

if __name__ == "__main__":
    target_folder = "./txt"
    result_files = find_txt_with_digits(target_folder)
    if result_files:
        print("包含数字的txt文件:")
        for file_path in result_files:
            print(f"{os.path.basename(file_path)}")
    else:
        print("未找到包含数字的txt文件")

wav转文字同样用上述方法

1
2
3
4
5
6
7
8
import os
import whisper
model = whisper.load_model("base")
filelist = os.listdir('wav')
for filename in filelist:
filepath = './wav/' + filename
result = model.transcribe(filepath, language='zh')
print(filepath,result["text"])

pdf中的恶意代码通常存在在js代码之中。我们可以用如下命令转成txt查找JavaScript字段

1
mkdir -p txt && for f in *.pdf; do strings "$f" > "txt/${f%.pdf}.txt"; done

最终结果

1
3WQlwSaj.txt_dubZ3AZn.txt_nhlbNxGL.txt_qtFyaGkZ.txt_wlBUCOeg.txt_2JuiKL42.wav_4UjLqeRF.wav_Ew24ldS2.wav_HjRtD6f3.wav_RtUwEgj1.wav_8YmxZRca.pdf_Z8P4DHre.pdf_mFU1SdVp.pdf_w9V1ZDEd.pdf_xdBqKtxe.pdf

flag:TSCTF-J{0b4a2a6431f6b94b3c1d3d50d0a45aea}

EzFix

考点:Win11下OSData导致的蓝屏修复+已知明文攻击

预期难度:5/10

赛后难度:8/10

知识点补充

压缩包已知明文攻击

非预期

直接用 DiskGenius 挂载,然后查找两段flag

预期解

蓝屏原因见视频

第一段flag跟着视频就能找出来,记得别直接删了就行。

第二段flag用到了已知明文攻击,打开压缩包看到 ZipCrypto 很明显提示了明文攻击,而且桌面上的useless.png和压缩包中的useless.png完全一致。这点可以通过将图片压缩成一个zip文件对比CRC值发现。

我们可以使用bkcrack协助我们。

方法一

将桌面上的useless.png压缩成压缩包useless.zip

1
2
bkcrack -C flag_part2.zip -c useless.png -P useless.zip -p useless.png
bkcrack -C flag_part2.zip -k "刚刚得到的三段密钥" -U out.zip 123

随后用123解压out.zip即可

方法二

如果题目中没有给我们桌面上的useless.png我们也能借助png文件头的明文来解

1
2
3
echo 89504E470D0A1A0A0000000D49484452 | xxd -r -ps > png_header
bkcrack -C flag_part2.zip -c useless.png -p png_header -o 0
bkcrack -C flag_part2.zip -c useless.png -k e9ac551e 24d21c15 097eb913 -U out.zip 123

TSCTF-J{w0w_Y0u_4rE_9ood_4t_B50D!!!Wdf9u}

ListLoadMaster

考点:Python中不同List创建方式的区别

预期难度:7/10

赛后难度:7/10

知识点补充

【Python】三个看似一样的列表,占用内存空间竟然不一样多?

题目要求如下:在通过题目安全检测的前提下,分别生成三个元素个数相同,但是所占内存空间大小不同的一维和二维列表

一个可能的解:

1
2
3
4
5
6
7
8
>> lst = [0] * 5
>> lst = [0,0,0,0,0]
>> lst = [0 for _ in range(5)]
Challenge 1 passed!
>> lst = [[0] * 5]
>> lst = [[0],[0],[0],[0],[0]]
>> lst = [[0] for _ in range(5)]
Challenge 2 passed!

PyJail

考点:生成器栈帧逃逸

预期难度:4/10

赛后难度:8/10

题目改编自 2025 Mini-L CTF

本意考察信息搜集能力,准备赛后面试问知识点理解的。在短时间内学会还是比较困难,所以在面试后考察。

直接看官方的吧。

Licensed under CC BY-NC-SA 4.0
网站总访客数:Loading
网站总访问量:Loading
使用 Hugo 构建
主题 StackJimmy 设计