ctf实战-使用Stegsolve解答图片隐写

admin 2024年7月10日13:46:49评论6 views字数 5181阅读17分16秒阅读模式

1.1 题目分析

1.misc类题目

i春秋给出的ctf比赛中,misc题目类型中,仅仅给出一个zip文件的下载地址,其中给出了一个提示red0”,无任何其它提示,该zip文件为图片文件其压缩文件下载地址为:https://static2.ichunqiu.com/ictf/resources/attach/red0_a311fc237b75e084793fcfbfa4105bd0.zip

2.分析题意

red0是提示,以前未玩过图片隐写,不知道是啥意思,本次通过查看各种资料,知道其实这个就是red,选择0值。

1.2解题思路

1.根据提示使用setgsolve进行分析,首先进行图片转换浏览,简单的会直接获取flag

2.通过数据抽取进行分析

根据提示选择图像平面通道,通过预览查看有无flag等关键字,有的可能是二进制编码01,将二进制编码提取出来,通过代码进行处理或者在线转换。

1.3实战某ctf图片隐写

1.下载Stegsolve

   Stegsolve是一款图片隐写分析软件,支持常见的图片文件格式,可提取GIF文件中的帧。当两张jpg图片外观、大小、像素都基本相同时,可以考虑进行结合分析,即将两个文件的像素RGB值进行XORADDSUB等操作,看能否得到有用的信息。StegSolve可以方便的进行这些操作。打开StegSolve,选择“file->open”打开一张图片文件,然后选择“analyse->image combine”选择另一张图片,默认的XOR操作就可以看到隐藏的信息。点击窗口下方的箭头,可以看到不同combine方式下的结果。使用工具的优点是简单方便,但是缺乏扩展性,不能进行批量自动化处理。而对于自己编写的脚本,就可以方便的进行扩展。Stegsolve下载地址:http://www.caesum.com/handbook/Stegsolve.jar

2.运行Stegsolve

   如果系统安装了java运行环境,可以直接执行Stegsolve.jar程序,否则需要通过命令行来启动java -jar Stegsolve.jar

3.打开图片

   Stegsolve中单击“File”打开本列中的图片文件ez.png,注意开始运行Stegsolve.jar时,其软件默认窗口比较小,打开后效果如图1所示。

ctf实战-使用Stegsolve解答图片隐写

 

1使用Stegsolve打开图片

4.图像的位平面(bit plane

1)图像位平面的定义

一幅256个灰度级的图像可以分解成8个位平面,原因就是2^8=256,换句话说每一个像素点的灰度值可以由8个二进制位来表示,所谓的位平面(bit plane)就是依次取出每个像素点的数值组成一个位平面。举一个简陋的例子,假设当前图像就有两个像素点,这两个像素点的灰度值分别是13,那么其对应的二进制位分别为1000000011000000,那么该图像分解成8个位平面依次为1101000000000000,即通过取前面两个二进制位的第一位、第二位、第三位等组成第一个位平面,第二个位平面,第三个位平面等。可以发现,每一个位平面均为一个二值图,也就是说像素点的灰度值非01

2)位平面的matlab实现

   可以在matlab中通过以下代码进行实现,实现效果如图2所示。

X=double(rgb2gray(imread('d:test.bmp')));%将原始图像转换为灰度图像,如果本身就是灰度图可以去掉rgb2gray函数 

[h w] = size(X); 

subplot(3,3,1); 

imshow(X,[]); 

title('原始图像'); 

for k=1:8 

 fori=1:h 

    for j=1:w 

     tmp(i,j) = bitget(X(i,j),k);%bitget函数首先将X(i,j)处灰度值分解为二进制串,然后取第k 

    end 

 end 

 subplot(3,3,k+1); 

 imshow(tmp,[]); 

 ind= num2str(k); 

 imti= ['',ind,'个位平面']; 

 title(imti); 

end 

ctf实战-使用Stegsolve解答图片隐写

2实现位平面的效果

5.图像平面通道浏览分析

   Stegsolve软件下方中间文件使用向左或者向右的箭头可以对图片进行各种变换,如图3所示,显示是Redplane 2图像平面层,在Stegsolve中可以进行Red/Green/Brue/Alpha0-7通道的转换,以及XOR等操作,某些题目可以直接通过该方法直接获取flag值。

ctf实战-使用Stegsolve解答图片隐写

3图像平面层转换

6.提取数据分析(Data Extract

   Stegsolve中单击“Analyse”-Data Extract”,如图4所示进行数据提取分析,在本例中,在“Bit Planes”中选择“Red 0”Bit Plane Order中选择RGB。单击Preview可以看到在上方存在存在01字样数据。

ctf实战-使用Stegsolve解答图片隐写

4数据提取分析

解题技巧:

一般来讲出题方都会给出提示,这些暗示有些会出现在题目上,有的会在注释处,例如2014XDCTF网络安全大赛的web100题,题目中的图片hackkey.png,明确是需要进行解答的对象,在图像文件的注释主有“rd rgb”的提示,根据提示选择位图平面顺序RGB,选择Red0即可解题,如图5所示,获取其key“Xd$eC@2o14”

ctf实战-使用Stegsolve解答图片隐写

5位图平面Red0解题

7.保存文件并分析

1)保存二进制文件

Stegsolve中可以将分析的结果保存为txt文件和二进制文件,要根据情况,如图图片中已经出现了key则可以保存为txt文件,直接复制key或者flag来提交答案。在本例中由于出现的是代码,还需要做进一步分析,因此将其保存为二进制文件2,然后使用notepad打开该文件,如图6所示,将二进制01字段全部保存。

ctf实战-使用Stegsolve解答图片隐写

6打开二进制文件并提取二进制代码

2)二进制转换查询

http://www.5ixuexiwang.com/str/from-binary.php网站中,复制数据进行查询:

011001100110110001100001011001110111101101010000001100010110001101011111010010000011010001110011010111110011001101110110001100110111001001111001011101000110100000110001011011100110011101111101

如图7所示,查询获取其flag为:flag{P1c_H4s_3v3ryth1ng}

ctf实战-使用Stegsolve解答图片隐写

7获取flag

3python解码二进制

  将一下代码保存为ejz.py

binary_string='011001100110110001100001011001110111101101010000001100010110001101011111010010000011010001110011010111110011001101110110001100110111001001111001011101000110100000110001011011100110011101111101'

import binascii

hex_string = "%x"%(int(binary_string, 2))

hex_string = hex_string[ : len(hex_string) / 2 * 2]

print "key :", binascii.a2b_hex(hex_string)

执行python ejz.py后,获取其flag如图8所示。

ctf实战-使用Stegsolve解答图片隐写

8python直接解码获取flag

1.4python编程解决jpg格式图片

1.安装

python操作图片需要用到PIL(Python Imaging Library)库,可以通过easy_install PIL命令安装。如果使用Mac系统系统的话,还可以用brew install pillow来安装。安装PIL后就可以import Image库了。如果系统是64位还需要下载64位程序进行安装,下载地址https://files.pythonhosted.org/packages/e6/f0/7e6d01f026274363aaefb6b7e924f4b34b4a825a4bd8eaebfbd7d401af91/Pillow-2.1.0.win-amd64-py2.7.exe32位程序可以参考进行下载https://pypi.org/project/Pillow/2.1.0/#files

2.使用以下代码进行读取

  参考网友解决jpg格式文件的处理代码,执行后即可获取二进制代码。

# -*-coding:utf-8 -*-

importImage

image =Image.open("hack.jgp")

width,height = image.size

binary_string= ""

for y inrange(height):

    for x in range(width):

        #获取坐标(x, y)处的颜色值

        r, g, b = image.getpixel((x, y))

        color = (r << 16) + (g <<8) + b

        #获取颜色二进制值的最后一位

        last_bit = str(bin(color))[-1]

        binary_string += last_bit

printbinary_string

1.5总结

1.jpg等图片文件包含其它文件

最简单的处理办法,就是使用7zipwinrar等软件直接打开jpg文件,如图9所示,在jpg文件中可以看到教育学.txt,打开后,可以看到是下载链接地址,这个方法是目前AV图片种子的常见隐藏方法。

ctf实战-使用Stegsolve解答图片隐写

9winrar打开压缩文件

2. 种子图片文件生成方法

先要有张图,比如girl.jpg,在把种子用winrar压缩,得到压缩文件,比如av.rar,放在同一个文件夹下。再在该文件夹里建立一个txt文件,打开输入 copy /b girl.jpg + vvv.rar zzz.jpg,关闭保存。将txt文件后缀名改为bat,运行以后就会生成一个文件zzz.jpg,就是图种。使用时将zzz.jpg后缀名改为rar,解压即得种子。

3.二维码解码

   在有些题目中会给出二维码图片或者地址,将图片上传到http://tool.chinaz.com/qrcode网站后,会直接给出其flag值:flag{AppLeU0},如图10所示。在进行解码过程中要特别注意,,隐写的载体是PNG或者bmp格式可以直接读取,而对于经过有损的压缩,例如jpg格式就不行。

ctf实战-使用Stegsolve解答图片隐写

10获取flag

4.修改头文件

   有些题目会故意将文件头信息类似“GIF8”去掉,这个时候通过观察,将其修改成gif的头文件格式即可正常查看。gif文件会通过帧来隐藏flag,推荐是用Namo_GIF_gr工具进行查看。

5.图片或者压缩文件注释信息等

   在图片文件或者压缩文件注释信息中往往会隐藏密码或者flag,因此需要对其进行分析和查看。

6.binwalkforemost处理

1binwalk下载地址

https://github.com/ReFirmLabs/binwalk

2)安装

   git clone https://github.com/ReFirmLabs/binwalk.git

3)分析文件

binwalkctf.jpg

   加入分析结果中表明从140147处开始,存在另外一个文件。

4)分离文件

dd if= ctf.jpg of= ctf -1.jpgskip=140147 bs=1

这里if是指定输入文件,of是指定输出文件,skip是指定从输入文件开头跳过140147个块后再开始复制,bs设置每次读写块的大小为1字节,表示从ctf.jpg中分离出来ctf-1.jpg文件。

5)安装foremost

apt-getinstall foremost

6)提取及分析文件

foremostctf.jpg

当我们使用这行命令后,foremost会自动生成output目录存放分离出文件,查看其文件夹下文件即可。

参考文章:

https://blog.esu.im/71.html

http://www.poboke.com/study/2014-xdctf-network-security-competition-web100.html

https://www.secpulse.com/archives/4855.html

 

原文始发于微信公众号(小兵搞安全):ctf实战-使用Stegsolve解答图片隐写

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月10日13:46:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ctf实战-使用Stegsolve解答图片隐写https://cn-sec.com/archives/569173.html

发表评论

匿名网友 填写信息