CTF 中对压缩包的处理

CTF 中对压缩包的处理
Aristore伪加密修复
工具
010 Editor
修复步骤
把 50 4B 03 04 14 00
和 50 4B 01 02 1F 00
后面的这两个字节改为 00 00
- 修复前:
- 修复后:
CRC32 碰撞
工具
攻击条件
被加密的文本文档很小(通常 4kb)
爆破多个压缩包中的 4 字节文件
攻击步骤
这里调用了 theonlypwner/crc32,要把下面的脚本放到同一个目录中
1 | import zipfile |
爆破单个文件
攻击步骤
先获取到该文件的 CRC 码
然后将 CRC 码带入到下面的命令中运行
1 | python crc32.py reverse [CRC] |
运行得到以下输出(此处以 python crc32.py reverse 0x75F90D3A
为例):
1 | 4 bytes: z5Bz {0x7a, 0x35, 0x42, 0x7a} |
明文攻击
工具
ARCHPR
已知完整的明文文件
攻击条件
有一个加密的压缩包以及一个压缩包内存在的文件 (可以通过 CRC 码判断,相同就是同一个文件)
攻击步骤
1. 构造压缩包并处理加密压缩包
先将该已知的文件 logo.png
使用相同的方式压缩
然后被攻击包内仅保留一个已知的文件,其他文件都删除
2. 明文攻击获取解压密码
在 ARCHPR 打开处理过的加密压缩包 flag.zip
,攻击类型选择明文,明文文件选择刚刚构造好的压缩包 logo.zip
如果试了几次都是未找到,那很有可能是压缩软件出了问题
换一个软件压缩 logo.png
,然后重复上述操作
这一次就顺利恢复了,这个加密压缩包的密码就是 q1w2e3r4
已知少部分明文字节
攻击条件
- 已知 12 个字节及偏移
- 需获取加密文件中 12 字节的明文数据及偏移,其中至少 8 字节需要连续(如文件头、固定格式标识符)。
- 加密算法为 ZipCrypto
- 仅支持传统 ZIP 加密(ZipCrypto),不支持 AES 加密。
- 需确认加密方式为 ZipCrypto Deflate 或 ZipCrypto Store。
攻击步骤(以 PNG 为例)
1. 构造构造文件头
1 | python -c "import binascii; open('png_header', 'wb').write(binascii.unhexlify('89504E470D0A1A0A0000000D49484452'))" |
2. 提取密文数据
使用 bkcrack
从加密 ZIP 中提取目标文件的密文数据:
1 | bkcrack -C encrypted.zip -c target_file.png -p png_header -o 0 |
-C
:指定加密的 ZIP 文件。-c
:指定 ZIP 中被加密的目标文件(如target_file.png
)。
运行得到以下输出:
1 | bkcrack 1.7.1 - 2024-12-21 |
得到三个密钥:97d30dcc
173b15a8
6e0e7455
3. 使用密钥解密文件
通过恢复的密钥解密目标文件:
1 | bkcrack -C encrypted.zip -c target_file.png -k 97d30dcc 173b15a8 6e0e7455 -d decrypted_data |
-k
:输入恢复的密钥(顺序为key0 key1 key2
)。-d
:指定解密后的输出文件名(如decrypted_data
)。
运行得到以下输出:
1 | bkcrack 1.7.1 - 2024-12-21 |
此时你的根目录下将会出现一个经过解密得到的文件 decrypted_data
。
4. 处理解密后的数据
根据加密时的压缩方式,可能需要进一步处理解密后的数据:
场景 1:文件以 Store 模式加密(未压缩)
解密后的数据即原始文件,直接重命名即可。场景 2:文件以 Deflate 模式加密(需解压)
解密后的数据需要进一步解压,使用 tools
文件夹提供 Python 解压脚本:
1 | python tools/inflate.py < decrypted_data > output.png |
掩码攻击
工具
ARCHPR
攻击条件
已知压缩包密码的长度,还知道密码的其中一部分
攻击步骤
攻击类型选择掩码,左边选择好范围,在右边输入掩码
比如说已知压缩包的密码是以 1391040
开头的手机号,那么掩码就可以填 1391040????
,这里的 ?
可以理解为一个占位符
字典爆破
工具
shadowabi/S-BlastingDictionary: 自己搜集的爆破字典,包括常用用户名、密码弱口令、SQL 万能密码等
zxcvbn001/password_brute_dictionary: 口令爆破字典,有键盘组合字典、拼音字典、字母与数字混合这三种类型