WeChall - Stegano Attachment
Challenge
"You got mail and a nice attachment." — 有一张附件图片,其中隐藏了 12 字母的 session-bound solution。
Solution
挑战页面提供了 attachment.php,下载后是一个 JPEG
图片(221x350)。
JPEG 尾部附着一个 ZIP 文件,其中包含 solution.txt。JPEG
和 ZIP 能共存于同一个文件是因为两者的解析方向不同:
1 | JPEG: 从头读 → FF D9 后停止(尾部垃圾被忽略) |
JPEG 解码器遇到 End of Image marker FF D9
就结束处理,后面的数据不影响图片显示。
而 unzip 根本不依赖文件扩展名 —— ZIP 格式的 End of
Central Directory (EOCD) 记录固定在文件的最后 22
字节。unzip 打开文件后: 1. 从尾部往前搜索 EOCD
签名 PK\x05\x06 2. 读取 EOCD 中的中央目录偏移量 3.
跳到偏移量处,找到所有文件条目和压缩数据
所以只要文件尾部附着一个结构完整的 ZIP,unzip
就能识别,无论文件头是什么(JPEG、EXE、PDF 都一样)。man page
也写了自解压 ZIP(exe+ZIP)"as with any other ZIP archive"
—— 同一机制。
用 unzip -l 确认 ZIP 内容:
1 | $ unzip -l attachment.jpg |
直接解压:
1 | $ unzip attachment.jpg |
solution.txt
内容即为答案(session-bound,每用户不同)。