misc1
打开图片就能看到flag
misc2
打开压缩包有一个.txt文件,用文本模式看了一下没发现什么有用的消息,用010editor打开查看16进制,发现文件头是89 50 4E 47,这是png的文件头
/203313.png)
所以把文件后缀改为.png,得到flag
还可以用python来提取图片中的文字
import pytesseract
from PIL import Image
image=Image.open('C:/Users/534545/Desktop/misc2/misc2.png')
text=pytesseract.image_to_string(image)
print(text)
misc3
压缩包里有个bpg格式的文件,bpg就是一种图片的后缀,可以用很多图片查看器查看
这里尝试下载一个图片查看器 Honeyview 。
/234055.png)
misc4
有6个txt文件,可以通过文件头来判断文件的类型
JPEG (jpg) 文件头:FF D8 FF 文件尾:FF D9
PNG (png),文件头:89504E47
Windows Bitmap (bmp), 文件头:424D 文件尾:
GIF (gif),文件头:47494638
XML (xml),文件头:3C3F786D6C
HTML (html),文件头:68746D6C3E
MS Word/Excel (xls.or.doc),文件头:D0CF11E0
MS Access (mdb),文件头:5374616E64617264204A
Adobe Acrobat (pdf),文件头:255044462D312E
Windows Password (pwl),文件头:E3828596
ZIP Archive (zip),文件头:504B0304
RAR Archive (rar),文件头:52617221
Wave (wav),文件头:57415645
AVI (avi),文件头:41564920
TIFF (tif), 文件头:49492A00 文件尾:
依次改为png,jpg,bmp,gif,tif,webp
/202139.png)
misc5
是一张图片,但打开是一个假flag图片,用hexeditor打开在文件末尾找到flag
/203409.png)
misc6
这道题把flag藏在了中间,搜索一下ctfshow就可以找到
/204502.png)
misc7
还是直接搜索就可以找到flag
misc8
用editor打开并没有搜索到ctfshow,看其他师傅博客这里是图片里面隐藏了png图片,我们可以手动分离出来或者直接使用binwalk或者foremost
/212036.png)
misc9
跟第7题一样,用editor搜一下就能找到flag
misc10
这题要用binwalk分离
python binwalk -e xxx.png
/201505.png)
misc11
这道题要用到一个新的工具:tweakpng
下载好软件之后,打开图片,发现这个图有两个IDAT块,把图片拖进去删除第一个IDAT数据块,然后ctrl+shift+s另存为另外一张新的png图片就出来了flag
/204811.png)
misc12
和上题一样的思路,不过这题有30个IDAT块,先用pngdebugger跑一下
pngdebugger xxx.png
发现没有出错的IDAT块
/211026.png)
看其他师傅博客,说要删掉前8个IDAT块
misc13
题目提示flag位置在图片末尾
先用editor看了一下文件后面隐约有flag的影子
/212926.png)
然后看其他师傅博客说这里要每隔一段距离取一个字符,连起来就是flag
text="631A74B96685738668AA6F4B77B07B216114655336A5655434343678632534DD38EF66AB37103395391F628237BA6545627C3254647E313A64E465F136FA65F5341E3107321D665438F1333239E9616C7D"
flag=""
for i in range(0,len(text),4):
x=int(text[i:i+2],16)
flag+=chr(x)
print(flag)
misc14
用foremost或binwalk分离不出来,用binwalk检测出来文件:
/215958.png)
看样子应该是另外一张JPG图片了,手扣试试,JPG图头文件一般是FFD8
其实是有三个FFD8头的第一个头肯定是原本图片的头,第二个FFD8和右边的字符对比了一下没有JFIF开头盲猜不是,第三个就有了,直接复制FFD8到最后FFD9保存为另外一张jpg图片
/220809.png)
也可以用dd工具分离出来
/223956.png)
该工具是linux下的自动化分离工具,用在当题目文件包含其他文件时,可以把其他文件分离出来的一款工具。
dd if=源文件名 bs=1 skip=开始分离的字节数 of=目标文件名
参数说明
if=file #输入文件名,缺省为标准输入
of=file #输出文件名,缺省为标准输出
bs=bytes #同时设置读写块的大小为bytes,可代替ibs和obs。
skip=blocks #从输入文件开头跳过blocks个块后再开始复制。
misc15
提示:flag被跳过去了
用editor即可找到flag
BMP格式的文件头里有4位字节叫作偏移量
,是用来指定从哪个字节开始为实际图像数据用的。这题就是利用增大这个偏移量
的方法,把冗余数据塞在了BMP头和图像数据中间的地方。因为这段数据不会被识别
,所以可以说是跳过去了。
misc16
和第10题一样,用binwalk分离出flag
misc17
这里又学到一种工具:zsteg(分析和提取图片中的隐藏信息)
/214731.png)
发现隐藏的数据,位置处于extradata:0
将数据提取出来:zsteg -E "extradata:0" misc17.png > 1.txt
然后用binwalk分离一次1.txt,得到一个压缩包,解压之后用图片查看器打开即可看到flag
/220032.png)
misc18
提示:flag在标题、作者、照相机和镜头型号里。
直接看图片属性就可以找到flag
misc19
提示:flag在主机上的文档名里
直接看图片属性看不出来,要用到一个linux工具:exiftool
exiftool 文件名
/222755.png)
misc20
提示:flag在评论里
还是用exiftool
/223220.png)
谐音,最终flag
ctfshow{c97964b1aecf06e1d79c21ddad593e42}
misc21
提示:flag在序号里
/202727.png)
看到序列号是一串数字,我们先用hex转字符串试一下
686578285826597329
//hex(X&Ys)
应该是让我们将与xy有关的数字转为16进制,发现图片信息里有两组与XY有关的数据
如果不是整体直接转换的话,那么应该就是每段分别转hex,然后拼起来
3902939465 2371618619 1082452817 2980145261
//e8a22149 8d5c073b 4084eb51 b1a1686d
misc22
这里要使用一个新工具:MagicEXIF 直接打开即可看到flag
。
magicexif元数据编辑器是一款非常专业的照片magicexif元数据编辑器,该软件可以通过分析照片的元数据以及编码特征来计算图像可信度,从而判断照片是否被修改,同时还能对相机的快门次数、镜头参数、光圈档位等进行查看和编辑。
/195035.png)
看不清楚可以截图放大看
还有一种方法是用exiftool来提取缩略图
exiftool -ThumbnailImage -b misc22.png > 123
/202748.png)
ctfshow{dbf7d3f84b0125e833dfd3o80820a129}
misc23
提示:flag在时间里
用exiftool
/204243.png)
发现history Action里面有提示,意思是先转换时间戳,然后再把10进制转换成16进制
这里利用在线网站获取时间戳
874865822 2699237688 2156662245 460377706
然后根据上面的经验把这些数字转换成字符串用Python的hex()函数,代码如下
print('ctf{'+hex(874865822)[2:]+hex(2699237688)[2:]+hex(2156662245)[2:]+hex(460377706)[2:]+'}')
misc41
这道题要根据提示:**H4ppy Apr1l F001's D4y!
**中的F001来查找
使用editor打开图片搜索F001可以看到ctfshow的样式,把它提取出来即可
/215343.png)
ctfshow{fcbd427caf4a52f1147ab44346cd1cdd}
misc24
通过这篇博客了解一下bmp文件结构
用010editor看一下文件结构,文件头占了54个字节(0–53),文件尾的位置在675053字节处(后面两个字节是windows的补0),又因为每个像素由3个字节表示,每个字节负责控制一种颜色,分别为蓝(Blue)、绿(Green)、红(Red),所以文件真实的像素大小为(675053-53)/3=225000
这题的宽度是对的,所以正确的高度是225000/900=250
借助010editor修改高度
/194733.png)
misc25
通过这篇博客了解一下png文件结构
提示:flag在图片下面
用TweakPNG查看图片发现图片的CRC值不对
/200155.png)
然后借助010editor的png.bt模板,可以查看图片二进制数据,也就能和上题一样简单修改图片数据
这道题还要对crc进行爆破:
import binascii
import struct
crcbp = open("C:/Users/32572/Desktop/misc25/misc25.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)
得到图片正确的宽度和高度是900和250
misc26
提示:flag还是在图片下面,但到底有多下面?
用上面的脚本跑出来是900 606
用010editor改一下
/204647.png)
还需要把实际高度转换成16进制
ctfshow{94aef1+True height(hex) of this picture+087a7ccf2e28e742efd704c}
ctfshow{94aef125e087a7ccf2e28e742efd704c}
misc27
通过这篇文章了解一下jpg文件结构
https://cloud.tencent.com/developer/article/1427939
https://www.cnblogs.com/bandy/p/4956086.html
这关也是修改高度,可以借助010editor来修改,稍微改个大点的值就可以看到flag
misc28
通过这篇文章了解一下GIF文件结构
还是借助010editor修改高度
/213308.png)
注意这里的宽高在DATA模块里面修改
直接打开看不到flag,可以看预览图或用Stegsolve打开
/214624.png)
misc29
这道题还是GIF文件,但不同的是这个文件有10帧数,看其他师傅博客说可以把所有帧的高度都改了
我们使用010editor对所有的9600都替换为FA00
然后使用stegsolve点击Analyse->Frame Browser,再翻到第8帧,就可以看到flag
/223313.png)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。