天天看点

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

BugKu CTF(杂项篇MISC)—隐写

文章目录

  • BugKu CTF(杂项篇MISC)—隐写
  • 隐写
  • 一、工具
  • 二、解题思路
  • 三、总结

隐写

下载压缩包,解压之后是一张图片,显示BugKu。

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

一、工具

十六进制工具 010 editor 或notepad++

图片查看器 tweakpng

二、解题思路

1.先看看图片属性,啥也没发现。

2.用010 editor编辑器打开文件,看看文件头、文件尾有什么特殊的东西没有。文件头和文件尾都正常。

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

3.仔细观察010 editor编辑器下方输出位置,有报错。*ERROR: CRC Mismatch @ chunk[0]; in data: cbd6df8a; expected: c758d77d

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

CRC报错一般有几种情况,一是确实是CRC被故意篡改了,可以用010改回去。

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

二是图片的高度或宽度被更改了,需要把高度、宽度改回去。一般考点都是改高度,只要把高度改大,或者改的和宽度一样就可以了。

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

4.这道题我们分别试一下改CRC值和高度,先改CRC值。可以使用010的替换功能。

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

改完之后发现图片没什么变化。

5.然后把CRC改回去,再改下高度试试。改完高度会发现图片下方出现flag。

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结
BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

6.我们除了可以用010 editor编辑器查看图片外,还可以用tweakpng工具查看图片的CRC是否有问题。

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

三、总结

刚接触CTF的小伙伴肯定会问,你怎么知道文件里哪个字节表示高度、宽度,哪个字节表示CRC了?

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

补充知识

一个必须由文PNG图片件标识头和三个关键数据块IHDR,IDAT,IEND组成。一个PNG文件的标识头为89 50 4E 47 0D 0A 1A 0A。IHDR数据块主要描述影像的维度、色彩深度、色彩格式、压缩类型等。IDAT数据块主要用来存储影像的像素数据。IEND数据块用来标记PNG数据流结束。)

分析:在这个PNG图片中:

如下标红的为PNG文件标识头:

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

看如下图片:绿色的标识显示IHDR,这就是描述该文件属性的起始位置。根据定义格式,接下来的值代表图片的width(宽,占用4字节),Height(高,占用4字节),bit Depth(图像深度,占用1字节),Color Type(颜色类型,占用1字节),Compression method(压缩方法,占用1字节),Filter Method(过滤器方法,占用1字节),Interlace method(隔行扫描方法,占用1字节)。根据以上内容,我们看到第二行的“00 00 01 F4“,通过程序计算器发现他的十进制值是500,说明该图片宽500像素,0000014A(HEX)=420(DEC)说明该图片高420像素。接下来蓝色下划线“08 06 00 00 00”这5个字节分别代表上述其他属性。紧接着后续黄色下划线的4个字节是CRC校验值“CB D6 DF8A“。这里又有一个关键知识点,这里使用的是CRC-32位冗余校验。

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

那么我们此时可以看看以上校验的值是否准确。通过CRC在线计算(连接地址:http://www.ip33.com/crc.html),如图所示:注意标红处的选择是CRC32位冗余计算。

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

我们可以发现计算出来的CRC校验值为:C758D77D。和图片里本身的CRC校验值“CBD6DF8A “不否。那么问题则出现在IHDR数据库这一部分。那么这么多位的值我们怎么去判定到底是哪一位出了问题呢?此时可以根据物理像素尺寸数据块数据来查看,即pHYs。我们看如下图所示:第一处标红的”00 00 00 09“为物理像素尺寸数据块的长度。第二处标红的”70 48 59 73“为数据块类型标志,对应的ASCII码值等于pHYs。接下来蓝色的部分表示x轴上每米像素数量00001274和y轴上每米像素数量00001274(解题关键点)。绿色的”01“表示meter=1,单位定义为”每米“的意思,后面的绿色标识为CRC值。

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

我们发现x轴和y轴的像素应该是一样的,换句话说,这个图片的比例应该是正方形。此时我们把上述的高420像素值改为500。即”A4“改为”F4“,再次查看图片,找到flag。

最后文件的尾部特征块IEDN如图所示:

如下标红的为数据流结束标识,固定为49 45 4E 44。后面的AE 42 60 82为CRC校验码。

BugKu (杂项篇MISC)—隐写BugKu CTF(杂项篇MISC)—隐写隐写一、工具二、解题思路三、总结

以上除了IHDR和IEND数据块外,中间的部分就是IDAT数据块。

文章部分内容来自FreeBuf.COM

继续阅读