ctfshow-MISC入门

xhxbb Lv1

前言:博客创建这么久了,是时候发点内容了。

聊聊近况:由于本人大一极度摆烂,暑假里想学点东西提升自己。整个七月份除了搭建好我的个人博客便是到处学,实在是有点操之过急了,最后也是感觉啥都没学会。总而言之,还是静下心慢慢来吧。也是先通过学习ctf拓展自己的知识面。

其实大一刚入学便了解了ctf,但也仅限于了解。

那么从现在开始吧。😊😊😊

图片篇(基础操作)

misc1

解压后即可获取flag。

misc2

解压后获得txt文本文件,打开后发现是乱码,开头显示“塒NG”直接猜测是png格式。直接修改获得flag。放入编辑器查看发现确实是PNG格式。

misc3

解压后得到bpg格式文件。搜索后得知:

BPG(Better Portable Graphics,更好的可移植图形)是一种新的图像格式。它的目的是在质量或文件大小有问题时替换jpeg图像格式。

并且需要使用查看器进行查看。(我这里使用的是bandiview)
查看后即可获得flag。

misc4

解压后得到六个.txt文件。丢进010 editor查看文件头,再分别对文件格式进行修改,六张图结合起来便得到flag。


图片篇(信息附加)

misc5

首先,拿到图片告知我”there_is_no_flag_here“.老样子丢进010 editor。拉到最下方flag便出现了。

misc6

方法同misc5,通过搜索栏搜索ctfshow关键词即可找到。

misc7

过程和第六题一模一样。😳

misc8

查看属性,放入编辑器都没发现什么,于是丢进kali,使用binwalk发现存在多个文件,再使用foremost分离得到flag。

misc9

同第六题。

misc10

同样使用binwalk。

misc11

几次尝试以后发现不行,查看wp,得知多了一个IDAT块。接下来自己尝试。

先使用pngcheck发现确实有两个IDAT块。接着放进tweakpng中删除第一个IDAT再保存,最后得出flag。

PNG 文件中的 IDAT 块通常是经过 Zlib 压缩的。每个 IDAT 块有固定的最大长度限制,一般为 65524 字节。当当前 IDAT 块存储的数据达到这个最大长度时,后续的数据就会存储到新的 IDAT 块中,新的 IDAT 块会按照顺序紧跟在前面的 IDAT 块之后,直到所有图像数据存储完毕。

在这题,第一个IDAT块有所异常,删除即可。

misc12

方法同misc11,爆出一堆IDAT块,但是要删除哪些呢,看完wp后得知删除前八个。(困惑?)

misc13

上述方法用完后发现不行,然后在编辑器中发现”ct¹f…s†hªoKw“字样。

使用脚本:

1
2
3
4
5
6
a="631A74B96685738668AA6F4B77B07B216114655336A5655433346578612534DD38EF66AB35103195381F628237BA6545347C3254647E373A64E465F136FA66F5341E3107321D665438F1333239E9616C7D"
flag=""
for i in range(0,len(a),4):
hexStr=a[i:i+2]
flag+=chr(int("0x"+hexStr,16))
print(flag)

输出flag

misc14

使用binwalk发现藏有文件,提取不出来,foremost也无法提取,这里手动提取,搜索FF D8 FF文件头。获得flag。

misc15

老样子010 editor

misc16

binwalk分离即可

misc17

没做出来,看的别人的wp。

首先,使用zsteg。得到如下:

显示有额外的3544字节在zlib流之后。

之后我们提取出来。zsteg -e extradata:0 misc17.png > flag.txt。发现文本中并没有flag

随后binwalk分离一下,最后得到flag。

misc18

题目提示flag在标题、作者、照相机和镜头型号里,考察查阅EXIF信息。

这里直接使用exiftool查看或者查看属性都能得到。

misc19

exiftool即可。

misc20

exiftool一下。comment一行中有内容:”这图片也太难看了。来自:西替爱抚秀大括号西九七九六四必一诶易西爱抚零六易一弟七九西二一弟弟诶弟五九三易四二大括号“。也就是ctfshow{c97964b1aecf06e1d79c21ddad593e42}

misc21

exiftool一下,题目提示:**flag在序号里。**有内容:”Serial Number : 686578285826597329“,这一眼不是flag,于是尝试十六进制转ASCII码得到:hex(X&Ys)。于是猜测与X,Y相关内容有关,刚好爆出的内容有。X Resolution : 3902939465;Y Resolution : 2371618619;X Position : 1082452817;Y Position : 2980145261。分别转换再拼接起来即可。

misc22

没做出来,看完wp得知是thumbnail隐写。

然后便得到一个荧光色的flag

misc23

题目提示:flag在时间里。exiftool一下。image-20250807221241627

(因提示关注到此行,然后便不知道干嘛了)
查看wp后得知:先将时间转化为时间戳。得到如下:

874865822
2699237688
2156662245
460377706

接着转为为十六进制即可得到flag。

misc41

这题蛮有意思,题目提示”H4ppy Apr1l F001’s D4y!“在编辑器中搜索F001,即可显示出flag。

图片篇(文件结构)

misc24

题目提示:”flag在图片上面“。猜测要修改高度。修改后得到flag。

misc25

依旧修改高度,但这次是png文件。

misc26

依旧修改高度。并使用脚本获取正确高度值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import binascii
import struct



crcbp = open("misc26.png", "rb").read() #打开图片
crc32frombp = int(crcbp[29:33].hex(),16) #读取图片中的CRC校验值
print(crc32frombp)

for i in range(4000): #宽度1-4000进行枚举
for j in range(4000): #高度1-4000进行枚举
data = crcbp[12:16] + \
struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
# print(crc32)
if(crc32 == crc32frombp): #计算当图片大小为i:j时的CRC校验值,与图片中的CRC比较,当相同,则图片大小已经确定
print(i, j)
print('hex:', hex(i), hex(j))
exit(0)

高度为0x25e,flag内容需结合高度。

misc27

依旧修改高度。

misc28

这次是gif图,注意要修改两处。

misc29

由于是gif图这里可以修改11处得到flag。修改完后有一帧能得到flag。

misc30

修改宽度的题。题目说正确的宽度是950,转换为十六进制是3B6.这里注意:

  • BMP格式采用小端序存储数据:低位字节在前,高位字节在后。
  • 如PNG格式采用大端序存储数据:高位字节在前,低位字节在后。

如下:

  • 标题: ctfshow-MISC入门
  • 作者: xhxbb
  • 创建于 : 2025-08-05 16:38:48
  • 更新于 : 2025-08-07 23:01:27
  • 链接: https://xhxbb1.github.io/2025/08/05/ctfshow-MISC入门/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论