CTF实战分享 | RWZIP
字数 1288 2025-08-19 12:42:14
CTF中ZIP压缩包题目分析与实战技巧
一、ZIP文件基础结构
ZIP文件由三个主要部分组成:
-
压缩源文件数据区
- 头文件标记:
50 4B 03 04 - 解压文件所需pkware版本:
14 00 - 全局方式位标记(判断有无加密):
00 00 - 压缩方式:
08 00 - 最后修改文件时间:
5A 7E - 最后修改文件日期:
F7 46
- 头文件标记:
-
压缩源文件目录区
- 目录中文件文件头标记:
50 4B 01 02 - 压缩使用的pkware版本:
1F 00 - 解压文件所需pkware版本:
14 00 - 全局方式位标记(判断伪加密):
00 00 - 压缩方式:
08 00 - 最后修改文件时间:
5A 7E - 最后修改文件日期:
F7 46
- 目录中文件文件头标记:
-
压缩源文件目录结束标志
- 目录结束标记:
50 4B 05 06 - 当前磁盘编号:
00 00 - 目录区开始磁盘编号:
00 00 - 本磁盘上纪录总数:
01 00 - 目录区中纪录总数:
01 00 - 目录区尺寸大小:
59 00 00 00 - 目录区对第一张磁盘的偏移量:
3E 00 00 00 - ZIP文件注释长度:
00 00
- 目录结束标记:
二、CTF中ZIP压缩包常见题型
- 利用进制转换隐藏信息
- 作为冗余信息或隐藏信息藏在其他文件中(通常是图片)
- 简单密码爆破
- 字典爆破/掩码攻击
- 伪加密
- 明文攻击
- CRC32碰撞
- 文件修复
- 冗余信息拼接
- 注释隐藏密码
三、实战案例分析:RWZIP题目
工具准备
- Winhex
- 010 Editor
- Bandizip
解题步骤
-
初步检查
- 下载题目提供的压缩包文件
- 使用普通压缩工具(如360压缩)打开,发现flag.txt文件提示损坏
- 尝试用WinRAR保留损坏文件打开,提示需要密码
- 使用Bandizip打开检查
-
十六进制分析
- 使用010 Editor打开压缩包
- 检查文件头标记和关键字段
- 展开flag.txt文件信息部分进行分析
- 对照压缩源文件数据区结构逐项检查
-
异常发现
- 在CRC校验部分发现全为0,明显异常
- 使用010 Editor直接修改异常部分
- 保存修改后的文件
-
密码恢复
- 使用Bandizip的密码恢复功能
- 注意:普通版仅支持4位数密码,专业版支持6位
- 导入压缩包文件
- 使用默认设置开始密码恢复(示例中仅用4秒恢复密码)
-
最终解密
- 使用恢复的密码解压文件
- 打开flag.txt文件
- 对内容进行字母反转操作获取最终flag
四、关键技巧总结
- 伪加密识别:检查全局方式位标记(
00 00表示无加密,特定值可能表示伪加密) - CRC校验验证:异常的CRC值(如全0)可能提示文件被修改
- 工具选择:Bandizip比普通压缩工具能更好地处理损坏文件
- 密码恢复:短密码可快速爆破,复杂密码需要字典或掩码攻击
- 十六进制编辑:010 Editor等工具可直接修改ZIP文件结构
五、扩展知识
- ZIP文件注释:可能隐藏密码或提示信息
- 冗余数据:检查文件末尾是否有附加数据
- 组合攻击:伪加密+CRC碰撞等组合题型
- 时间戳分析:修改时间可能包含隐藏信息
通过掌握这些知识和技巧,能够有效解决CTF竞赛中大多数ZIP压缩包相关的题目。