CTF — 图像隐写三板斧

简介: CTF — 图像隐写三板斧

CTF — 图像隐写三板斧

这几天做CTF比赛相关的题目,每天总结一篇与大家分享,本人对CTF也算是个初学者,通过一些学习感觉收获还是很多的。学会了一些工具软件的使用和相关知识的原理。今天继续分享图片隐写,图像隐写类题目的特点:考法多样,思路清奇,工具众多。先分享“第一板斧”的解题套路。

声明:本博文只是分享知识,如果有人利用此技巧去做违法违规的事情,本人概不负责!
图像隐写“三板斧”中的每一“板斧”均对应着若干工具:

  • 第一板斧:010 Editor、strings
  • 第二板斧:StegSolve、zsteg
  • 第三板斧:binwalk、foremost

第一板斧的目的是发现插入隐藏,主要使用工具010 Editor和Linux系统下的strings命令完成。这两个工具是同样功效,使用不分先后。推荐使用010 Editor,因为利用其自带模板解析后的结果,可以快速发现所有的前置插入隐写和追加插入隐写。前置插入隐写如下图虚线红框所示:

image.png
下面来看追加插入的例子。

【例题】welc0me.jpg

【题目来源】2017央企大赛

【题目描述】找到文件中隐藏的信息

【解题思路】从文件后缀可以看出这是JPG文件,但是图片不能打开。这里提醒一下:图像能否打开和图像是否存在隐写没有必然联系。建议初学者在解决图像隐写题目时,优先采用“三板斧”方法。按照第一板斧的步骤,现在010 Editor中打开文件,打开后会弹出报错信息,这是因为图像损坏导致模板解析错误,这类报错可能暗示图像中存在追加插入隐写。如下图底部箭头所指所示:

image.png

观察解析结果,如下图所示,在文件末尾有字符串,利用Base64解码后得到flag{gr3at0faLLtime}。

image.png

通过第一板斧可以发现所有较为明显的插入隐藏。如果在图像中没有发现插入隐藏,就需要使用第二板斧来发现替换隐藏,主要是针对LSB隐写。

在第二板斧中,要用到两个工具:StegSolve和zsteg,使用时先用StegSolve再用steg。StegSolve被称为“隐写神器”,很多图像隐写题目都会用到这个工具。它是一个jar文件,需要提前安装并配置好JRE才能运行。这里提供一下[JDK下载链接][https://www.oracle.com/java/technologies/downloads/]。配置好,双击StegSolve.jar就可以正常打开;如果双击后不能运行,则可以在命令行下通过JRE中的java.exe调用jar文件。如下所示:

java -jar StegSolve.jar

打开StegSolve后不能直接拖入图片,需要通过“File”菜单中的“Open”来选择文件后,才能看到图片,如下图所示:

image.png

在程序下方还可以看到“<”和“>”两个按钮,多次单击“>”按钮,就能看到如下图所示的情况。在程序左上角可以看到“Red plane 7”,其含义是提取所有像素红色通道像素值的最高位组成的黑白图像(在StegSolve中,默认每个通道为8比特),“Red plane 0”代表红色通道像素值的最低位,每个通道都能构成8个不同的位平面。持续单击“>”按钮,不仅能看到Alpha、Red、Green和Blue共4个通道32个位平面,还能看到经过不同处理的其他图像。因此“<”和“>”按钮是第二板斧中的重要功能。

image.png

单击上图中的“Analyse”(分析)按钮,出现如下图所示的项目,

image.png

从上到下依次为:

  • File Format:文件格式及属性信息。
  • Data Extract:数据提取,主要用于提取比特并实现排列组合。
  • Stereogram Solver:立体图水平偏移控制,将图片水平偏移后再与原图叠加。
  • Frame Browser:帧浏览器,主要是对GIF之类的动图进行分解,可以查看每一帧的图像。
  • Image Combiner:拼图,图片拼接。

“Data Extract”是StegSolve中的重要功能,单击该项会打开如下图所示的界面:

image.png

左侧的“Bit Planes”是各通道以及可以选择的比特,“0”代表最低比特,“7”代表最高比特。右侧的“Order Settings”用于设置提取时的顺序,Exract By为按row(行)或column(列)提取像素;“Bit Order”中的MSB First指最高位是第一位,LSB First指最低位是第一位;“Bit Plane Order”用于设置RGB通道的顺序。选择好所有顺序后,单击“Preview”按钮,就能在窗口中预览提取的信息。

注意:当我们用第二板斧打开StegSolve后,应优先使用“<”和“>”两个按钮,目的是发现通过LSB隐写的图像。如果没有任何发现,再考虑使用StegSolve的其他功能。

【例题】dandelion.png

【题目来源】2016华山杯

【题目描述】找到文件中隐藏的信息

【解题思路】利用第一板斧,将文件拖入010 Editor,在文件头和文件尾都没有发现插入隐藏;再采用第二板斧,用StegSolve打开文件,单击“>”按钮,如下图所示:

image.png

在蓝色通道最低位通过LSB隐写看到一个二维码。这个二位码并不是标准二维码,这时我们采用离线工具QR Research来处理。双击CQR.exe打开工具,单击鼠标按钮选择二维码区域,即可得到二维码扫描结果,再进行Base32解码,就得到flag:flag_Xd{hSh_ctf:U2s0_coo1}。如下图所示:

image.png
【例题】AsianCheetah.png

【题目来源】2016 Sharif CTF

【题目描述】找到文件中隐藏的信息

【解题思路】先用第一板斧,通过010 Editor没有发现插入隐藏;再用第二板斧,在StegSolve中多次单击“>”按钮,也没有任何收获。因此,本题需要用到StegSolve中的Data Extract功能,选择蓝色通道最低位、LSB First、row,因为只有蓝色通道,故RGB顺序随意,设置如下图所示:
image.png

在预览窗口看到flag:SharifCTF{e8e12db2fc654f3b50f3da4901ab986e}。这个题目本质上也是LSB隐写,和上个例题区别是,上个例题隐写了一个二维码,通过“>”按钮可以看到;本题隐写了一个字符串,需要在Data Extract中才能看到。但是,这里有一个小问题,我们如何知道应该从蓝色通道最低位提取信息,而不是从其他位获取信息?如果没有其他工具配合,我们只能手工多次尝试,没有其他更好的方法了吗?但有了zsteg工具,提取数据时就不需要反复进行人工尝试了。

zsteg工具可以检测PNG和BMP图片里的隐写数据,功能非常强大,但需要在Linux系统中通过命令行运行。打开Linux终端,输入“gem install zsteg”命令就可以完成其安装。使用方法如下图所示,在命令“zsteg”后加入文件的相对路径或绝对路径,就得到结果。zsteg还会把重要字符串自动表红色并识别提取出的文件的类型。在下图中flag字符串前有“b1,b,lsb,xy”,其含义如下:b1表示最低位(b8表示最高位,这与StegSolve略有不同),b表示蓝色通道,lsb表示最低位是第一位,xy表示按行提取,与上图中设置完全一样。
image.png
【例题】easyimg.zip

【题目描述】找到文件中隐藏的信息

【解题思路】对文件进行解压后,我们得到一个easy.bmp文件,用画图软件打开图片报错提示,猜测可能文件受损,需要修复。如下图所示:

image.png
在010 Editor中打开该文件,如下图所示:

image.png

打开bmp模板,报错提示。也证明了不是bmp文件或者文件受损。bmp文件的文件头是“42 4D”,由此我们推测easy.bmp文件缺少了文件头,“BM”,接下来在文件头插入2个字节,如下图所示:
image.png

修改完之后,可以重新运行一下bmp模板,如上图所示,模板执行成功。说明修改成功,将修改后的文件另存为新文件easy_new.bmp。利用第一板斧,在文件easy_new.bmp中没有任何发现,利用StegSolve也没有发现LSB隐写的图像,因此考虑使用zsteg,结果如下图所示,并没有发现flag。

image.png

这里介绍一个关于zsteg重要的使用技巧:在命令中添加“-a”选项,可以尝试提取信息所有的排列组合。一些题目要通过添加“-a”选项才能找到flag。如下图所示,得到flag’flag{44544427-2a95-4936-bcc1-47c95268ca4c}。

image.png
【例题】try1try.png

【题目来源】原创

【题目描述】找到文件中隐藏的信息

【解题思路】在010 Editor中打开图片,没有发现明显的插入隐藏信息,在StegSolve中也没有明显的发现,于是使用zsteg工具,检测结果如下图所示:

image.png

可以发现在RGB通道的最低位以LSB的方式隐写了一个RAR文件。接下来,通过命令“zsteg -E b1,rgb,lsb,xy try1try.png > ex.rar”把RAR文件提取出来。其中,“- E”表示提取,“b1,rgb,lsb,xy”是上一步操作得到的LSB隐写信息,“>ex.rar”表示利用输出重定向将提取出的信息保存为ex.rar,否则提取出的RAR文件会打印在终端上。image.png
从StegSolve打开图片看到的“WEAK P@SS”信息,如下图所示:

image.png
猜测提取RAR使用弱口令,使用ARCHPR爆破RAR4文件的密码,利用字典或者6位纯数字爆破后发现解压密码是654321,解压后得到aaa.txt,打开文件即可得到flag{ZstegV587!}。

注意:在第二板斧中,StegSolve和zsteg使用有先后顺序,应先使用StegSolve中的">"按钮查看是否存在LSB隐写图像,如果没有任何发现,再利用zsteg检测是否有LSB隐写字符串或文件。zsteg的提取结果可以在StegSolve中利用Data Extract按同样设置进行验证。

【例题】taowa.zip

【题目来源】2018网鼎杯

【题目描述】找到文件中flag

【解题思路】解压后发现每一层文件夹中都一个PNG文件和一个子文件夹,针对每张图片使用三板斧的前两板斧(一种快捷操作是对每张图片依次使用strings和zsteg命令,strings命令对应第一板斧【010 Editor】,zsteg命令对应第二板斧),最终在对6.png使用zsteg提取时可以找到flag{03a253f5-8e93-4533-bcfc-af90883009,如下图所示:

image.png
【例题】3333.png

【题目描述】找到文件中的flag

【解题思路】根据三板斧解题套路,使用第一板斧和第二板斧都没有发现隐写内容,因此,对文件使用binwalk,检测结果如下图所示:

image.png

在0x29偏移处检测到一个zlib压缩文件,但是这个检测结果并不准确,其实是一个误报。对于所有PNG图片使用binwalk检测,都能在0x29偏移处发现一个zlib压缩包。这里使用AsianCheetah.png对比说明。

image.png

之所以所有PNG都能检测出zlib文件,是因为PNG格式中IDAT块的特征和zlib文件特征一致,所以利用binwalk检测PNG文件时经常能看到这个误报。误报并不意味着binwalk不能使用,对于这两个图片都使用binwalk -e命令提取,发现都生成了新文件夹,查看文件夹中的内容,如下图所示:

image.png

提取命令如果报错,请加上参数“–root-as=root”。根据上图红箭头所指可以发现,3333.png的IDAT块中插入了其他信息,因为不为0字节。对从3333.png中提取出的29文件使用file命令,结果是"data",说明并没有识别出是什么文件。这里一个重要思路:凡是不认识或无法识别的文件均可以使用binwalk检测。检测结果如如下图所示:

image.png

29文件中还有一个zlib文件,继续提取,从下图中可以看到最终提取结果,

image.png

“504b0304”是ZIP文件的开头,需要进行HEX解码并保存成压缩文件。如下图所示:

image.png

压缩包解压需要密码,但并不是伪加密,爆破也没有找到密码,用解压软件打开压缩包或者用binwalk再次打开,可以发现压缩包中的注释:

image.png

上面红框内的字符就是密码,解压后用记事本打开获取flag{PnG_zLiB_dEc0mPrEsS}。

相关文章
|
10天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
6天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2506 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
6天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1519 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
8天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
530 13
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18836 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17524 13
Apache Paimon V0.9最新进展
|
8天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
457 48
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
353 4
叮咚!您有一份六大必做安全操作清单,请查收
|
2天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。