CTF中的压缩包


前言

实际上压缩包本身并不具备隐藏信息的功能,但由于在CTF竞赛中,经常出现压缩包与隐写术结合在一起的题目,所以我们需要掌握在CTF竞赛中有关压缩包的题目的常见考察方向及分析手段。


CTF中常见的压缩包套路

  1. 利用进制转换隐藏信息

  2. 作为冗余信息或隐藏信息藏在其他文件中,一般是图片

  3. 简单密码爆破

  4. 字典爆破/掩码攻击

  5. 伪加密

  6. 明文攻击

  7. CRC32碰撞

  8. 文件修复

  9. 冗余信息拼接

  10. 注释隐藏密码

0.1 利用进制转换隐藏信息

我们来看这个例子

image

分析字符串就会发现,这一长串字符串是十六进制字符串,尝试十六进制解码。

image

虽然输出了一堆乱码,但是我们还是能看见存在敏感字符“flag.txt”。判断为压缩包后,将其保存为ZIP文件。可以编写脚本进行十六进制解码后保存为ZIP文件,也可以直接使用winhex。将其保存为ZIP文件后就可以正常解压。

0.2 作为冗余信息隐藏在其他文件中,将压缩包提取出来。

1 将压缩包隐藏在图片中

举个栗子:

使用winhex打开一个后缀名为.jpg的图片,发现在jpg图片的结束标识“FFD9”之后,就是ZIP文件的文件标识“504B0304”,而且可以看到flag.txt字样,如图:

image

解决方式:直接将图片后缀名改为zip,即可解压。

2 使用隐写算法将ZIP文件隐藏在图片中

若是使用隐写算法隐藏在图片中,则需要借助相应的工具,使用StegSolve找到隐藏的信息。

0.3 简单密码爆破

一般需要爆破的压缩包密码不会复杂,大部分情况都是纯数字,这里使用ziperello对压缩包进行爆破。

步骤为:

  1. 打开ziperello,选择要解密的压缩包。
    image
  2. 点击右下角的“NEXT”,然后选择暴力破解。
    image
  3. 选择字符集,一般比赛中使用到爆破的,都是纯数字的密码,且长度较短。
    image
  4. 再次“NEXT”,开始爆破,很快密码就爆破出来了。

0.4 掩码攻击

掩码攻击的意思,就是已知这个压缩包的密码格式,根据这些已知的条件,来构造一个符合已知条件的字典,将所有可能的结果列出来,进行爆破。

步骤为:

  1. 打开ziperello,选择要解密的文件,然后选择“基于模板的破解”。
    image
  2. 根据所得的信息构造符合条件的模板,如图所示,“a”,“A”,“#”分别代表一个字符集,也可以双击左边的字符集窗格构建自定义的字符集。
    image
  3. 得到密码;

0.5 ZIP伪加密

ZIP文件格式中存在两个加密标志位,前面的加密标志位为数据区的加密标志位,后面的加密标志位为目录区的加密标志位。所谓伪加密就是修改目录区的加密标志位,使本来没有加密的ZIP文件,在解压的时候,需要用户输入密码来进行解压,但是这个密码又是不存在的。

我们以同一个压缩文件的无加密、伪加密、真加密三种形式来做比较,如图:

image

当我们在判断一个压缩文件为伪加密时,只需将其目录去的加密标志位的前面一位改为奇数即可。使用winhex或010Editor均可完成。

0.6 明文攻击

明文攻击: 是一种攻击模式,指攻击者已知明文、密文及算法,求密钥的过程。更详细的原理请读者自行谷歌。

在一个文件夹中存在一个加密的压缩包和一个未加密的文件,将未加密的文件进行无加密的压缩,对比两个压缩文件中相同文件的CRC32值,如果一致,就可以进行明文攻击,如果不一致,则换一种压缩方式继续比较。

0.7 CRC32碰撞

CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。在产生CRC32时,源数据块的每一位都参与了运算,因此即使数据块中只有一位发生改变也会得到不同的CRC32值,利用这个原理我们可以直接爆破出加密文件的内容,但是CRC32值也存在被碰撞的可能,也就是会出现内容不一样但是CRC32值一样的情况,所以利用CRC32碰撞的方法得知压缩文件的内容,一般是在被压缩的文件很小的情况下,在CTF中一般为4个字节。

0.8 文件修复

尝试解压ZIP文件时报错,提示ZIP中的文件xxx.xxx:数据错误,文件被破坏。这个套路也是跟文件的格式有关,一般都是修改ZIP文件的开始标识,使得在解压文件时产生错误,无法解压。ZIP文件的头部标识为“504B0304”且为固定值,利用winhex将其修改回来即可成功解压。
如图:
image

0.9 冗余信息拼接

ZIP压缩文件目录结束标识位为“504B0506”,且通常带有18字节(我们将每个偏移量视作一位,也是一个字节)的冗余数据,总共长度一般为22个字节,所以这个套路就是将隐藏信息分为多片隐藏在多个压缩包的结尾。而这些压缩包的最后会有n个字节的冗余数据,将其拼接后得到一串字符串,解码后可得出答案。

1.0 注释隐藏代码

往往有时候,加密者会把密码放在属性里面,如下图:

image

我们可以看到,这个Zip压缩文件的密码就是www.cnblogs.com了


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM