TGCTF 2025 - Misc - WriteUp
碎碎念
也是很开心能参加杭师大的新生赛啊,这次比赛的体验感也是非常不错,巩固知识点的同时也学到了一些新的知识点(还抢了个osint一血嘿嘿),希望以后再接再厉捏
简单签到,关注:”杭师大网安“谢谢喵🐱
知识点省流
公众号签到
WP
谜底就在谜面上
where it is(osint) (一血)
知识点省流
图寻
知识点省流
将照片丢给谷歌,第一个就是我们要找的内容,点进去对应的页面
发现其实是一个卖房的网站,里面有具体的地址和地图,框起来的那个港墘
就是答案
也可以在谷歌地图找一下这个具体的地址,也能找到
next is the end
知识点省流
脚本小子
WP
解压得到一个目录,目录内还有目录,一直延伸,所以写个脚本一直读到最后的文件内容即可
import os
def find_deepest_txt_file(root_dir):
deepest_path = ''
max_depth = -1
txt_file_path = ''
for current_dir, dirs, files in os.walk(root_dir):
depth = current_dir.count(os.sep)
if depth > max_depth and any(f.endswith('.txt') for f in files):
max_depth = depth
deepest_path = current_dir
# 只读取第一个 .txt 文件(如果有多个可以改成循环)
for f in files:
if f.endswith('.txt'):
txt_file_path = os.path.join(current_dir, f)
break
if txt_file_path:
print(f'找到的最深层 .txt 文件路径是:\n{txt_file_path}\n')
with open(txt_file_path, 'r', encoding='utf-8') as file:
content = file.read()
print('文件内容如下:\n')
print(content)
else:
print('没有找到 .txt 文件')
if __name__ == '__main__':
root_dir = 'next_or_end/' # 可修改为你的起始目录
find_deepest_txt_file(root_dir)
最后得到
你的运气是好是坏?
知识点省流
就跟题目意思一样 看你运气
WP
纯搞抽象,答案是114514
,就是纯猜
这是啥o_o
知识点省流
gif间帧隐写+汉信码
WP
提取gif里面每张图片的间隔然后转成ascii值即可
处理一下丢给厨子↓
TeamGipsy&ctfer
知识点省流
简单的ubuntu取证
WP
可以先用任意取证工具读取虚拟机中的文件(这边用的ufs),可以查到root目录下的.bash_history文件中的内容,看到root用户开启了两个docker容器,且服务为mysql,不难猜到flag在容器中
用vmware打开虚拟机,进入recovery mode中直接使用root账户的命令行(在csdn里搜搜怎么进救援模式就好),然后启动两个docker容器,进入容器中的mysql里查找数据即可
进去后docker开启容器然后进去登mysql查表即可
ez_zip
知识点省流
爆破+明文攻击+压缩包结构修复
WP
第一层,先直接爆破得到密码为20250412
第二层,注意到两层里都包含了一个sh512文档,那么猜测第二层里面的内容是第一层的sh512文档内容的sh512加密,加密后保存文件大小及哈希值一致,遂确定是明文攻击,用archpr进行攻击即可
第三层,攻击成功后得到一个压缩包,但是已损坏且crc检验失败,应该是要修复一下压缩包
经过反复确认,确定压缩包是用bandzip压缩的(正好我也是用的这个),所以自己写一个flag.txt文档,然后用bandzip压缩后,通过010逐一比对数据恢复内容即可,最后恢复出来的结构如下↓(修复的部分包括文件名字长度、压缩方式、crc等)
修复完成后解压压缩包得到flag
你能发现图中的秘密吗?
知识点省流
邻近像素等距隐写+lsb隐写+png图IDAT块隐写+pdf图层多通道隐写
WP
一共有三个附件
第一个附件考的是图中图——邻近像素等距隐写+lsb隐写,得到的图片中放大可以看到有很多等距排列的像素点,可以写脚本提取出里面的图片,然后用zsteg分析图片可以得到后半段flag,但因为cming师傅说有问题遂没有继续处理
第二个附件考的是lsb隐写+png图IDAT块隐写:
给的图片stegsolve看到red0通道有内容,分析得到压缩包密码
解压得到两张图片,其中一张图片有第二段flag
另一张图片用010分析发现最后有一个长度不正常的IDAT块,并且用zsteg可以分析出一个extradata,是zlib数据,提取出来后就是这一段IDAT块数据,
在其基础上拼接上png头尾,然后爆破正确宽度后得到正确的图片后找到第一段flag
# 赖智谦
# 文件创建时间:2025/1/7 23:20
import struct
file = "xxx.png"
with open(file, 'rb') as f:
all_bin = f.read()
for i in range(100, 2000):
f1 = open('./qwq/'+str(i) + ".png", "wb")
pic = all_bin[0:16] + struct.pack('>i', i) + all_bin[20:-1] # 16到20B的内容为宽度
f1.write(pic)
f1.close()
print(i)
第三个附件考的是lsb隐写+png图IDAT块隐写+pdf文件多通道隐写:
与第二个附件大体相同,唯一不同的是压缩包中的两个png图片变成了一个png图片和一个pdf文件,将pdf文件丢进ps中,会发现里面其实有两个通道,其中一个就是flag2(把图层打开)