0%

1

2025-04-08 20:00By
Romantic
图片隐写二维码压缩包分析

Problem: [NSSRound#29 Basic]27262524

思路

  • 解题大致思路
    得到一个压缩包,爆破出密码
    猜测多层嵌套压缩包,密码为包名重复三次
    解压得到名为27、图为26的图片
    在010发现尾部有一个jpg的文件头
    提取图片一张二维码
    扫码得到flag

EXP

  • 具体攻击代码
import os
import re
import pyzipper

def extract_digits_repeat_three_times(filename):
    digits = ''.join(re.findall(r'\d+', filename))
    return digits * 3 if digits else None

def unzip_recursive(zip_path, extract_dir):
    current_zip = zip_path
    layer = 0

    while True:
        filename = os.path.basename(current_zip)
        password = extract_digits_repeat_three_times(filename)

        if not password:
            print(f"[!] 未能从文件名中提取密码: {filename}")
            break

        try:
            with pyzipper.AESZipFile(current_zip, 'r') as zf:
                zf.pwd = password.encode()
                zf.extractall(extract_dir)
                print(f"[+] 第 {layer} 层解压成功,密码:{password}")

                # 寻找下一层 zip 文件
                next_zip = None
                for name in zf.namelist():
                    if name.lower().endswith('.zip'):
                        next_zip = os.path.join(extract_dir, name)
                        break

                if next_zip and os.path.exists(next_zip):
                    current_zip = next_zip
                    layer += 1
                else:
                    print("[✓] 解压完成,没有更多的 zip 文件。")
                    break

        except Exception as e:
            print(f"[!] 解压失败: {e}")
            break

# 使用方法
# 假设初始压缩包为 multi_layer.zip,解压目录为 ./unzipped
if __name__ == "__main__":
    zip_file = "E:\\NSS\\22.zip"  # 替换为你的最外层 zip 文件
    output_dir = "./unzipped"
    os.makedirs(output_dir, exist_ok=True)
    unzip_recursive(zip_file, output_dir)

总结

  • 对该题的考点总结
    嵌套压缩包、文件结构
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论

加载中...