Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程

2023 宁波天一永安杯 MISC - zip 题解:二进制字典爆破 ZIP 密码全流程

阿贵
1天前发布 /正在检测是否收录...
温馨提示:
本文最后更新于2026年04月16日,已超过1天没有更新,若内容或图片失效,请留言反馈。

2023 宁波天一永安杯 MISC - zip 题解:二进制字典爆破 ZIP 密码全流程

一、题目背景

  • 赛事:宁波天一·永安杯 2023
  • 题目类型:MISC(压缩包爆破)
  • 题目描述:flag{}
  • 目标:破解加密 ZIP 压缩包密码,提取隐藏的 Flag

二、解题思路与过程

1. 题目分析

这是一道典型的 ZIP 压缩包密码爆破题。题目仅提供了一个加密的 ZIP 文件,没有任何额外提示。根据以往的 CTF 出题习惯,这类无提示的密码爆破题,密码大概率是短数字串、纯字母串,或是本题这种二进制(0/1)字符串

2. 第一步:生成自定义二进制字典

我们推测密码是由 0 和 1 组成的二进制字符串,且长度不会太长。为了覆盖所有可能性,我们编写了一个 Python 脚本,生成长度从 1 到 9 的所有二进制组合,作为爆破字典。

import itertools

def generate_binary_dict(max_length=9):
    """
    生成所有长度为1到max_length的二进制字符串
    :param max_length: 二进制字符串的最大长度
    :return: 包含所有组合的列表
    """
    dictionary = []
    for length in range(1, max_length + 1):
        for combo in itertools.product(['0', '1'], repeat=length):
            dictionary.append(''.join(combo))
    return dictionary

def save_to_file(dictionary, filename='binary_dict.txt'):
    """
    将生成的字典保存到文件
    :param dictionary: 二进制字符串列表
    :param filename: 输出文件名
    """
    with open(filename, 'w') as f:
        for item in dictionary:
            f.write(f"{item}\n")
    print(f"字典已保存到 {filename}")

if __name__ == "__main__":
    # 生成最大长度为9的二进制字典
    binary_dict = generate_binary_dict(max_length=9)
    # 保存到文件
    save_to_file(binary_dict)

执行脚本后,会生成一个名为 binary_dict.txt 的字典文件,包含了从 01111111111 的所有二进制组合。

3. 第二步:提取 ZIP 哈希值

在 Kali 环境中,我们使用 zip2john 工具从加密的 ZIP 文件中提取密码哈希值,以便后续使用 John the Ripper 进行爆破。

zip2john "/root/Desktop/zippwd.zip" > hash.txt

执行后,哈希值被保存到了 hash.txt 文件中。

4. 第三步:使用 John the Ripper 爆破密码

John the Ripper 是一款强大的密码破解工具,我们使用它配合刚才生成的二进制字典进行爆破。

john --wordlist=/root/Desktop/binary_dict.txt hash.txt

工具很快就成功破解出了密码,再次执行 john --show 查看结果:

john --show hash.txt

输出结果如下:

zippwd.zip/flag.txt:01001100:flag.txt:zippwd.zip:/root/Desktop/zippwd.zip

mo1d1wht.png

可以看到,ZIP 包内 flag.txt 文件的密码为 01001100

5. 第四步:解压文件获取 Flag

使用破解出的密码解压 ZIP 文件,即可得到 flag.txt,里面就是最终的 Flag。


三、知识点总结

  1. ZIP 爆破工具链

    • zip2john:提取 ZIP 文件的密码哈希。
    • john:基于字典的密码爆破工具,支持多种哈希算法。
    • fcrackzip:另一款常用的 ZIP 爆破工具,命令为 fcrackzip -D -p binary_dict.txt -u zippwd.zip,可作为备选方案。
  2. 自定义字典生成技巧

    • 当题目提示很少时,优先尝试简单规则字典:纯数字、纯字母、二进制、键盘顺序、生日格式等。
    • Python 的 itertools.product 是生成全组合字典的神器,可根据题目需求灵活修改字符集和长度。
  3. 常见爆破失败原因排查

    • 字典文件格式问题:确保字典每行只有一个密码,无多余空格或换行符。
    • 路径问题:爆破时需确保 ZIP 文件和字典文件路径正确,避免 No such file or directory 错误。
    • 密码长度:如果爆破失败,可以尝试增加字典的最大长度,比如将 max_length 设为 10 或 12。

四、完整解题命令集合

# 1. 生成二进制字典(执行上面的Python脚本)
python3 binary_dict.py

# 2. 提取ZIP哈希
zip2john zippwd.zip > hash.txt

# 3. 使用john进行爆破
john --wordlist=binary_dict.txt hash.txt

# 4. 查看爆破结果
john --show hash.txt

# 5. 解压文件(使用破解出的密码)
unzip -P 01001100 zippwd.zip

五、最终 Flag

(解压后即可得到题目要求的 flag{} 格式 Flag)


喜欢就支持一下吧
点赞 1 分享 收藏
评论 抢沙发
OωO
取消 登录评论