【攻防世界-Miscellaneous-300

⭕、知识点
压缩包套娃/压缩包暴力破解/音频频谱隐写

一、题目
给了一个压缩包

二、解题
1、尝试解压发现需要密码

2、查看16进制发现是真加密

3、binwalk没有发现隐写数据

4、查看压缩包没有发现注释

5、winrar打开压缩包发现里面嵌套有一个压缩包,名字是一串数字

用名字作为当前压缩包解压密码,果然成功解压

6、再次解压第二个压缩包,发现情况同理,是一个无限套娃

7、编写脚本破解

import zipfile
import os
import shutil

# 判断是否为压缩包文件
def is_zip_file(filename):
    return zipfile.is_zipfile(filename)

# 获取内层压缩包名称以作为解压密码
def get_inner_zip_name(zip_path):
    with zipfile.ZipFile(zip_path, 'r') as zip_ref:
        # 返回第一个 .zip 文件名,不带后缀
        for name in zip_ref.namelist():
            if name.endswith('.zip'):
                # 获取去掉后缀的文件名
                return os.path.splitext(os.path.basename(name))[0]
    return None

# 用密码解压文件
def extract_zip_with_password(zip_path, password, extract_dir):
    with zipfile.ZipFile(zip_path, 'r') as zip_ref:
        zip_ref.extractall(path=extract_dir, pwd=password.encode('utf-8'))

# 解压缩包套娃主逻辑
def nested_unzip(start_zip):
    current_zip = start_zip
    current_dir = os.path.dirname(os.path.abspath(start_zip))
    count = 0

    while is_zip_file(current_zip):
        temp_dir = os.path.join(current_dir, f"unzipped_{count}")
        os.makedirs(temp_dir, exist_ok=True)

        # 用内部 zip 文件名作为密码
        password = get_inner_zip_name(current_zip)
        if not password:
            print(f"❌ 无法获取密码,{current_zip} 中未找到 zip 文件")
            break

        print(f"🧩 解压第 {count + 1} 层:{current_zip},使用密码:{password}")

        try:
            extract_zip_with_password(current_zip, password, temp_dir)
        except RuntimeError as e:
            print(f"❌ 解压失败:{e}")
            break

        # 查找下一个压缩包
        next_zip = None
        for file in os.listdir(temp_dir):
            if file.endswith('.zip'):
                next_zip = os.path.join(temp_dir, file)
                break

        if not next_zip:
            print("✅ 没有发现更多 zip 文件,解压完成!")
            break

        current_zip = next_zip
        count += 1

if __name__ == "__main__":
    start_zip_path = "1.zip"  # 改成你的入口压缩包名
    nested_unzip(start_zip_path)

直到一千多个压缩包终于见底了

8、查看最后一个压缩包,真加密,无注释,内层为一个音频文件

9、只能进行暴力攻击

10、音频频域分析得到flag

三、答案
BallsRealBolls

四、总结

对于真加密压缩包,无二进制隐写,无提示信息,可以查看其内层是否嵌套压缩包(或文件),其名称可能为解压密码。

新增一种对压缩包的攻击方式,现有如下:

1、压缩包文件修复
2、查看属性、注释
3、二进制文件隐写
4、伪加密修复
5、暴力攻击
6、明文攻击
7、压缩包套娃

posted @ 2025-04-12 14:22  wyuu101  阅读(188)  评论(0)    收藏  举报