CTF MISC图片隐写简单题学习思路总结(持续更新)

系列文章目录

第一篇文章:
CTF Crypto简单题学习思路总结(持续更新)


前言

在MISC里面图片隐写也是非常常见的题,有简单题,也有难题,但一般不会只出现图片隐写,有时候会结合密码学等出为综合题,在这我就简单记录一下我遇到的图片隐写的简单题的解题方法和步骤,便于我自己回忆复习,要是有错误,还请各位大佬们指教,若是有侵犯您的权利,联系我我会删除这篇文章

一、JPG类隐写

1.1 JPG文件末尾添加字符串

这个比较难联想,估计得变成类似判断文件隐写的三板斧的习惯。解决办法也简单,将JPG文件放入WinHex或者010Editor里面,找到JPG的固定文件尾“FF D9”,然后看有没有其他字符。
在这里插入图片描述
上图明显还有下一步,这里的一个“=”暴露了这是一个base64

1.2 JPG文件中添加字符串

1.1和1.2其实都是利用了JPG的结构中可以放置一些冗余字符来达到隐写的目的,JPG文件结构如下:

SOI:FF D8 //图片起始
APP0:0xFF E0 //标记号
APP0 SIZE:1D 23 //当前标记的长度
JEIF Flag:JFIF //JFIF标识
VERSION://版本号
ATTRIBUTION://长宽、DPI等信息
DQT:0xFFDB //Define Quantization Table,定义量化表
SOF0:0xFFC0 //Start of Frame,帧图像开始
DHT:0xFFC4 //Define Huffman Table,定义哈夫曼表
SOS:0xFFDA //Start of Scan,扫描开始 12字节
压缩数据
EOI:FF D9 //图片结束
手敲的我眼都花了

标记码的高字节固定为0xFF,标记码之间有冗余字节。如果在标记码之间插入隐写,不会影响图片打开(这是图片隐写的一个常见限制,因为一旦无法正常打开就相当于提示做题的人图片的文件结构做了手脚,比如后面的PNG隐写中的一个改高度就会在Kali中无法正常打开PNG而露馅),能够达到隐藏数据的效果。
但需要注意的是,并不是所有的标记码之间都能隐写数据,FF C0作为帧图像开始的地方,如果在这后面隐写,可能会破坏图像的帧图像,导致图片无法正常打开。
在这里插入图片描述
这种明文的flag有一个偷懒的办法,在010editor里面直接CTRL+F搜索flag或key,但是要是像1.1里面加密后搜索大法就不行了

1.3 图片文件分离

其实这是一个综合类的题,既可以用ZIP当载体,也可以用JPG当载体。这里一个文件分离三板斧(思维定势不要学啊):
(1)首先将文件放到Kali里面,然后用file指令查看文件类型,若是文件损坏则修补文件头之类的修复文件
在这里插入图片描述
(2)binwalk:直接在终端binwalk+文件名,要是简单的话(PNG另说啊,PNG会识别出一个Zlib文件,这个也有点东西),binwalk会直接返回文件是有几个文件拼接的
在这里插入图片描述
(3)foremost:foremost 文件名 -o 输出目录直接拆分拼接文件,解决完成
在这里插入图片描述
在这里插入图片描述
当然这里还可以继续接zip爆破,那就是后话了
当然上述只是签到题这样的简单题适用,其他复杂的题可能会加一些其他的步骤

1.4 JSteg&&JPHide&&OutGuess&&F5

为什么把这几个隐写放在一块,是因为有一个比较方便的工具Stegdetect,Stegdetect可以探测上述几种隐写方式,在Windows下输入指令即可探测,若是探测不出来,可适当增加敏感度
在这里插入图片描述
探测到JPHide隐写,可以使用JPHSwin解JPHide,但是这个难点就是在找隐写的密码。
在这里插入图片描述
———————————————————2022.11.3 10:56更新——————————————————
有意思的是,Stegdetect似乎加大灵敏度之后会误判各种jpg为JPHide隐写,所以在题目没有提示密码前谨慎对待检测结果

二、PNG类隐写

2.1 IHDR隐写

这个比较好识别,当在Windows下png图片可以被打开,但是在Kali下会提示CRC错误,在010Editor里面也会提示CRC32错误,这是提示了我们其实这张PNG图片修改了高度,一般还原PNG高度之后就可以直接看到FLAG了,重点就是如何获取正确的CRC或者获得正确的高度
下面可以用脚本通过已有的CRC32值爆破原本的图片高度值:

在这里插入代码片

获得正确的高度之后,在WinHex或010Eidtor修改对应的位置就可以得到正确高度的图片就可以看到FLAG了

2.2 IDAT隐写

这个比较少见,PNG的数据压缩后存储到IDAT块,并且只有存满才能存到下一个IDAT块,这里就有可能看到猫腻,就是有IDAT数据块没有存满,但是出现了数据块后面的新块,之后对没有存满的IDAT块后的那一个IDAT块进行Zlib解压缩,之后在对数据进行其他的处理

三、GIF类隐写

3.1 基于时间轴的隐写

3.2 基于空间轴的隐写

3.3 Fireworks图层隐写

四、其他类别隐写

4.1 双图对比

这个识别的特征是题目给出了两张差不多一样的图,这时候要考虑对比一下两图,这时候可以使用软件或者脚本
—————————————————2022.11.3 7:08更新——————————————————
我估计我写的太简单了,我看到有百度搜索双图对比来看这篇文章的,所以应该让他们失望了,我这里稍微写一下为啥之前的文章双图对比写的这么简短,因为是我看的那本入门书双图对比的题太复杂了,不是简单的两张图叠加,而是叠加后再提出文件解压要写脚本bulabula之类的,好烦的说,这次在bugku看题的时候遇到了一个比较适合的题,我就在这稍微写一些步骤
这个题难点不在双图对比,而是提取双图,因此那部分我就不详细描述了,看详细描述可以看我写的bugku MISC的简单思路
首先我们看到分解图片后产生了两张差不多的图片,因此考虑双图对比
在这里插入图片描述
然后打开图片隐写神器Stegsolve,然后打开第一张图片(PS:我在b站听课时曾听到过图片叠放顺序不同会导致结果不同,可能会看不到有效信息,所以要注意图片打开顺序)
在这里插入图片描述
然后点击Analysis->Image Combiner
在这里插入图片描述

然后打开第二张图片
在这里插入图片描述
在这里插入图片描述
我们看到软件左上角提示了两张图片的叠加方式,而软件下方界面有左右两个按键,那自然就是快活的遍历啦
在这里插入图片描述
这是最简单的双图,还有更复杂的等我稍微有时间再稍微介绍

4.2 LSB隐写

这个多用在一些无损压缩或无压缩的图片上,比如PNG、BMP,在这里,PNG可以使用stegsolve
在这里插入图片描述
然后点击<>切换模式看是否存在线索
在这里插入图片描述
然后在Red发现二维码
当然stegsolve还有一种解题方式
在这里插入图片描述
上图中我们切换了所有模式并没有发现有用的信息,于是使用StegSolve中的Data Extract模块查看RGB的通道,看其16进制和ASCII是否存在线索
在这里插入图片描述

在这里插入图片描述
这里其实看出题人是否想要题目变难,如果仅仅是将flag隐藏在LSB之中,那么我们可以使用Kali中的zsteg偷懒直接分析看看是否存在flag,但是出题人要是出的难的话则需要stegsolve提取16进制转换成文件得到下一步线索,比如上面这个题,我们多试RGB几次就可以发现
在这里插入图片描述
这里的“PK”是典型的压缩文件头,因此我们需要提取出十六进制文件然后保存为ZIP
在Kali中使用zsteg如下图:
在这里插入图片描述

4.3 EXIF隐写

这个就很隐蔽了,因为EXIF没什么特征识别,只能培养拿到图片看一下属性的习惯
在这里插入图片描述
当然有一些出题人不会简单的在属性中写上FLAG,我们可以利用exiftool工具查看

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超大青花鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值