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)
总结
- 对该题的考点总结
嵌套压缩包、文件结构

加载中...