Stegcrack 是一个开源程序,用于利用 Steghide 中的一个漏洞(具体为 CVE-2021-27211)。
Stegcrack 检测给定文件是否包含使用 Steghide 隐藏的数据,并且有时可以在无需密码的情况下完全提取隐藏数据。
克隆此仓库
git clone https://github.com/b4shfire/stegcrack
进入源代码目录
cd stegcrack/src
编译程序
clang++ main.cc utils.cc file_handling.cc ui.cc Extractor.cc -ljpeg -pthread -lz -std=c++11 -O2 -o ../stegcrack
退出源代码目录
cd ..
./stegcrack <文件路径> <线程数> (默认: 4)
./stegcrack flowers.jpg
./stegcrack ../images/rocket.jpg 8
为了将数据隐藏到载体文件中,Steghide 首先将提供的密码转换为一个 32 位种子。
种子的生成方式如下:
然后使用该种子生成文件中用于隐藏数据的位置序列。
此方法的缺陷在于,无论密码多么复杂,它都必须生成 2^32 个可能种子之一。这意味着可以通过暴力破解种子变量来完全绕过密码。
一旦种子生成,Steghide 首先将元数据(魔数、Steghide 版本、数据大小等)嵌入到载体文件中。
这些元数据可用于判断每个种子是否被用来隐藏数据。例如,嵌入的前 3 个字节始终是 0x73 0x68 0x8d(非常接近 ascii 字符串 "shm" - StegHide 魔数)。如果某个种子不能生成这些字节,则可以将其丢弃,因为它肯定没有被用来隐藏数据。这个过程持续进行,直到所有种子都被丢弃,或者找到一个有效种子。有效种子表示存在隐藏数据。
默认情况下,Steghide 在嵌入前使用完整密码加密数据。这意味着在大多数情况下,Stegcrack 只能提取这些加密数据。然而,如果在嵌入期间禁用了加密,Stegcrack 可以完全以明文提取隐藏数据。