CTF实战复盘:我是如何从一堆POST包里挖出JPG和带密码ZIP的
CTF实战复盘从POST流量中挖掘隐藏的JPG与加密ZIP那是一个周末的深夜我正对着屏幕上的Wireshark抓包文件发呆。这是一道来自BUUCTF的流量分析题题目描述只有简单的一句你能找到flag吗没有更多提示只有一份pcapng格式的流量文件。作为一名CTF中级爱好者我知道这又是一次考验耐心和细心的挑战。1. 初始分析与POST包过滤打开Wireshark后面对上千个数据包我首先想到的是缩小范围。根据经验WebShell工具如菜刀通常使用POST方法进行数据传输。于是我在过滤栏输入http.request.methodPOST这个简单的过滤条件立即将数据包数量减少到几十个。我开始逐个检查这些POST请求寻找异常特征。大多数数据包看起来都很正常直到我注意到一个特殊的请求——它的负载明显比其他包长得多而且包含大量看似随机的字符。关键观察点异常POST包通常具有不寻常的长度或内容模式重点关注包含大量编码数据的请求体注意参数名如z1、z2等可能是自定义的传输标识2. 追踪流与16进制线索分析右键点击这个可疑的数据包选择追踪流-HTTP流完整内容呈现在眼前。与之前的数据包不同这里有两个明显的参数z1Base64编码的字符串 z2长16进制字符串我的第一反应是检查z1参数。将其Base64解码后得到了一些可读的明文信息这验证了我的猜测方向。接着我将注意力转向z2参数——那串长达数百字符的16进制数据。JPG文件识别技巧文件头签名FF D8 FF(JPEG起始标记)文件尾签名FF D9(JPEG结束标记)使用文本编辑器快速搜索这些关键标记文件类型文件头文件尾JPEGFF D8 FFFF D9ZIP50 4B 03 0450 4B 05 06PNG89 50 4E 47IEND3. 从16进制到实际文件提取确认z2数据包含JPG文件后我采取了以下步骤进行提取将z2的16进制数据复制到纯文本文件使用010 Editor的导入16进制功能保存为.jpg格式文件# 简易16进制转二进制Python示例 hex_str FFD8FF... # 实际z2数据 with open(output.jpg, wb) as f: f.write(bytes.fromhex(hex_str))打开生成的图片后显示的并不是flag而是一个字符串Th1s_1s_p4sswd_!!!。这显然是一个密码提示意味着后面可能还有加密内容需要这个密码。4. 回溯分析寻找ZIP压缩包带着新发现的密码我回到Wireshark继续分析。这次我重点关注以下几点查找ZIP文件特征签名(PK头)注意数据包大小突然变化的流量检查HTTP响应中的文件传输痕迹在倒数第二个POST包的追踪流中我发现了PK标识——这是ZIP压缩包的明确特征。为了提取这个嵌入式ZIP文件我决定使用Kali Linux中的foremost工具foremost -i challenge.pcapng -o output_dir -T提示foremost默认支持多种文件类型识别包括ZIP、JPG等常见格式提取出的ZIP文件需要密码才能解压这正是之前从JPG图片中获得的密码派上用场的时候unzip -P Th1s_1s_p4sswd_!!! extracted.zip成功解压后flag.txt文件中的内容就是我们要找的flagflag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z}5. 关键工具链与技巧总结这次挑战让我深刻体会到工具链配合的重要性。以下是我整理的完整分析流程流量捕获与分析Wireshark基础过滤技巧HTTP流追踪与异常检测数据提取与转换16进制编辑器使用(010 Editor或xxd)文件签名识别技巧Base64解码与编码文件提取工具foremost自动化文件提取binwalk替代方案分析密码破解与关联上下文线索关联密码复用模式识别常见陷阱与解决方案文件损坏检查头尾签名是否完整密码无效确认编码方式(如URL编码)工具兼容性尝试不同提取工具组合这次CTF挑战最宝贵的经验是培养了对数据模式的敏感度。当看到长16进制字符串时第一反应就应该是检查常见文件签名当发现密码提示时要立即联想到后面可能有加密文件。这种侦探式的思维模式正是CTF流量分析题的精髓所在。