第一届 "帕鲁杯" - CTF挑战赛-Misc-350×350
字数 1367 2025-08-19 12:41:52
"帕鲁杯" CTF挑战赛Misc-350×350题目解析与教学文档
题目概述
这是一道Misc类CTF题目,涉及多种隐写术和文件分析技术。题目提供了一个包含图片和加密压缩包的文件,需要通过多层分析才能获取最终flag。
解题步骤详解
第一步:初始文件分析
- 下载附件后发现包含一张图片(key.jpg)和一个需要密码的压缩包
- 使用010 Editor分析key.jpg,在文件尾部发现异常数据:
- docProps/app.xml
- docProps/core.xml
- word/_rels/document.xml
- 这些是典型的Word文档内部结构
第二步:提取隐藏的Word文档
方法一:手动提取
- 在010 Editor中选中尾部数据(Ctrl+Shift+C)
- 新建十六进制文件,粘贴数据(Ctrl+Shift+V)
- 保存为palu.docx
方法二:使用foremost工具分离
foremost key.jpg
分离出的文件修改后缀为docx
第三步:分析Word文档
- 打开palu.docx文档
- 全选文本(Ctrl+A)发现隐藏的空白处被选中
- 复制粘贴到记事本,发现隐藏的六十四卦编码:
井兑未济大畜咸益升归妹旅中孚剥噬嗑嗑小过中孚震归妹升兑艮随旅随蒙颐升益蛊颐咸涣豫兑咸观艮益升中孚复睽睽咸观解临旅涣噬嗑嗑屯
第四步:解压初始压缩包
- 使用六十四卦编码作为密码解压初始压缩包
- 解压后得到key.txt,但提示"key不在这"
第五步:分析压缩包伪加密
- 使用010 Editor分析压缩包结构:
- 压缩源文件数据区的全局加密(ushort frFlags)为00 00
- 压缩源文件目录区的全局方式标记(ushort deFlags)为09 00
- 这是典型的伪加密特征:
- 无加密:数据区和目录区都应为00 00
- 伪加密:数据区00 00,目录区09 00
- 真加密:数据区和目录区都为09 00
- 修改目录区的09为00,保存后成功解压
第六步:分析解压后的图片
- 解压后得到一张图片,使用010 Editor分析
- 发现文件头部有压缩包特征(50 4B 03 04)
- 使用foremost分离出隐藏的压缩包
第七步:分析分离出的文件
- 解压分离出的压缩包,得到两张图片(33.png和另一张jpg)
- 文件大小分析:
- png: 10MB
- jpg: 388KB
- 怀疑png中隐藏了信息,考虑盲水印技术
第八步:提取盲水印
- 使用Python blind_watermark工具:
from blind_watermark import WaterMark # 读取原图 bwm = WaterMark(password_wm=1, password_img=1) # 解水印 bwm1 = WaterMark(password_wm=1, password_img=1) bwm1.extract(filename='33.png', wm_shape=(350, 350), out_wm_name='flag.png') - 关键参数:
- wm_shape=(350, 350) 对应题目名称
- 密码使用默认值1
第九步:获取最终flag
- 提取出的flag.png是一个二维码
- 使用QR Research工具扫描二维码
- 获得最终flag:
flag{b3bd61023d129f9e39b4a26b98c0f366}
关键技术总结
- 文件尾部数据隐藏:在图片尾部附加其他文件数据
- Word文档结构分析:识别docx的XML结构特征
- 伪加密识别:理解ZIP文件结构,区分真伪加密
- 盲水印提取:使用特定工具提取图片中隐藏的信息
- 文件分离技术:使用foremost等工具分离复合文件
工具清单
- 010 Editor:十六进制文件分析
- foremost:文件分离工具
- Python blind_watermark:盲水印提取工具
- QR Research:二维码识别工具
学习要点
- 掌握常见文件格式的结构特征
- 理解ZIP文件伪加密原理及修复方法
- 熟悉盲水印技术的应用场景和提取方法
- 培养多层分析思维,逐步深入挖掘隐藏信息