部分解题参考:https://blog.csdn.net/weixin_52497013/article/details/121749003
https://blog.csdn.net/m0_58030673/article/details/128810101
https://www.cnblogs.com/xinssblog/p/15879465.html
misc1
解压缩,图片内容即 flag
misc2
得到的文件是txt格式,打开乱码,利用010editor查看十六进制编码,发现是png文件头
文件后缀改为png即可得到flag

misc3
bpg图片,windows自带图片查看器不支持,利用honeyview打开
misc4
对比文件头格式即可
1.txt:png格式

以此类推:
2.txt:jpg格式
3.txt:bmp格式
4.txt:gif格式
5.txt:tiff格式
6.txt:webp格式
misc5
打开图片提示 there is no flag here
查看十六进制编码,flag 隐藏在最后一行

misc6
打开提示没有 flag
查看十六进制编码,使用查找功能,搜索 ctf

注意,查找模式改为 Text

misc7
同上
misc8
打开提示flag不存在,实际上,该图片中隐写了另一张图片
在kali中使用binwalk扫描该文件,发现是两张图片
binwalk misc8.png

使用foremost分离文件
foremost misc8.png -o output
在output文件夹中,有audit.txt和png文件夹
audit.txt中包含了原文件信息

png文件夹中有两张png图片,第二张为flag

foremost介绍:https://www.secpulse.com/archives/196849.html
常用于文件分离
原理是根据文件头、文件尾进行分离
misc9
以十六进制方式打开,查找ctf
misc10
使用binwalk扫描png文件,发现该文件包含一个png文件和两个zlib文件

尝试使用binwalk -e misc10.png --run-as=root,分离该文件
分离结果有一个看上去像文本格式的文件,打开得到flag

binwalk -e用于分离文件,其中-e可以同时解压 zlib 文件
根据大佬的writeup题解,可以使用
strings *|grep ctfshow命令来查找ctfshow字符串,不需要手动打开文件检查
misc11
png 隐写中的 IDAT 块隐写,需要了解 png 的文件结构
使用 010editor 或 tweakpng 工具打开图片

发现两个 IDAT 块,奇怪的是第一个 IDAT 块并没有写满 65524 长度,所以第二个是人为加入的
把第一个 IDAT 块删除,再另存为新的图片,得到 flag
参考:https://www.jianshu.com/p/4077cf500f0e
misc12
原理与 misc11 类似
使用 010editor 打开图片,发现有非常多的 IDAT 块

解法一
在 kali 中使用 pngcheck 扫描该图片,发现前七个 IDAT 块异常

使用 tweakpng 删除七个(实测是前八个)异常块,另存图片得到 flag
解法二
使用 tweakpng 合并所有 IDAT 块,在 kali 中使用 binwalk 扫描合并后的图片

同样是两个文件,根据十六进制地址得到偏移值

发现前八个 IDAT 块大小加起来正好符合,删除掉

misc13
使用 010editor 打开图片,利用正则表达式(抄chatgpt的)搜索含有ctfshow{}的字符串,得到四个结果

观察四个字符串,可以猜想每隔一个字符进行提取得到正确结果
使用 ctrl+shift+c 复制十六进制数据,但这些数据包含空格和换行,利用 cyberchef 处理一下

使用 python 脚本,每隔一个字符提取内容
r = ''
s=bytes.fromhex('631a74b96685738668aa6f4b77b07b213114655333a5655432346578642534dd38ef66ab35103195381f628237ba6545347c3254367e373a64e465f131fa63f5341e3107321d615438f1333239e9616c7d')
for i in range(0,len(s),2):
try:
r+=chr(s[i])
except:
pass
print(r)
ctfshow{1e3e2ed48f518b7e4267de1c412a839a}
以此类推,得到四个备选结果,分别提交,有一个是对的
misc14
使用 binwalk 扫描,发现含有两张 jpg 图片

使用命令分离,注意加上类型 -D=jpeg,得到 flag
binwalk -e misc14.jpg --run-as=root -D=jpeg
misc15
010editor 打开,一眼 flag
misc16
binwalk 分离文件即可
misc17
本题稍微复杂,需要用到新工具 zsteg,用于检测 png 隐写数据
binwalk 扫描文件,发现是一个 png 图片加上一个 bzip2 压缩文件

binwalk 分离文件,得到 bzip2 压缩包,但是该压缩包不能正常解压

注意解压 bzip2 文件是
tar -jxvf,j代表 bz2,参考 tar 命令的使用
这时候改变思路,使用 zsteg 检测原来的 png 文件中的隐写数据(不是 bzip2 文件)

发现有一段隐藏数据 extradata:0
zsteg 分离隐藏数据,保存到 1

打开该文件,但仍然没有 flag
继续使用 binwalk 扫描文件,发现还藏着一个 bzip2 文件

binwalk 分离,最终得到 flag
misc18
图片右键属性,标题、作者、照相机、镜头
misc19
010editor 打开,前后各一半 flag
misc20
新工具 exiftool
可交换图像文件格式常被简称为
Exif(Exchangeable image file format),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。Exif 可以被附加在JPEG、TIFF、RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和缩略图或图像处理软件的一些版本信息

人话翻译成 flag 即可
misc21
题目提示在序号里
exiftool 查看该图片 exif 信息

序列号十六进制转换为 UTF8 字符串,得到 hex(X&Ys)
意思是,上面两组 X 和 Y 是十进制,需要转换为十六进制,并进行拼接
编写程序转换即可得到 flag
print(hex(3902939465)[2:] + hex(2371618619)[2:] + hex(1082452817)[2:] + hex(2980145261)[2:])
python 中
hex()函数用于将10进制整数转换成16进制,以字符串形式表示
[2:] 是 python 中的切片,意思是从 0 起,取第 2 个到末尾的字符,即
0x舍弃
[start:end:step]
参考:https://stackoverflow.com/questions/509211/how-slicing-in-python-works
misc22
缩略图隐写
解法一
exiftool 查看图片,发现一行数据 Thumbnail Image (缩略图)

根据提示使用 -b 选项进行提取
exiftool misc22.jpg -b -ThumbnailImage > 1234.jpg
打开 1234.jpg 即可看到 flag
解法二
使用 Win 系统下的 MagicExif 工具查看
misc23
exiftool 查看 psd 文件

根据提示,先将日期转换成时间戳,再从十进制转换为十六进制

小细节,注意取消勾选 Treat as UTC,此时会自动转换成 UTC 时间(输入时间是北京时间,比 UTC 时间快 8 小时)
再编写程序转换成十六进制,得到 flag
print(hex(874865822)[2:] + hex(2699237688)[2:] + hex(2156662245)[2:] + hex(460377706)[2:])
misc41(愚人节)

010editor 打开,查找十六进制 F0 01
只能说,好活

- Post link: http://example.com/2023/07/14/Misc%E5%85%A5%E9%97%A8-%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C%E4%B8%8E%E4%BF%A1%E6%81%AF%E9%99%84%E5%8A%A0/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.
