题源:https://ctf.show

部分解题参考: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

https://uuzdaisuki.com/2017/05/29/ctf%E4%B8%AD%E5%B8%B8%E8%A7%81%E7%9A%84%E9%9A%90%E5%86%99%E6%9C%AF/

misc1

解压缩,图片内容即 flag

misc2

得到的文件是txt格式,打开乱码,利用010editor查看十六进制编码,发现是png文件头

文件后缀改为png即可得到flag

image-20230409115506865

常见文件头

misc3

bpg图片,windows自带图片查看器不支持,利用honeyview打开

misc4

对比文件头格式即可

1.txt:png格式

image-20230410142841600

以此类推:

2.txt:jpg格式

3.txt:bmp格式

4.txt:gif格式

5.txt:tiff格式

6.txt:webp格式

misc5

打开图片提示 there is no flag here

查看十六进制编码,flag 隐藏在最后一行

image-20230410152804319

misc6

打开提示没有 flag

查看十六进制编码,使用查找功能,搜索 ctf

image-20230410153241099

注意,查找模式改为 Text

image-20230410153311226

misc7

同上

misc8

打开提示flag不存在,实际上,该图片中隐写了另一张图片

在kali中使用binwalk扫描该文件,发现是两张图片

binwalk misc8.png

image-20230410181614636

使用foremost分离文件

foremost misc8.png -o output

在output文件夹中,有audit.txt和png文件夹

audit.txt中包含了原文件信息

image-20230410181347824

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

image-20230410181315108

binwalk介绍:https://www.cnblogs.com/M0x1n/p/binwalk.html

foremost介绍:https://www.secpulse.com/archives/196849.html

常用于文件分离

原理是根据文件头、文件尾进行分离

misc9

以十六进制方式打开,查找ctf

misc10

使用binwalk扫描png文件,发现该文件包含一个png文件和两个zlib文件

image-20230410221217558

尝试使用binwalk -e misc10.png --run-as=root,分离该文件

分离结果有一个看上去像文本格式的文件,打开得到flag

image-20230410221441145

binwalk -e 用于分离文件,其中 -e 可以同时解压 zlib 文件

根据大佬的writeup题解,可以使用 strings *|grep ctfshow 命令来查找ctfshow字符串,不需要手动打开文件检查

misc11

png 隐写中的 IDAT 块隐写,需要了解 png 的文件结构

使用 010editor 或 tweakpng 工具打开图片

image-20230718213135583

发现两个 IDAT 块,奇怪的是第一个 IDAT 块并没有写满 65524 长度,所以第二个是人为加入的

把第一个 IDAT 块删除,再另存为新的图片,得到 flag

参考:https://www.jianshu.com/p/4077cf500f0e

misc12

原理与 misc11 类似

使用 010editor 打开图片,发现有非常多的 IDAT 块

image-20230718225631137

解法一

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

image-20230718225613487

使用 tweakpng 删除七个(实测是前八个)异常块,另存图片得到 flag

解法二

使用 tweakpng 合并所有 IDAT 块,在 kali 中使用 binwalk 扫描合并后的图片

image-20230718232407607

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

image-20230718232352321

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

image-20230718232516594

misc13

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

image-20230719170838840

观察四个字符串,可以猜想每隔一个字符进行提取得到正确结果

使用 ctrl+shift+c 复制十六进制数据,但这些数据包含空格和换行,利用 cyberchef 处理一下

image-20230719172908603

使用 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 图片

image-20230719175055370

使用命令分离,注意加上类型 -D=jpeg,得到 flag

binwalk -e misc14.jpg --run-as=root -D=jpeg

misc15

010editor 打开,一眼 flag

misc16

binwalk 分离文件即可

misc17

本题稍微复杂,需要用到新工具 zsteg,用于检测 png 隐写数据

binwalk 扫描文件,发现是一个 png 图片加上一个 bzip2 压缩文件

image-20230719222326907

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

image-20230719222418069

注意解压 bzip2 文件是 tar -jxvfj 代表 bz2,参考 tar 命令的使用

这时候改变思路,使用 zsteg 检测原来的 png 文件中的隐写数据(不是 bzip2 文件)

image-20230719222747889

发现有一段隐藏数据 extradata:0

zsteg 分离隐藏数据,保存到 1

image-20230719222956323

打开该文件,但仍然没有 flag

继续使用 binwalk 扫描文件,发现还藏着一个 bzip2 文件

image-20230719223050716

binwalk 分离,最终得到 flag

misc18

图片右键属性,标题、作者、照相机、镜头

misc19

010editor 打开,前后各一半 flag

misc20

新工具 exiftool

可交换图像文件格式常被简称为Exif(Exchangeable image file format),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。Exif 可以被附加在 JPEG、TIFF、RIFF 等文件之中,为其增加有关数码相机拍摄信息的内容和缩略图或图像处理软件的一些版本信息

image-20230720153504883

人话翻译成 flag 即可

misc21

题目提示在序号里

exiftool 查看该图片 exif 信息

image-20230720155113060

序列号十六进制转换为 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]

image-20230720155953894

参考:https://stackoverflow.com/questions/509211/how-slicing-in-python-works

misc22

缩略图隐写

解法一

exiftool 查看图片,发现一行数据 Thumbnail Image (缩略图)

image-20230720162151123

根据提示使用 -b 选项进行提取

exiftool misc22.jpg -b -ThumbnailImage > 1234.jpg

打开 1234.jpg 即可看到 flag

解法二

使用 Win 系统下的 MagicExif 工具查看

misc23

exiftool 查看 psd 文件

image-20230720163310969

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

image-20230720165355339

小细节,注意取消勾选 Treat as UTC,此时会自动转换成 UTC 时间(输入时间是北京时间,比 UTC 时间快 8 小时)

再编写程序转换成十六进制,得到 flag

print(hex(874865822)[2:] + hex(2699237688)[2:] + hex(2156662245)[2:] + hex(460377706)[2:]) 

misc41(愚人节)

image-20230720171830058

010editor 打开,查找十六进制 F0 01

只能说,好活

image-20230720171923605