当前位置:   article > 正文

【CTFshow】misc入门总结_ctfshow的misc

ctfshow的misc

图片篇(基础操作)

misc1

直接看图
在这里插入图片描述

misc2

查看文件头,发现是png文件,将后缀改为png直接打开就是flag

在这里插入图片描述

misc3

下载Honeyview直接打开bmp文件

在这里插入图片描述

misc4

查看文件头,发现依次是.png、.jpg、.bmp、.gif、.tif、.riff,flag文件,刚好是每张图组合起来

在这里插入图片描述

图片篇(信息附加)

misc5-7

直接用打开010打开搜索flag相关信息得到flag

misc8

binwalk分析图片结构——>分离出含有隐藏的图片
在这里插入图片描述

misc9

直接用打开010打开搜索flag相关信息得到flag

misc10

binwalk分析图片结构——>分离出含有隐藏的zlip信息
在这里插入图片描述

misc11

提示:flag在另一张图里。

这个图有两个IDAT块,而且没有隐写其他的数据,试着把第一个IDAT块的数据删除,然后另存为一张新图片,这个过程可以手动操作,也可以使用tweakpng工具。

misc12

提示:flag在另一张图里。

和上题一样的提示,所以思路是一样的。不过这题有30个IDAT块,用PNGDebugger跑了一下,发现没有出错的IDAT块…

需要删掉前8个IDAT块,用tweakpng工具更方便

misc13

一个关键的提示:这个图片的IDEN块不是0,是有数据的,查看数据得知:

在这里插入图片描述

那0DE1的这个位置的flag不就是正确的flag了吗
隔一个16进制数取一个

脚本:

a="631A74B96685738668AA6F4B77B07B216114655336A5655433346578612534DD38EF66AB35103195381F628237BA6545347C3254647E373A64E465F136FA66F5341E3107321D665438F1333239E9616C7D"
r = ''
s=bytes.fromhex(a)
for i in range(0,len(s),2):
        r+=chr(s[i])
print(r)
#fromhex函数把一串16进制字符,每两位转换成16进制的对象
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

misc14

binwalk分析图片结构,-e解不出来,直接用dd命令分离出文件:

在这里插入图片描述

misc15

直接用打开010打开搜索flag相关信息得到flag

misc16

binwalk分析图片结构——>分离出含有隐藏的LZMA信息,直接可以打开就是flag

在这里插入图片描述

misc17

binwalk分析得出有一个bzip,但是什么都分离不出来
用zsteg试试,发现有额外隐藏的数据
steg -E “extradata:0” misc17.png > 1.txt 把隐藏的数据分离到1.txt
用binwalk分离1.txt得到flag

在这里插入图片描述

misc18-23

用 exiftool 查看图片的具体信息,有的点开属性也可以

misc21:提示:flag在序号里。
序号ASCII码转成字符:hex(X&Ys)
所以flag是信息中X和Y一段一段转成16进制再组合起来:

misc22:缩略图隐写
exiftool -ThumbnailImage -b misc22.jpg > 1.jpg //缩略图隐写

misc23:时间中的+08:00指的是时间要加8个小时,改成东八区时间

misc41

F001是突破点,这个位置有大量F001,看起来组成了某种形状,010打开图片,搜索F001,全部高亮!形状就是flag

图片篇(文件结构)

misc24-36

用tweakpng打开发现CRC校验错误,说明要改宽高
修改png,jpg,gif,bmp四种图片文件的宽高
png: 前四位是宽,后四位是高
jpg: 前两位是高,后两位是宽
bmp:前四位是宽,后四位是高,但是是倒着写
03 B6———>写成B6 03

先打开属性,确定目前宽高数据,再转换成十六进制在010中找,就很容易找到

  • 用脚本直接爆破出png,jpg正确的宽高
  • 原理就是根据CRC32算出宽高来

png

jpg

bmp

misc29:GIF有很多帧,将每一帧的高度都改高后,用Stegsolve查看,在第八帧即可发现flag

misc37

用Stegsolve查看,flag在8、14、21、31、34帧中,拼接起来即可

misc38

用APNG Disassembler来把每一帧分离出来,9、17、36、40帧中藏有flag

misc39

不同帧之间的间隔时间来隐写
提取命令:identify -format "%T " misc39.gif > 1.txt,得到的一串36和37
36换成0,37换成1,得到一串01
由于无法整除8,就7个一组

misc40

apng文件,使用工具APNG Disassembler,flag在记录详细信息的txt文件中,用脚本把flag提取出来

flag=""
for i in range(28,69): #flag内容从28位开始
    f = open('apngframe'+str(i)+'.txt')
    s = f.read()
    flag += chr(int(s.split("/")[0][6:]))
print(flag)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

misc42

用tweakpng打开图片,发现IDAT块的长度很可疑,有一部分IDAT块的长度ACILL转换为字符是ctfshow,将后面的接着转换成字符即可得到flag
在这里插入图片描述

misc43

用tweakpng打开分析一下图片,发现报了一堆错,使用pngdebugger分析,发现所有IDAT块的crc32值都是错误的
将错误的IDAT块的crc-code提取出来,拼接起来转字符串即可得到flag

misc44

用PNGDebugger打开,把信息导入到txt文件中
利用脚本把CRC OK的替换成1,CRC FAILED替换成0

misc45

转成.bmp格式后,用binwalk提取即可,考察点是png和bmp像素点的读取方式(?)

misc46

提取出GIF的详细信息
identify misc46.gif > message.txt

观察得到的信息,其中0+0、174+49、196+47这些是偏移量,用其来进行画图

坐标提取:

f = open(r"C:\Users\95235\Downloads\misc46\message.txt","r")
x = f.readlines()
f.close()

f = open(r"C:\Users\95235\Downloads\misc46\out.txt","w")
for i in x:
    f.write(i.split("+")[1])
    f.write(" ")
    f.write(i.split("+")[2][:2])
    f.write("\n")
f.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

misc47

misc48

用010打开,发现提示统计FF的数量再减去1、ctfshow{}中包含32个字符
因为flag长度是32位,所以只需要统计前32个段

0 12 11 0 7 10 13 13 9 0 9 13 0 13 6 0 10 9 2 1 0 1 10 8 11 5 12 7 2 2 3 10

再分别转换成hex

s = [0,12,11,0,7,10,13,13,9,0,9,13,0,13,6,0,10,9,2,1,0,1,10,8,11,5,12,7,2,2,3,10]
f = '0123456789abcdef'
flag = 'ctfshow{'
for i in range(len(s)):
    flag += f[s[i]]
flag += '}'
print(flag)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

misc49

把FFE后面的那个字符提取出来,再连接在一起,一共32位(),这就是flag

图片篇(颜色通道)

misc50

直接Stegsolve查看颜色通道

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号