CTF-Misc思路
Misc即杂项,一般是CTF无法分类在Web,PWN,Crypto, Reverse的题目,也就是说Misc是一个各种类形式题目的一个大杂烩
虽然Misc类型的题目千奇百怪,但他也是初学者最容易上手的CTF题目类型之一,考察了各个领域的基础知识,也是培养安全技术兴趣极好的材料。
在国内比赛中,Misc主要包括:
1.信息搜集
主要介绍一些获取信息的渠道和利用百度,谷歌等搜索引擎的技巧
2.编码转换
主要介绍在CTF比赛中的一些常见的编码形式以及转换的技巧
3.隐写分析
主要包括图片、音频、视频、文档、流量包、python字节码等
4.数字取证
主要包括图片、音频、视频、流量包、内存、磁盘文件、压缩包、固件等
取证隐写通常会相结合,也是Misc中最为重要的一块
工欲善其事,必先利其器
图片隐写
图片分离
命令:
* binwalk -e 文件名称
* foremost 文件名称
* 010 Editor
JPG(FFD8FFE1、FFD8FFE0、FFD8FFE8)
JPG文件格式:
标记码+压缩数据
标记码:有两个字节构成,第一个字节是固定值0xFF,后一个字节则根据则根据不同的意义由不同的数值
JPG文件头:FFD8FFE1、FFD8FFE0、FFD8FFE8

工具:
-
file工具:用来鉴定文件类型
-
exiftool工具:用来查看文件属性内容
![]()
-
Steghide
steghide:是一个可以将文件隐藏到图片或音频中的工具
安装:apt-get install Steghide
隐藏文件:steghide embed -cf 图片文件载体 -ef 带隐藏的文件 [-p 密码]
隐藏文件可以设置空密码
提取文件:steghide extract -sf 图片文件载体 [-p 密码]
-
Outguess
安装:apt install outguess
隐藏文件:outguess -k 密钥 -d 隐藏文件 原始图片 加密后的图片
提取文件:outguess -k 密钥 -r 加密后的图片 输出文件名
-
F5
是一个可以将文件隐藏到图片中的java工具
安装:git clone https://github.com/matthewgao/F5-steganography
隐藏文件:java Embed 原始图片 加密后的图片 -c "" -e 隐藏文件 -p 密钥
提取文件:java Extract 加密后的图片 -p 密钥
-
Jphide
Jphide:是基于最低有效位LSB的JPEG格式图片隐写算法
JPHide:程序主要是事先将信息文件加密隐藏到JPEG图像功能
JPSeek:程序主要实现从用JPHide程序加密隐藏得到的JPEG图像探测提取信息文件
windows版本的JPhide拥有图形化页面
-
jpg宽度隐写
当我们用脚本跑不出来准确宽度的时候,就要试试利用另一个脚本来爆破它的宽度,使其可以正常显示图片为止
-
SilentEye隐写
当用010 Editor或者strings命令发现有密码或者解密过程中出现明文密码的话,就要试试这个工具来解密了。
-
RGB通道隐写
工具:Stegsolve
打开图片之后,依次点击
>,查看不同颜色通道下的图片,可能会在图片的某个颜色通道里发现隐藏的信息
-
PNG(89504E47)
PNG文件格式
PNG文件署名域+标准数据块(+辅助数据块)

PNG文件署名:89 50 4e 47 0d 0a 1a 0a
标准数据块:
-
图片高度隐写
经常会去更改一张图片的高度或者宽度使得一张图片显示不完整从而达到隐藏信息的目的
图片正常显示,将图片拖入010 Editor 中,出现CRC报错,说明图片的高度被修改了,可以简单错报地将图片的高度修改成较大的值
-
图片宽度隐写
图片显示不正常,色彩失调,将图片拖入到010 Editor 中,出现CRC报错,说明图片的宽度被修改了。图片的宽度不能任意修改,需要根据IHDR块的CRC值爆破得到正确的宽度,否则图片显示错误不能得到flag。
-
LSB隐写
PNG文件中的图像像素一般是由RGB三原色(红、绿、蓝)组成,每一种颜色占用8位。LSB隐写就是修改了像素数中的最低的1bit,而人类的眼睛不会注意到这前后的变化,每个像素最多可以携带3bit的信息
工具:Stegsolve
通过下方的按钮可以观察每个通道的信息,查看各个通道时一定要细心捕捉异常点,抓住LSB隐写的蛛丝马迹
例如:
通过观察R G B三个通道的最低位,发现上面都有模糊的信息,借助 Stegsolve -> Analyse -> Data Extract 可以进行提取,preview可以预览信息,save Text保存成文本,Sava Bin 保存成二进制
工具:zsteg
安装命令:gem install zsteg
使用命令:zsteg -a 隐写后的图片
如果zsteg后某一种情况是一张图片或者是一个压缩包或者其他的文件,还可以提取出来,命令是:
zsteg -E b1,rgb,lsb,xy 5.png > flag.txt
-
盲水印隐写
i. 盲水印是利用二维傅里叶变换,给文件添加肉眼无法直接看到的水印信息,盲水印不仅仅用于图片,也可应用于像音频这种数据流,当出现两张一模一样的图片,可以用盲水印解密工具试一下
合成盲水印:python3 bwmforpy3.py encode 原图 信息文件 盲水印文件
提取盲水印:python3 bwmforpy3.py decode 原图 盲水印文件 信息文件
注意程序python2和python3版本的加解密结果会有所不同,主要原因是python2和python3 random的算法不同,如果要让python3兼容python2的random算法请加 --oldseed参数。
ii. 软件提取盲水印,直接打开图片,提取盲水印即可
-
数据块隐写
先打开我们的PNGDebugger工具查看是否有错误数据块,拥有的话,我们可以删除试试可不可以出来信息
其他地方确定确实无隐藏信息后有可能就是就是在数据块里做文章了,这时就需要我们对010的数据敏感,并且了解PNG的文件结构,这时候就需要我们去使用tweakpng工具去手动删除数据块,让我们的图片恢复正常
-
RGB通道隐写
工具:Stegsolve
打开图片之后,依次点击
>,查看不同颜色通道下的图片,可能会在图片的某个颜色通道里发现隐藏的信息 -
微妙不同隐写
题目一般会给出两张看起来一模一样的照片,但是他们两个照片的16进制数据有一部分是不一样的,如果将他们两个的RGB通道进行一系列逻辑计算的话就有可能会发现其中的秘密,这里给大家介绍一个工具可以帮助大家。
工具:Stegsolve
先打开两张图片中的其中一张,然后点击上面的Analyse,然后点击Image Combiner,然后我们选择另一张图片,然后我们一个通道一个通道去看,直到找到信息
![]()
GIF(47494638)
-
GIF帧隐写
由于GIF的动态特性,由一帧一帧的图片构成,所以每一帧图片,多帧图片的结合,都成了隐藏信息的一种载体
工具:Stegsolve
通过Stegsolve工具一帧一帧分析,加载改GIF图片 Analyse -> Frame Browser
-
GIF时间隐写
GIF文件每一帧间的时间间隔也可以作为信息隐藏的载体
Imagemagick工具:kali安装:apt-get install imagemagick
常用指令:
-
convert:转换图像格式和大小,模糊,裁剪,驱除污点,抖动,临近,图片上画图片,加入新图片,生成缩略图等。
-
identify:描述一个或较多图像文件的格式和类型
-
composite:根据一个图片或多个图片生成组合图片
使用identify命令去拆解gif,发现每一帧存在规律
提取每一帧的间隔并进行转化:identify -format "%s %T \n" 100.gif > flag.txt
然后进行数据处理
-
压缩文件处理
ZIP(504B0304)
zip压缩文件文件头标识符以固定值开头50 4B 03 04
zip出题的套路大多数就是让你们从带有密码的压缩包里提取文件,下面介绍几种破解压缩包密码的一些思路
-
暴力破解
Windows平台:ARCHPR工具
步骤:选择好要解密的压缩包 -> 攻击类型选择暴力 -> 在底下范围哪里选择密码可能用到的字符组合 -> 在长度那一栏选择密码可能的长度范围 -> 选择好之后点击上面的开始
![]()
Linux平台:fcrackzip命令
安装:sudo apt install fcrackzip
命令:fcrackzip -b -c1 -u test.zip
-b 为暴力模式,-c1 指定密码字符集为数字,-u 验证密码``unzip``,-l 5-6 指定密码长度-c选项可选的有
aA1!: -
CRC32爆破
只用于压缩包里文件字节数比较小的压缩包,一般不大于4,我们可以通过暴力破解明文文件的内容(通常是字符串)来获取我们想要的内容,而不是暴力破解 zip 文件的密码。
![]()
-
明文攻击
工具:ARCHPR工具
如果您已经知道部分加密文件,例如
readme.txt在网站上找到的文件,您可以开始尝试破解它。首先,将这个明文文件压缩成一个
zip文件。例如,将readme.txt压缩进入readme.zip.然后,你需要确认两者使用的压缩算法是一样的。一种简单的检查方法是打开文件并查看文件是否使用相同的卷压缩。如果相同,说明你使用的压缩算法是正确的。如果不同,请尝试另一种压缩算法。
![]()
打开我们的工具,选择我们要爆破的压缩包,在攻击类型那里选择明文,然后在下面明文那里选择我们刚才压缩的明文文件,最后点击开始按钮
![]()
-
zip伪加密
一个 ZIP 文件由三个部分组成:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志
压缩源文件数据区:
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度
00 00:扩展记录长度
压缩源文件目录区:
50 4B 01 02:目录中文件文件头标记(0x02014b50)
3F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度
24 00:扩展字段长度
00 00:文件注释长度
00 00:磁盘开始号
00 00:内部文件属性
20 00 00 00:外部文件属性
00 00 00 00:局部头部偏移量
我们用winhex打开压缩包,搜索504B,点击第二个504B(压缩源文件目录区)
![]()
我们看到上图,红色框住的50 4B 是压缩源文件数据区的头文件标记,它对应的红色框柱的 09 00 并不影响加密属性。
绿色框住的50 4B 是压缩源文件目录区 ,它对应的绿色框柱的 09 00 影响加密属性,当数字为奇数是为加密,为偶数时不加密。
因此我们更改标志位为偶数保存即可。
![]()
工具:ZipCenOp.jar(需要java环境)
将flag.zip和ZipCenOp.jar都放在同一文件夹
在命令行中执行以下命令:
java -jar ZipCenOp.jar r flag.zip
RAR(526172211A0700)
RAR 压缩文件的文件头是0x 52 61 72 21 1A 07 00
RAR 终止符或尾部字节总是0x C4 3D 7B 00 40 07 00
-
暴力破解
工具:ARCHPR工具
步骤:选择好要解密的压缩包 -> 攻击类型选择暴力 -> 在底下范围哪里选择密码可能用到的字符组合 -> 在长度那一栏选择密码可能的长度范围 -> 选择好之后点击上面的开始
![]()
如果破解RAR压缩包的时候出现
选择的文件不是zip/rar的时候,一般是你选择的rar文件,是采用rar比较新的编码规则,即rar5.0版本,目前这个是不支持的。你在用最新版本的rar压缩的时候,可以看到一个叫编码格式的选项,其中有三个:zip、rar、rar4;rar即rar5.0,是默认选项。比赛中她既然是让你去破解RAR的密码,自然使用的rar4的编码方式。如果再不济的话,我们也可以使用到我们的另一款工具,他的速度没有ARCHPR快,但是可以爆破rar5.0编码的压缩文件
工具:JPasswordRecoveryTool v1.09
![]()
点击Browse for 7z.exe那里,选择我们电脑中安装7z-zip的文件夹里的7z.exe程序,然后点击Browse for archive,选择我们要爆破的压缩包,下面的选项是要我们选择密码可能的字符集,Exclude characters这里要填写的是排除字符集,如果没有可以不填写,Minimum password length这里我们选择要破解密码的最小长度(必填),Maximum password length这里我们选择要破解密码的最大长度(必填)。最后点击Start Password Recovery
-
伪加密
RAR 文件的伪加密是在文件头中的位标记字段上,他也是在rar4编码格式下的伪加密。使用 010 Editor 可以清楚地看到该位。修改该位可以创建伪加密。0代表未加密,1代表加密
![]()
-
其他技术(如明文攻击),CRC32碰撞,与 ZIP 中所述相同。
音频隐写
MP3隐写
工具:MP3stego
加密:encode -E hidden_text -P password svega.wav svega_stego.mp3
解密:decode -X -P password svega_stego.mp3
波形隐写
工具:Audacity
将音频拉到软件里,进行波形分析,手搓信息(一般在波形里隐藏的信息是莫斯密码或者二进制数据)

如果是纯摩斯密码的话,还可以拉到kali里面进行解密
工具:morse2ascii
安装:apt install morse2ascii
使用:morse2ascii 徐要解密的音频
波形图里隐藏二进制数据
用工具打开文件后,放大波形谱,发现开头的端倪

上面一小点是1,下面一小点是0,得到:110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101
一共105位,不符合8位一个字符,符合7位,于是在每个7位之前加个0,得到
011001100110110001100001011001110111101101010111001100000101011100101010011001100111010101101110011011100111100101111101
直接二进制转ascii得到flag
光谱隐写
频谱速记将字符串隐藏在音频频谱中。一个遥远的特征是它经常包含嘈杂或刺耳的声音。
工具:Audacity
将音频拉到软件里,进行频谱图分析即可出flag

LSB 音频隐写
与图像隐写术中的 LSB 类似,您也可以在音频中执行 LSB 隐写术。我们可以使用 SilentEye 工具来解决音频 LSB 挑战。
工具:SilentEye
把音频拉到软件里,点Decode,即可,如果有密码的话,输入密码解密即可
文本文档隐写
word文档
-
打开word文档,一片空白,文字隐藏在word中,点击文件—选项—显示—隐藏字符,即可显示隐藏的文字
或者隐藏的信息字体颜色与背景颜色一样,可修改文字颜色得到目标信息
如果题目给我又加了一道屏障,给我们设置了密码,不让我们进行编辑,此时就要使用Passper for Word工具了
工具:Passper for Word
打开选择移除限制,然后选择要解密的word文档
-
文件隐藏
可以将word文档转换成xml格式,当然也可以反过来讲xml文件转换成word文档,这导致了如果重新打包的过程中,有可能隐藏进其他数据文件。或者在xml文件里隐写内容也是有可能的。
word本质是一个zip文件,我们可以将word文件的后缀改为.zip,寻找里面的flag文件。Excel文件也同样适用
如果我们将文件隐藏在word文档里的话,我们可以使用命令来模糊查找里面的文件
windows:findstr /s /i /c:"flag"* (慢)
-
题目给出一个pdf文件,打开pdf是一张图片,我们猜想flag可能隐藏在图片的下面
操作步骤:利用格式工厂,将PDF转成word文档,然后将图片移开,即可看到flag
-
pdf隐藏文件
工具:wbStego4open
wbStego4open是可以把文件隐藏到BMP,TXT,HTM和PDF文件中
隐藏文件选encode,解密文件选decode
解密文件流程:打开软件选择Continue,然后选择Decode,选择要解密的文档,然后选择保存文件的路径,最后保存





TXT
txt文件一般的隐写方式是空格隐写,也叫snow隐写,是使用空格和制表符在网页或其它文件里隐写的方法,使用了ICE加密算法,解密需要密码。
工具:snow.exe
加密:snow.exe -C -m 要加密的信息 -p password 隐写载体 输出文件名












浙公网安备 33010602011771号