带你走入CTF之路-杂项MISC(二) – 作者:凯信特安全团队

在通过上一节我们例举的《这是一张单纯的图片》题目,我们了解到关于文件标识头和字符编码特征的内容,以及遇到图片后的基本思路。那么我们接下来看一下《隐写》这道题。意在深入了解PNG图片文件结构数据。

1、隐写

这道题需要我们下载一个2.rar的压缩包。

image.png解压后我们可以看到一张图片,如图所示:

image.png

思路:

1、 在看到隐写类的图片时候,初期我们首先考虑图片的属性。

2、 考虑图片中色素、色调、色位以及16进制码等。

3、 考虑图片中的数据块。

可以从以上3个思路着手。

过程:那么我们首先可以查看一下这个图片的属性等,未找到相关的敏感信息。

image.png

接着我们可以通过winhex工具来查看16进制码。看一看图片本身存在什么异常没有。

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

分析:在这个PNG图片中:

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

image.png

看如下图片:绿色的标识显示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位冗余校验

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

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

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

image.png

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

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

image.png

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

至此,解题结束。通过这道题我们可以记录一下几个知识点并深入掌握:

1、 掌握PNG文件标识头和文件尾。

2、 掌握PNG图片文件结构中16进制位所对应的属性和值。

3、 了解CRC32位冗余计算的校验机制。

来源:freebuf.com 2020-02-22 18:04:32 by: 凯信特安全团队

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论