CTF-MISC之非同寻常的ZIP(持续更新)

原链接:https://www.n0o0b.com/archives/328776d0-d89c-4426-81ec-730c7f2544ba

前言

众所周知,50 4B 03 04是zip文件的十六进制标志头,然鹅,zip的乐趣不止于此。

实验引入

  • 我们先创建一个空文件压缩成zip拖进010观察image-20240709204241097

​ 仔细观察能够发现,右边有很多PK头,而这些PK似乎顺序对应着50 4B 03 0450 4B 01 0250 4B 05 06

  • 我们再在不同时间创建两个相同的同名空文件,拖到010中观察

    image-20240709175707963

对比发现0x0A和0x2B偏移处两字节数据不同

image-20240709175748947

利用010 发现0x0A 0x0B处代表着某个时间,究竟是什么呢,我们深入学习

ZIP

ZIP是一种支持无损数据压缩存档文件格式。一个ZIP文件可能包含一个或多个可能已被压缩的文件或目录。ZIP文件格式允许多种压缩算法,但DEFLATE是最常见的。这种格式最初创建于 1989 年,最初是在 PKWARE, Inc. 中实现的。

历史版本

  • 2.0-(1993)[1] 文件条目可以使用 DEFLATE 压缩并使用传统的 PKWARE 加密 (ZipCrypto)。
  • 2.1-(1996) Deflate64 压缩
  • 4.5-(2001)[12] 记录了 64 位 zip 格式。
  • 4.6-(2001) BZIP2 压缩(在 APPNOTE 5.2 发布之前未在线发布)
  • 5.0-(2002)SES:支持加密的DESTriple DESRC2RC4(在APPNOTE 5.2发布之前未在线发布)
  • 5.2-(2003)[13][14] AES加密支持SES(在APPNOTE 5.1中定义,但未在线发布)和WinZip的AES(“AE-x”);更正了支持 SES 加密的 RC2-64 版本。
  • 6.1-(2004)[15] 记录的证书存储。
  • 6.2.0-(2004)[16] 记录的中央目录加密。
  • 6.3.0-(2006)[17] 记录的 Unicode (UTF-8) 文件名存储。扩展了支持的压缩算法(LZMA、PPMd+)、加密算法(BlowfishTwofish)和哈希列表。
  • 6.3.1-(2007)[18] 更正了 SHA-256/384/512 的标准哈希值。
  • 6.3.2-(2007)[19] 记录的压缩方法 97 (WavPack)。
  • 6.3.3-(2012)[20] 更改了文档格式,以便于使用JTC 1/SC 34 N 1621指示的JTC 1参考解释性报告(RER)等方法从其他标准引用PKWARE应用说明。
  • 6.3.4-(2014)[21] 更新了 PKWARE, Inc. 的办公地址。
  • 6.3.5-(2018)[22] 记录了压缩方法 16、96 和 99、DOS 时间戳纪元和精度,添加了用于密钥和解密的额外字段,以及拼写错误和说明。
  • 6.3.6-(2019)[23] 更正了印刷错误。
  • 6.3.7-(2020)[24] 添加了 Zstandard 压缩方法 ID 20。
  • 6.3.8-(2020)[25] 将 Zstandard 压缩方法 ID 从 20 移至 93,弃用前者。记录的方法 ID 94 和 95(分别为 MP3XZ)。
  • 6.3.9-(2020)[26] 更正了数据流对齐描述中的拼写错误。
  • 6.3.10-(2022)[27] 为附录 B 添加了多个 z/OS 属性值。 添加了几个额外的第三方额外字段映射。

结构

​ zip格式压缩包主要由两大部分组成:数据区中央目录区

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​ 其中,中央目录区分为中央目录文件头(Central directory file header)中央目录记录尾(End of central directory record)

​ 因此,可以说.zip文件通常分为以下三部分:

屏幕截图 2024-07-10 013204

数据区

数据区是由目录下每个文件形成的一系列50 4b 03 04开头的[本地文件头](#本地文件头(Local File Header))+[文件数据](#文件数据(File data))+[数据描述符](#数据描述符(Data descriptor))组成,其中包含了压缩数据

  • 本地文件头(Local File Header)

    偏移量长度/bytes描述
    04本地文件头标识50 4B 03 04
    42解压所需的ZIP版本(最低)
    62通用位标志
    82压缩方式
    102文件最后修改时间
    122文件最后修改日期
    144压缩前CRC-32校验值
    184压缩大小
    224压缩前大小
    262文件名长度 (n)
    282扩展区场长 (m)
    30n文件名
    30+nm扩展区
  • 文件数据(File data)

    • 单个文件数据压缩存储后紧随[本地文件头](#本地文件头(Local File Header))后

    • 若加密,则以加密头(encryption header)+加密压缩数据紧随[本地文件头](#本地文件头(Local File Header))后

    • 若文件为空即该位置为空。

  • 数据描述符(Data descriptor)

    通常为空

    偏移长度/bytes描述[33]
    00 或 4可选数据描述符签名 = 0x08074b50
    0 或 44未压缩数据的 CRC-32
    4 或 84 或 8压缩大小
    8 或 12 或 164 或 8未压缩大小

中央目录文件头(CDFH)

中央目录文件头条目是本地头的扩展形式:

偏移量长度/bytes描述
04中央目录文件头标识50 4B 03 04
42压缩所用的ZIP版本
62解压所需的ZIP版本(最低)
82通用位标志
102压缩方式
122文件上次修改时间
142文件上次修改日期
164数据压缩前CRC-32校验值
204压缩大小
244压缩前大小
282文件名长度 (n)
302额外场长 (m)
322文件注释长度 (k)
342文件初始位置的磁盘号
362内部文件属性
384外部文件属性
424本地文件头的相对偏移量
46n文件名
46+nm扩展区
46+n+mk文件注释

中央目录记录结尾(EOCD)

在所有中央目录条目之后,中央目录(EOCD)记录的结尾,它标志着ZIP文件的结尾:

抵消字节描述[33]
04中央目录结尾标识50 4B 05 06
42当前磁盘编号
62中央目录开始的所在磁盘编号
82当前磁盘上的中央目录记录总数
102中央目录记录总数
124中央目录的大小
164从本地文件头开始到中央目录开始的偏移量
202ZIP文件注释长度 (n)
22nZIP文件注释

ZIP文件通过位于存档结构末尾的中央目录记录末尾(EOCD)的存在来正确识别

详细说明

  • 版本

    当前最低功能版本定义如下:(压缩包记录的解压版本都是需要版本*10,比如:2.0 * 10 = 20

    ​ 1.0 - 默认值

    ​ 1.1 - 文件是一个卷标

    ​ 2.0 - File是一个文件夹(目录)

    ​ 2.0 -文件使用Deflate压缩进行压缩

    ​ 2.0 -文件加密使用传统的PKWARE加密

    ​ 2.1 - 使用Deflate64™压缩文件

    ​ 2.5 - 文件被压缩使用PKWARE DCL内爆

    ​ 2.7 - File是一个补丁数据集

    ​ 4.5 - File使用ZIP64格式扩展名

    ​ 4.6 - 文件使用BZIP2压缩*压缩

    ​ 5.0 - 文件使用DES加密

    ​ 5.0 - 文件使用3DES加密

    ​ 5.0 - 文件使用原始RC2加密进行加密

    ​ 5.0 - 文件加密使用RC4加密

    ​ 5.1 - 文件加密使用AES加密

    ​ 5.1 - 文件加密使用修正的RC2加密**

    ​ 5.2 - 文件加密使用正确的RC2-64加密**

    ​ 6.1 - 文件加密使用non-OAEP密钥封装***

    ​ 6.2 - 中心目录加密

    ​ 6.3 - 文件使用LZMA进行压缩

    ​ 6.3 - 文件使用PPMd+压缩

    ​ 6.3 - 文件加密使用Blowfish

    ​ 6.3 - 文件加密使用Twofish

  • 通用位标志

    Bit 0 被设置(二进制最后一位为1),表示文件被加密

  • 压缩方式

    ​ 0 - 文件被存储(不压缩)

    ​ 1 - 文件被压缩

    ​ 2 - 文件压缩系数为1

    ​ 3 - 文件压缩系数为2

    ​ 4 - 文件压缩系数为3

    ​ 5 - 文件压缩系数减小为4

    ​ 6 - 文件内爆

    ​ 7 - 保留用于Tokenizing压缩算法

    ​ 8 - 文件被Deflated

    ​ 9 - 使用Deflate64增强放气功能™

    ​ 10 - PKWARE数据压缩库内爆(旧IBM TERSE)

    ​ 11 - 由PKWARE保留

    ​ 12 - 文件使用BZIP2算法压缩

    ​ 13 - PKWARE保留

    ​ 14 - 伊兹玛

    ​ 15 - PKWARE保留

    ​ 16 - IBM z/OS CMPSC压缩

    ​ 17 - PKWARE保留

    ​ 18 - 使用IBM TERSE压缩文件(新)

    ​ 19 - IBM lz77z架构

    ​ 20 - 已弃用(对zstd使用方法93)

    ​ 93 - Zstandard (zstd)压缩

    ​ 94 - MP3压缩

    ​ 95 - XZ压缩

    ​ 96 - JPEG变体

    ​ 97 - WavPack压缩数据

    ​ 98 - PPMd版本I, Rev 1

    ​ 99 - AE-x加密标记

其他

​ .ZIP 文件的最小大小为 22 bytes。这样的空 zip 文件仅包含中央目录记录结尾 (EOCD):
[0x50,0x4B,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]

image-20240710025026671

​ 对于标准 ZIP,存档文件及其内部单个文件的最大大小为 4,294,967,295 字节(2个 32−1 字节,或 4 GB 减去 1 个字节)。对于 ZIP64,最大大小为 18,446,744,073,709,551,615 字节(264−1 字节,或 16 EB 减去 1 字节)。

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值