-
-
[原创]misc-压缩包部分
-
发表于: 2022-11-1 16:33 13487
-
菜鸡打ctf总结的一点思路,有不对的地方,大佬轻喷
一个zip文件由三部分组成:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志。
在这个数据区中每一个压缩的源文件/目录都是一条记录,记录的格式如下
[文件头+ 文件数据 + 数据描述符]
这个数据描述符只在全局方式位标记的第3位设为1时才存在,紧接在压缩数据的最后一个字节后。这个数据描述符只用在不能对输出的 ZIP 文件进行检索时使用。例如:在一个不能检索的驱动器(如:磁带机上)上的 ZIP 文件中。如果是磁盘上的ZIP文件一般没有这个数据描述符。
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密) 头文件标记后2bytes
08 00:压缩方式
在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据
50 4B 01 02:目录中文件文件头标记(0x02014b50)
3F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,伪加密的关键) 目录文件标记后4bytes
08 00:压缩方式
50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
暴力破解
暴力破解就是爆破压缩包的密码
windows下可以使用ARCHPR这款工具
linux下可以使用frackzip命令
伪加密
这里是504B01021400000008,将1400XX0008改成单数就形成了伪加密
将这里改成0009再来看一下再改回去就破解了伪加密
例题 强网杯2020 miscstudy level5
伪加密,处理后解压出leve5
明文攻击
大致原理,一个需要解密的ZIP而且不知道密码,但幸运的是有ZIP包里一个已知文件,将已知文件进行ZIP加密后和待解密的ZIP里已知文件进行hex对比,两者的区别就是ZIP加密的三个key。
需要查看压缩算法是否一直,CRC校验值是否相同
CRC爆破
CRC32碰撞用于非常小的文件(6字节以上基本就别试了),就是通过CRC来反推文件内容。
而且CRC32是很容易碰撞的,所以就6字节而言,同一个CRC32可能对应着十几个字符串(纯可视字符)。
例题 强网杯2020 miscstudy level6
level6的压缩包,发现内部有三个长度为454的txt文件,想到crc爆破
例题PT Site bytectf2020
在注册页面看到三张图
最后的一张图有用 根据这个,自己输入员工编号,申请编号是日期加后四位随机,去爆破CRC
然后去明文攻击,其中有一点是,把数据写到.txt中,会看到数据比压缩包里的密文多三个字节,那是因为linux下的换行符位0A,windows下为0D0A,将0D删去即可
得到http://182.92.4.49:30080/signup.php?type=invite&invitenumber=8128e1f98353335c9b935fec58f0be46
文件头结构、、、、、
组成 长度
文件头标记
4
bytes (
0x04034b50
)
解压文件所需 pkware 版本
2
bytes
全局方式位标记
2
bytes
压缩方式
2
bytes
最后修改文件时间
2
bytes
最后修改文件日期
2
bytes
CRC
-
32
校验
4
bytes
压缩后尺寸
4
bytes
未压缩尺寸
4
bytes
文件名长度
2
bytes
扩展记录长度
2
bytes
文件名 (不定长度)
扩展字段 (不定长度)
文件数据、、、、、
数据描述符、、、、、
CRC
-
32
校验
4
bytes
压缩后尺寸
4
bytes
未压缩尺寸
4
bytes
文件头结构、、、、、
组成 长度
文件头标记
4
bytes (
0x04034b50
)
解压文件所需 pkware 版本
2
bytes
全局方式位标记
2
bytes
压缩方式
2
bytes
最后修改文件时间
2
bytes
最后修改文件日期
2
bytes
CRC
-
32
校验
4
bytes
压缩后尺寸
4
bytes
未压缩尺寸
4
bytes
文件名长度
2
bytes
扩展记录长度
2
bytes
文件名 (不定长度)
扩展字段 (不定长度)
文件数据、、、、、
数据描述符、、、、、
CRC
-
32
校验
4
bytes
压缩后尺寸
4
bytes
未压缩尺寸
4
bytes
组成 长度
目录中文件文件头标记
4
bytes (
0x02014b50
)
压缩使用的 pkware 版本
2
bytes
解压文件所需 pkware 版本
2
bytes
全局方式位标记
2
bytes
压缩方式
2
bytes
最后修改文件时间
2
bytes
最后修改文件日期
2
bytes
CRC-32校验
4
bytes
压缩后尺寸
4
bytes
未压缩尺寸
4
bytes
文件名长度
2
bytes
扩展字段长度
2
bytes
文件注释长度
2
bytes
磁盘开始号
2
bytes
内部文件属性
2
bytes
外部文件属性
4
bytes
局部头部偏移量
4
bytes
文件名 (不定长度)
扩展字段 (不定长度)
文件注释 (不定长度)
组成 长度
目录中文件文件头标记
4
bytes (
0x02014b50
)
压缩使用的 pkware 版本
2
bytes
解压文件所需 pkware 版本
2
bytes
全局方式位标记
2
bytes
压缩方式
2
bytes
最后修改文件时间
2
bytes
最后修改文件日期
2
bytes
CRC-32校验
4
bytes
压缩后尺寸
4
bytes
未压缩尺寸
4
bytes
文件名长度
2
bytes
扩展字段长度
2
bytes
文件注释长度
2
bytes
磁盘开始号
2
bytes
内部文件属性
2
bytes
外部文件属性
4
bytes
局部头部偏移量
4
bytes
文件名 (不定长度)
扩展字段 (不定长度)
文件注释 (不定长度)
组成 长度
目录结束标记
4
bytes (
0x02014b50
)
当前磁盘编号
2
bytes
目录区开始磁盘编号
2
bytes
本磁盘上纪录总数
2
bytes
目录区中纪录总数
2
bytes
目录区尺寸大小
4
bytes
目录区对第一张磁盘的偏移量
4
bytes
ZIP
文件注释长度
2
bytes
ZIP
文件注释 (不定长度)
组成 长度
目录结束标记
4
bytes (
0x02014b50
)
当前磁盘编号
2
bytes
目录区开始磁盘编号
2
bytes
本磁盘上纪录总数
2
bytes
目录区中纪录总数
2
bytes
目录区尺寸大小
4
bytes
目录区对第一张磁盘的偏移量
4
bytes
ZIP
文件注释长度
2
bytes
ZIP
文件注释 (不定长度)
fcrackzip
-
b
-
l
6
-
6
-
c
1
-
p
000000
passwd.
zip
-
b 暴力破解
-
c
1
限制密码是数字
-
l
6
-
6
限制密码长度为
6
-
p
000000
初始化破解起点
fcrackzip
-
b
-
l
6
-
6
-
c
1
-
p
000000
passwd.
zip