misc之压缩包总结------2023.2.3

1,ZIP伪加密 

ZIP文件格式

在这里插入图片描述
一个 ZIP 文件由三个部分组成:

压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志

压缩源文件数据区

50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密)
08 00:压缩方式
20 9E:最后修改文件时间
66 4F:最后修改文件日期
F2 1B 0F 4A:CRC-32校验(4A0F1BF2)
0E 00 00 00:压缩后尺寸
0C 00 00 00:未压缩尺寸
08 00:文件名长度
00 00:扩展记录长度
66 6C 61 67 2E 74 78 74: 文件名(不定长)
4B CB 49 4C AF 36 34 32 36 31 35 AB 05 00: 文件flag.txt压缩后的数据

压缩源文件目录区

50 4B 01 02:目录中文件文件头标记(0x02014b50)
1F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)
08 00:压缩方式 20 9E:最后修改文件时间 66 4F:最后修改文件日期
F2 1B 0F 4A:CRC-32校验(4A0F1BF2)
0E 00 00 00:压缩后尺寸
0C 00 00 00:未压缩尺寸
08 00:文件名长度
24 00:扩展字段长度
00 00:文件注释长度
00 00:磁盘开始号
00 00:内部文件属性
20 00 00 00:外部文件属性
00 00 00 00:局部头部偏移量

压缩源文件目录结束标志:

50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
01 00:本磁盘上纪录总数
01 00:目录区中纪录总数
5A 00 00 00:目录区尺寸大小
34 00 00 00:目录区对第一张磁盘的偏移量
00 00:ZIP 文件注释长度

zip 伪加密原理

zip伪加密是在文件头的加密标志位做修改,进而再打开文件时识被别为加密压缩包。

假加密:
压缩源文件数据区和压缩源文件目录区的全局方式位标记分别为00 00和09 00
真加密:
压缩源文件数据区和压缩源文件目录区的全局方式位标记均为09 00 

(全局方式位标记的四个数字中只有第二个数字对其有影响,其它的不管为何值,都不影响它的加密属性!

第二个数字为奇数时 –>加密

第二个数字为偶数时 –>未加密)

下面来一道题

下载压缩包,打开后发现被加密了
在这里插入图片描述
把这个zip文件拖入winhex中,由图中的信息可以知道是真加密
在这里插入图片描述
把09 00修改为00 00保存后即可得到flag
在这里插入图片描述

2,暴破

 

1.暴力:选择密码范围,长度等,由软件组合生成密码进行爆破

 

2.掩码:知道密码中的一部分,只需按规则构造其余部分

 

3.字典:通常是多数用户常用的一些密码集合,导入字典文件用其中的密码进行爆破

例一:

以ISCC 2017 Basic-08为例,选定暴力攻击、字符集和长度后进行爆破

http://p7.qhimg.com/t018a6f366fcf9b3f21.png

http://p4.qhimg.com/t010afd7e4440281a23.png

点击开始,进行爆破,如下图,在4ms内就找到了密码为BIT

http://p0.qhimg.com/t01811a7e2dcb89cade.png

 

例二:

掩码攻击,以ISCC 2017 Misc-06为例,题目给了一个jpg图片,用0x02中的方法分离出加密的压缩包,根据题目提示:注意署名, 构造????LiHua的掩码(?可在自己定义的字符集中任意选择)进行掩码攻击,如下图:

 

http://p6.qhimg.com/t01df197bb44c6ff8da.png

 

攻击结果如下,只耗费了很少的时间就找到了密码

 

http://p9.qhimg.com/t011e91c09434272596.png

 

 例三:

字典,还以之前的ISCC 2017 Basic-07举例,从图片中分离出一个加密的zip压缩包,爆破无果后考虑字典攻击(可从网上下载字典,但大多数题目需要自己构造字典,文末的网盘连接里提供了常见的字典)

http://p6.qhimg.com/t0161c303af1040467f.png

字典攻击的结果如下图,在字典选择合适的情况下,用很短的时间就能找到密码

http://p0.qhimg.com/t01f20c62ea9613230d.png

继续以此题为例,解压后的压缩包有一个txt文档和一个握手包,txt内容如下:

http://p1.qhimg.com/t016b6d12c62d06a5ad.png

因此可知握手包的密码为ISCC****的形式(*代表大写字母或数字),自己写程序构造字典

http://p9.qhimg.com/t01023e96e1a806e82c.png

运行此程序得到字典如下:

http://p4.qhimg.com/t01ebdf87a5ebae3d3a.png

之后用aircrack-ng来选中字典跑除握手包的密码如下图,不再详述

http://p5.qhimg.com/t014ad5b26364cf618f.png

 

3,crc32碰撞

 

CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。

 

在产生CRC32时,源数据块的每一位都参与了运算,因此即使数据块中只有一位发生改变也会得到不同的CRC32值,利用这个原理我们可以直接爆破出加密文件的内容

 

还是以之前HBCTF伪加密那道题为例,另一种解法就是CRC32碰撞,打开压缩包,可以看出压缩文件 flag6位数

 

的CRC32值为0x9c4d9a5d

 

http://p4.qhimg.com/t01b82b48613741c1c9.png

 

因此写出碰撞的脚本如下:

 

http://p1.qhimg.com/t01a640855d935796bf.png

 

要特别注意

 

if (binascii.crc32(str(i)) & 0xffffffff) == crc:

 

在 Python 2.x 的版本中,binascii.crc32 所计算出來的 CRC 值域为[-2^31, 2^31-1] 之间的有符号整数,为了要与一般CRC 结果作比对,需要将其转为无符号整数,所以加上& 0xffffffff来进行转换。如果是 Python 3.x 的版本,其计算结果为 [0, 2^32-1] 间的无符号整数,因此不需额外加上& 0xffffffff 。

 

脚本的运行结果如下,即为压缩文件的内容:

 

http://p5.qhimg.com/t01e060547556133ddc.png

4,明文攻击

明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)时,因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密的,所以可以用已知文件来找加密密钥,利用密钥来解锁其他加密文件,更详细的原理请读者自行谷歌

举个例子,已知 明文攻击.zip 中存在的文件 明文.txt,

因此将 明文.txt 压缩,这里需要判断明文压缩后的CRC32是否与加密文件中的一致,若不一致可以换一个压缩工具。

http://p4.qhimg.com/t0112994a09cc25c574.png

攻击过程如下:

http://p2.qhimg.com/t0170f27bf19e30b533.png

点击开始,很快就恢复了密码

http://p4.qhimg.com/t016abbabfa89c43970.png

另:当明文的大小比较小时,攻击速度会比较慢;即使有时没有恢复密码,也可以使用明文攻击,最后点保存还是能得到压缩包里内容的。

5,属性隐藏

就是在属性的注释里有密码

在这里插入图片描述

 

6,进制转换隐藏信息

在这里插入图片描述
当发现开头是PK的时候
说明是ZIP文件

进行进制转换
再用winhex保存为zip

 

posted @ 2023-02-03 20:25  木偶2313  阅读(714)  评论(0)    收藏  举报