🌟 关注这个靶场的其它相关笔记:CTF 靶场笔记 —— 攻防世界(XCTF)· 过关思路合集
0x01:考点速览
本关考察的是 MISC 中的音频隐写相关的内容,通过此关,你可以学习到以下知识点:
-
ZIP 递归破解脚本 Python 编写。
-
ZIP 文件密钥爆破工具 ARCHDR 的使用,以下是 CTF 推荐的爆破流程:
-
设置长度 4-6 位(可以浮动,但不用太长,过长的一般不会出现在 CTF 中)。
-
纯数字爆破。
-
大小写字母爆破。
-
混合符号爆破。
-
-
Audacity 查看音频 “频谱图”。
0x02:Write UP
将附件从靶场中下载下来,尝试使用 BandZip 解压缩发现需要密码,此时可以注意到压缩包里同样也是一个压缩包,且名字为数字,我们尝试将这个内部压缩包的文件名当作密码输入,即可解压缩:
破解完成后会发现,46783.zip 内又嵌套了一个压缩包同样为数字,同样也可以通过压缩包名字解压:
此时,你应该察觉到不对了。天知道它里面有多少层压缩包,So,我们必须编写一个脚本来自动解压,笔者编写的脚本如下:
"""
@ ScriptName : ZIP 递归解压脚本
@ Description : 当碰到 ZIP 文件下又是 ZIP 文件且不知道嵌套多少层时,可以通过该脚本进行递归解压。本脚本属于一个模板,可以根据需求自由修改
ZipFile 操作压缩文件参考:https://blog.csdn.net/magicboom/article/details/90046901
"""
import zipfile, os
file_path = "f932f55b83fa493ab024390071020088.zip"
# 计数器
count = 1
# 递归解压文件
while True:
# 读取 file_path 指定的 zip 文件
zip_file = zipfile.ZipFile(file_path, "r")
next_file_name = "" # 下一个文件名
for file in zip_file.namelist():
# 解压文件,设置解压密码为文件的名称
zip_file.extract(file, pwd=file.split(".")[0].encode())
next_file_name = file
zip_file.close() # 必须要调用的
# 打印提示信息
print(f"[ {count} ] File {file_path} 解压完毕 => Password:{next_file_name.split('.')[0]} => Result File: {next_file_name}")
# 删除已经被解压的压缩文件
os.remove(file_path)
# 赋值下一个待解压的压缩文件的地址
file_path = next_file_name
count += 1
运行脚本,大约解压了 1520 次后,程序会报错,因为此时无法使用下一个文件的名字作为密码进行解压了:
但是解压还需要密码,所以,此时我们就需要借助 ARCHPR 这款工具尝试爆破密码了,设置密码口令长度 4-6 位,并勾选测试范围为所有数字与小写字母,开始爆破:
使用解压密码 b0yzz 进行解压会得到一份音频文件,我们将其丢到 Audacity 里,切换视图为 “频谱图” 即可看到 Flag:
BallsRealBolls