ctfshow开始上新misc入门了,题目知识点涵盖的非常广,八神师傅tql,目前暂时出到30题,简单记录下
misc1-3
打开图片就是,其中3需要下载一个bpgviewer,百度下个就行
misc4
txt改成png就行
misc5
记事本或者010打开,文件末尾即为flag,或者strings misc5.png | grep ctfshow
misc6
记事本或者010打开,flag在文件中间,或者strings misc6.png | grep ctfshow
misc7
同上,strings misc7.jpg | grep ctfshow
misc8
同上,strings misc8.png | grep ctfshow,在photoshop:LayerName中
misc9
同上,strings misc9.png | grep ctfshow
misc 10
zlib解压最后一个idat块,代码如下
1 | import zlib |
misc 11
用tweakpng删掉第一个idat块即可
即大小为2931的这一块
misc12
与上题一样,也是删除idat块,慢慢尝试删除前八个的时候出了flag,最后剩下这些块
misc13
用tweakpng发现IEND块长度异常,正常来讲它的长度应该是0,但是这里为2,一开始不知道多的这个块有啥意思,尝试用zsteg得到了错误的答案,后来问了八神师傅,提示多的那两位是flag的位置,才恍然大悟,这里也加了混淆,即需要隔位取,所以不能直接strings出来
这里多了两位0D E1
到这个位置发现flag
随便写个脚本提取下
1 | r = '' |
misc14
图片里有两个jpg,手动提取下,定位到第三个FFD8为位置直接复制到末尾保存为新图片,即为flag
misc15
记事本010或者string就有,利用的是bmp文件头部12-15位的这个偏移量
misc16
binwalk分离,flag在DD4这个文件里,具体原理还不太清楚,好像是LZMA压缩的数据?
misc17
卡了最久的一题,太难想到了,原理也不清楚,都是后来问师傅才做出来的
首先binwalk一下可以发现一个bzip2压缩包,但是无论binwalk分解还是手动分离都是损坏的,打不开,后来解没有任何思路了
问了师傅才知道,需要先用zsteg提取数据,然后再用binwalk分离,最后得到一张png即为flag
zsteg
至于zsteg如何分离数据而不是lsb数据,也是问了师傅才知道的
zsteg -E ‘extradata:0’ misc17.png > 17.tmp
binwalk
binwalk -e出来的1F1直接就是一张png图片,就是flag了
misc18
exiftool一下就出来了
misc19
同上,flag在exif信息中
misc20
同上,flag在exif信息中,还是个中文的,注意诶是a不是i
misc21
提示flag在序列号里,所以用继续用exiftool看一下,发现序列号是串hex,提示hex(X&Ys)
刚好exif信息里还有两组XY,分开hex再合起来就是flag(一开始合起来hex的,怎么也不对,后来问了八神师傅)
1 | print('ctfshow{'+hex(3902939465)[2:]+hex(2371618619)[2:]+hex(1082452817)[2:]+hex(2980145261)[2:]+'}') |
misc22
又是直接在strings就出来了,在photoshop:LayerName中,据八神师傅说原意不是这个,不知道原本是咋做的
misc23
给了个psd文件,提示flag在时间中,再次用exiftool看一下
发现history action一栏有提示,时间戳转hex就是flag,遂将history when一栏中的4个时间转为数字再转为hex
1 | print('ctfshow{'+hex(874865822)[2:]+hex(2699237688)[2:]+hex(2156662245)[2:]+hex(460377706)[2:]+'}') |
misc24
提示flag在图片上面。一般的图片藏flag都会将flag藏在图片下面,如果图片是png,只需要将高度修改即可,然而此题给的是bmp文件,像素信息直接就是在图片的hex中,所以存在将flag藏在图片上面的可能。
打开图片属性,发现图片大小是900*150,即135000个像素,而图片本身去掉文件头后应该是675000/3=225000个像素,明显多了很多,于是猜测图片高度,发现250*900刚好等于225000个像素,将图片的高度改为250后即可得到flag
即6-9位修改位FA 00 00 00即可
misc25
随便拉长png高度即可,flag在图片下面
misc26
首先拉长图片高度,发现flag确实在图片下面,但是其中两位是图片的正确高度,脚本爆破下高度即可
1 | import os |
misc27
flag在图片下面,修改jpg高度即可,也是直接搜索150的hex值的位置就行了,无论啥图片
,应该都可以在winhex里搜宽高所代表的的hex值
misc28
flag在图片下面,修改gif的高度即可,需要注意的是,gif的每一帧都有宽高所以修改的地方不止一处
misc29
同上一题,将每一帧的高度都改掉,flag在某一帧里
misc30
将宽度改为950即可