misc(ctfshow)

  1. misc1
  2. misc2
  3. misc3
  4. misc4
  5. misc5
  6. misc6
  7. misc7
  8. misc8
  9. misc9
  10. misc10
  11. misc11
  12. misc12
  13. misc13
  14. misc14
  15. misc15
  16. misc16
  17. misc17
  18. misc18
  19. misc19
  20. misc20
  21. misc21
  22. misc22
  23. misc23
  24. misc41
  25. misc24
  26. misc25
  27. misc26
  28. misc27
  29. misc28
  30. misc29

misc1

打开图片就能看到flag

misc2

打开压缩包有一个.txt文件,用文本模式看了一下没发现什么有用的消息,用010editor打开查看16进制,发现文件头是89 50 4E 47,这是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 。

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

misc5

是一张图片,但打开是一个假flag图片,用hexeditor打开在文件末尾找到flag

misc6

这道题把flag藏在了中间,搜索一下ctfshow就可以找到

misc7

还是直接搜索就可以找到flag

misc8

用editor打开并没有搜索到ctfshow,看其他师傅博客这里是图片里面隐藏了png图片,我们可以手动分离出来或者直接使用binwalk或者foremost

misc9

跟第7题一样,用editor搜一下就能找到flag

misc10

这题要用binwalk分离

python binwalk -e xxx.png

misc11

这道题要用到一个新的工具:tweakpng

下载好软件之后,打开图片,发现这个图有两个IDAT块,把图片拖进去删除第一个IDAT数据块,然后ctrl+shift+s另存为另外一张新的png图片就出来了flag

misc12

和上题一样的思路,不过这题有30个IDAT块,先用pngdebugger跑一下

pngdebugger xxx.png

发现没有出错的IDAT块

看其他师傅博客,说要删掉前8个IDAT块

misc13

题目提示flag位置在图片末尾

先用editor看了一下文件后面隐约有flag的影子

然后看其他师傅博客说这里要每隔一段距离取一个字符,连起来就是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检测出来文件:

看样子应该是另外一张JPG图片了,手扣试试,JPG图头文件一般是FFD8

其实是有三个FFD8头的第一个头肯定是原本图片的头,第二个FFD8和右边的字符对比了一下没有JFIF开头盲猜不是,第三个就有了,直接复制FFD8到最后FFD9保存为另外一张jpg图片

也可以用dd工具分离出来

该工具是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(分析和提取图片中的隐藏信息)

发现隐藏的数据,位置处于extradata:0

将数据提取出来:zsteg -E "extradata:0" misc17.png > 1.txt

然后用binwalk分离一次1.txt,得到一个压缩包,解压之后用图片查看器打开即可看到flag

misc18

提示:flag在标题、作者、照相机和镜头型号里。

直接看图片属性就可以找到flag

misc19

提示:flag在主机上的文档名里

直接看图片属性看不出来,要用到一个linux工具:exiftool

exiftool 文件名

misc20

提示:flag在评论里

还是用exiftool

谐音,最终flag

ctfshow{c97964b1aecf06e1d79c21ddad593e42}

misc21

提示:flag在序号里

看到序列号是一串数字,我们先用hex转字符串试一下

686578285826597329
//hex(X&Ys)

应该是让我们将与xy有关的数字转为16进制,发现图片信息里有两组与XY有关的数据

如果不是整体直接转换的话,那么应该就是每段分别转hex,然后拼起来

3902939465 2371618619 1082452817 2980145261
//e8a22149 8d5c073b 4084eb51 b1a1686d

misc22

这里要使用一个新工具:MagicEXIF 直接打开即可看到flag

magicexif元数据编辑器是一款非常专业的照片magicexif元数据编辑器,该软件可以通过分析照片的元数据以及编码特征来计算图像可信度,从而判断照片是否被修改,同时还能对相机的快门次数、镜头参数、光圈档位等进行查看和编辑。

看不清楚可以截图放大看

还有一种方法是用exiftool来提取缩略图

exiftool -ThumbnailImage -b misc22.png > 123
ctfshow{dbf7d3f84b0125e833dfd3o80820a129}

misc23

提示:flag在时间里

用exiftool

发现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的样式,把它提取出来即可

ctfshow{fcbd427caf4a52f1147ab44346cd1cdd}

misc24

通过这篇博客了解一下bmp文件结构

用010editor看一下文件结构,文件头占了54个字节(0–53),文件尾的位置在675053字节处(后面两个字节是windows的补0),又因为每个像素由3个字节表示,每个字节负责控制一种颜色,分别为蓝(Blue)、绿(Green)、红(Red),所以文件真实的像素大小为(675053-53)/3=225000

这题的宽度是对的,所以正确的高度是225000/900=250

借助010editor修改高度

misc25

通过这篇博客了解一下png文件结构

提示:flag在图片下面

用TweakPNG查看图片发现图片的CRC值不对

然后借助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改一下

还需要把实际高度转换成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修改高度

注意这里的宽高在DATA模块里面修改

直接打开看不到flag,可以看预览图或用Stegsolve打开

misc29

这道题还是GIF文件,但不同的是这个文件有10帧数,看其他师傅博客说可以把所有帧的高度都改了

我们使用010editor对所有的9600都替换为FA00

然后使用stegsolve点击Analyse->Frame Browser,再翻到第8帧,就可以看到flag


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。