CTF修炼手册(二)
坚持的第二天,已经晚了一天了。坚持坚持。。。
今天的题目还是图片隐写,话不多说。题来了
所需工具:
1.binwalk(linux下)
2.foremost(linux下)
3.MP3Stego(windows下)
步骤:
1.在linux下用binwalk对此图片进行分析(binwalk test.jpg),得到此图片是由一个jpg文件和一个zip文件组成的。
2.用linux下用foremost对图片分离(foremost test.jpg),得到一个图片和一个压缩包。
3.压缩包进行解压,得到一个MP3文件,和一个txt文件。
4.在windows下利用MP3Stego软件和txt文件中的密码对MP3文件进行解析(MP3Stego -X是获取隐藏的东西 -P后面写 密 码),就会得到我们所需的信息。
5.根据所得信息的格式可知此信息是经过base64编码,我们通过网络上的在线工具进行解码就可以得到所需flag。
原理:
1.首先这个复合的图片是怎么来的呢:在linux下利用copy -b test.jpg+test.zip test_ .jpg就会将test.jpg和test.zip文件直接以二进制形式连接起来形成test_.jpg文件。
2.那么这个test_.jpg为什么会被正常解析呢:这是因为jpg解析器只会根据二进制文件内jpg文件的开始标志和结束标志来决定那部分是jpg文件,也是说在jpg结束标志之后的二进制数据是会被jpg解析器忽略的。binwalk和foremost这两个软件也是这样来工作的。
下面就是一些常用格式的开始和结束标识符:
jpg开始:FF D8 FF E0 00 10 4A 46 49 46 jpg结束:FF D9
png开始:89 50 4E 47 0D 0A 1A 0A png结束:49 45 4E 44 AE 42 60 82
GIF开始:47 49 46 38 39
BMP开始:42 4D E3 BF 22 00 00 00
rar开始:52 61 72 21
ZIP开始:50 4B 03 04 14 00 00 00 08 00
PDF开始:25 50 44 46
3.对MP3文件的解析,这个的原理我不是很清楚(很抱歉,希望大家知道的可以不吝赐教)
4.base64编码解码。base64编码是网络上常见的用于传输8bit字节代码的编码方式之一,要求把每三个8bit的字节转换为四个6bit的字节。base64编码只能表示64个字符(因为2的6次方等于64),分别是A-Z,a-z,0-9,+(根据系统可能不同),/(根据系统可能不同)。
base64编码后得到的只可能是字母、数字、+、/;并且可能是一个=或两个=结尾;=不可能在中间。